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)152813126eSloginstatic 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)272813126eSloginstatic 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)382813126eSloginstatic inline void* __must_check ERR_PTR(long error) 392813126eSlogin { 402813126eSlogin return (void*)(error); 412813126eSlogin } 422813126eSlogin PTR_ERR(void * ptr)432813126eSloginstatic inline long __must_check PTR_ERR(void * ptr) 442813126eSlogin { 452813126eSlogin return (long)ptr; 462813126eSlogin }