xref: /DragonOS/kernel/src/common/err.h (revision 0e0c187484281768391e131495f0655e40d70cf7)
12813126eSlogin #pragma once
22813126eSlogin #include <common/compiler.h>
3*0e0c1874Slogin #include <DragonOS/stdint.h>
42813126eSlogin #define MAX_ERRNO 4095
52813126eSlogin 
62813126eSlogin #define IS_ERR_VALUE(x) unlikely((x) >= (uint64_t)-MAX_ERRNO)
72813126eSlogin 
82813126eSlogin /**
92813126eSlogin  * @brief 判断返回的指针是否为errno
102813126eSlogin  *
112813126eSlogin  * @param ptr 待校验的指针
122813126eSlogin  * @return long 1 => 是错误码
132813126eSlogin  *              0 => 不是错误码
142813126eSlogin  */
IS_ERR(const void * ptr)152813126eSlogin static inline long __must_check IS_ERR(const void* ptr)
162813126eSlogin {
172813126eSlogin     return IS_ERR_VALUE((uint64_t)ptr);
182813126eSlogin }
192813126eSlogin 
202813126eSlogin /**
212813126eSlogin  * @brief 判断返回的指针是否为errno或者为空
222813126eSlogin  *
232813126eSlogin  * @param ptr 待校验的指针
242813126eSlogin  * @return long 1 => 是错误码或NULL
252813126eSlogin  *              0 => 不是错误码或NULL
262813126eSlogin  */
IS_ERR_OR_NULL(const void * ptr)272813126eSlogin static inline long __must_check IS_ERR_OR_NULL(const void* ptr)
282813126eSlogin {
292813126eSlogin     return !ptr || IS_ERR_VALUE((uint64_t)ptr);
302813126eSlogin }
312813126eSlogin 
322813126eSlogin /**
332813126eSlogin  * @brief 将错误码转换为指针
342813126eSlogin  *
352813126eSlogin  * @param error 错误码
362813126eSlogin  * @return void* 转换后的指针
372813126eSlogin  */
ERR_PTR(long error)382813126eSlogin static inline void* __must_check ERR_PTR(long error)
392813126eSlogin {
402813126eSlogin     return (void*)(error);
412813126eSlogin }
422813126eSlogin 
PTR_ERR(void * ptr)432813126eSlogin static inline long __must_check PTR_ERR(void * ptr)
442813126eSlogin {
452813126eSlogin     return (long)ptr;
462813126eSlogin }