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