浏览代码

新增错误判断的宏,以及返回值使用检测

fslongjin 2 年之前
父节点
当前提交
edef02286e
共有 2 个文件被更改,包括 36 次插入1 次删除
  1. 6 1
      kernel/common/compiler.h
  2. 30 0
      kernel/common/err.h

+ 6 - 1
kernel/common/compiler.h

@@ -9,4 +9,9 @@
 // 内存屏障
 #define barrier() __asm__ __volatile__("" :: \
                                            : "memory");
-#endif
+#endif
+
+// 编译器属性
+
+// 当函数的返回值未被使用时,编译器抛出警告信息
+#define __must_check __attribute__((__warn_unused_result__))

+ 30 - 0
kernel/common/err.h

@@ -0,0 +1,30 @@
+#pragma once
+#include <common/compiler.h>
+#include <stdint.h>
+#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);
+}