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