-
IS_ERR
将传入值与(unsigned long) - MAX_ERRNO
的值进行比较,大于则IS_ERR为真,表示地址非法。
0xFFFF FFFF - 0x0000 0FFF = 0xFFFF F000
有效指针、空指针(NULL)IS_ERR() 返回true,错误指针IS_ERR返回false。
// 将传入指向void类型的指针ptr强制转换成unsigned long类型
static inline bool __must_check IS_ERR(__force const void *ptr)
{
return IS_ERR_VALUE((unsigned long)ptr);
}
#define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
#define MAX_ERRNO 4095
详细信息可参考:https://www.jianshu.com/p/7bc78698ed09
- IS_ERR_OR_NULL
只有有效指针才会返回true,空指针错误指针将返回false。
static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr)
{
return unlikely(!ptr) || IS_ERR_VALUE((unsigned long)ptr);
}
- PTR_ERR
将传入的void *类型指针强转为long类型,并返回。
static inline long __must_check PTR_ERR(__force const void *ptr)
{
return (long) ptr;
}
- ERR_PTR
将传入的long类型强转为void *类型指针,并返回。
static inline void * __must_check ERR_PTR(long error)
{
return (void *) error;
}