diff --git a/kernel/common/compiler.h b/kernel/common/compiler.h index 9265fa14..60da65d8 100644 --- a/kernel/common/compiler.h +++ b/kernel/common/compiler.h @@ -9,4 +9,9 @@ // 内存屏障 #define barrier() __asm__ __volatile__("" :: \ : "memory"); -#endif \ No newline at end of file +#endif + +// 编译器属性 + +// 当函数的返回值未被使用时,编译器抛出警告信息 +#define __must_check __attribute__((__warn_unused_result__)) \ No newline at end of file diff --git a/kernel/common/err.h b/kernel/common/err.h new file mode 100644 index 00000000..cd3c33c3 --- /dev/null +++ b/kernel/common/err.h @@ -0,0 +1,30 @@ +#pragma once +#include +#include +#define MAX_ERRNO 4095 + +#define IS_ERR_VALUE(x) unlikely((x) >= (uint64_t)-MAX_ERRNO) + +/** + * @brief 判断返回的指针是否为errno + * + * @param ptr 待校验的指针 + * @return long 1 => 是错误码 + * 0 => 不是错误码 + */ +static inline long __must_check IS_ERR(const void* ptr) +{ + return IS_ERR_VALUE((uint64_t)ptr); +} + +/** + * @brief 判断返回的指针是否为errno或者为空 + * + * @param ptr 待校验的指针 + * @return long 1 => 是错误码或NULL + * 0 => 不是错误码或NULL + */ +static inline long __must_check IS_ERR_OR_NULL(const void* ptr) +{ + return !ptr || IS_ERR_VALUE((uint64_t)ptr); +}