1 #pragma once
2 #include <common/compiler.h>
3 #include <DragonOS/stdint.h>
4 #define MAX_ERRNO 4095
5 
6 #define IS_ERR_VALUE(x) unlikely((x) >= (uint64_t)-MAX_ERRNO)
7 
8 /**
9  * @brief 判断返回的指针是否为errno
10  *
11  * @param ptr 待校验的指针
12  * @return long 1 => 是错误码
13  *              0 => 不是错误码
14  */
IS_ERR(const void * ptr)15 static inline long __must_check IS_ERR(const void* ptr)
16 {
17     return IS_ERR_VALUE((uint64_t)ptr);
18 }
19 
20 /**
21  * @brief 判断返回的指针是否为errno或者为空
22  *
23  * @param ptr 待校验的指针
24  * @return long 1 => 是错误码或NULL
25  *              0 => 不是错误码或NULL
26  */
IS_ERR_OR_NULL(const void * ptr)27 static inline long __must_check IS_ERR_OR_NULL(const void* ptr)
28 {
29     return !ptr || IS_ERR_VALUE((uint64_t)ptr);
30 }
31 
32 /**
33  * @brief 将错误码转换为指针
34  *
35  * @param error 错误码
36  * @return void* 转换后的指针
37  */
ERR_PTR(long error)38 static inline void* __must_check ERR_PTR(long error)
39 {
40     return (void*)(error);
41 }
42 
PTR_ERR(void * ptr)43 static inline long __must_check PTR_ERR(void * ptr)
44 {
45     return (long)ptr;
46 }