瀏覽代碼

[kservice]Improve rt_strerror function compatibility

guozhanxin 1 年之前
父節點
當前提交
35e4baa786
共有 1 個文件被更改,包括 28 次插入16 次删除
  1. 28 16
      src/kservice.c

+ 28 - 16
src/kservice.c

@@ -96,20 +96,28 @@ rt_weak const char *rt_hw_cpu_arch(void)
     return "unknown";
 }
 
-static const char* rt_errno_strs[] =
+struct _errno_str_t
 {
-    "OK",
-    "ERROR",
-    "ETIMOUT",
-    "ERSFULL",
-    "ERSEPTY",
-    "ENOMEM",
-    "ENOSYS",
-    "EBUSY",
-    "EIO",
-    "EINTRPT",
-    "EINVAL",
-    "EUNKNOW"
+    rt_err_t error;
+    const char *str;
+};
+
+static struct _errno_str_t  rt_errno_strs[] =
+{
+    {RT_EOK     , "OK     "},
+    {RT_ERROR   , "ERROR  "},
+    {RT_ETIMEOUT, "ETIMOUT"},
+    {RT_EFULL   , "ERSFULL"},
+    {RT_EEMPTY  , "ERSEPTY"},
+    {RT_ENOMEM  , "ENOMEM "},
+    {RT_ENOSYS  , "ENOSYS "},
+    {RT_EBUSY   , "EBUSY  "},
+    {RT_EIO     , "EIO    "},
+    {RT_EINTR   , "EINTRPT"},
+    {RT_EINVAL  , "EINVAL "},
+    {RT_ENOENT  , "ENOENT "},
+    {RT_ENOSPC  , "ENOSPC "},
+    {RT_EPERM   , "EPERM  "},
 };
 
 /**
@@ -124,9 +132,13 @@ const char *rt_strerror(rt_err_t error)
     if (error < 0)
         error = -error;
 
-    return (error > RT_EINVAL + 1) ?
-           rt_errno_strs[RT_EINVAL + 1] :
-           rt_errno_strs[error];
+    for (int i = 0; i < sizeof(rt_errno_strs) / sizeof(rt_errno_strs[0]); i++)
+    {
+        if (rt_errno_strs[i].error == error)
+            return rt_errno_strs[i].str;
+    }
+
+    return "EUNKNOW";
 }
 RTM_EXPORT(rt_strerror);