Branch data Line data Source code
1 : : #ifndef _LINUX_ERR_H
2 : : #define _LINUX_ERR_H
3 : :
4 : : #include <linux/compiler.h>
5 : :
6 : : #include <asm/errno.h>
7 : :
8 : : /*
9 : : * Kernel pointers have redundant information, so we can use a
10 : : * scheme where we can return either an error code or a dentry
11 : : * pointer with the same return value.
12 : : *
13 : : * This should be a per-architecture thing, to allow different
14 : : * error and pointer decisions.
15 : : */
16 : : #define MAX_ERRNO 4095
17 : :
18 : : #ifndef __ASSEMBLY__
19 : :
20 : : #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
21 : :
22 : : static inline void * __must_check ERR_PTR(long error)
23 : : {
24 : 683652 : return (void *) error;
25 : : }
26 : :
27 : : static inline long __must_check PTR_ERR(__force const void *ptr)
28 : : {
29 : 1169707 : return (long) ptr;
30 : : }
31 : :
32 : : static inline long __must_check IS_ERR(__force const void *ptr)
33 : : {
34 : 208962249 : return IS_ERR_VALUE((unsigned long)ptr);
35 : : }
36 : :
37 : : static inline long __must_check IS_ERR_OR_NULL(__force const void *ptr)
38 : : {
39 [ + + ][ + # ]: 29696 : return !ptr || IS_ERR_VALUE((unsigned long)ptr);
[ + - ][ + - ]
[ + + ][ + + ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ + - ]
[ + - ]
40 : : }
41 : :
42 : : /**
43 : : * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type
44 : : * @ptr: The pointer to cast.
45 : : *
46 : : * Explicitly cast an error-valued pointer to another pointer type in such a
47 : : * way as to make it clear that's what's going on.
48 : : */
49 : : static inline void * __must_check ERR_CAST(__force const void *ptr)
50 : : {
51 : : /* cast away the const */
52 : : return (void *) ptr;
53 : : }
54 : :
55 : : static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
56 : : {
57 [ # # ][ # # ]: 0 : if (IS_ERR(ptr))
58 : : return PTR_ERR(ptr);
59 : : else
60 : : return 0;
61 : : }
62 : :
63 : : /* Deprecated */
64 : : #define PTR_RET(p) PTR_ERR_OR_ZERO(p)
65 : :
66 : : #endif
67 : :
68 : : #endif /* _LINUX_ERR_H */
|