[vlc-devel] [PATCH 1/2] Use standard error codes

RĂ©mi Denis-Courmont remi at remlab.net
Sun May 19 19:46:49 CEST 2019


While this is not complete nor free of ambiguities, this enables a lot
more expressive error values than the current tiny set. And even then,
mostly only VLC_EGENERIC and VLC_ENOMEM are ever used.

This also allows passing errors from the CRT or OS.

This assumes that 666 is not an error code that VLC will use though.
---
 include/vlc_common.h    | 23 ++++++++++++++---------
 modules/lua/libs/misc.c | 23 ++---------------------
 2 files changed, 16 insertions(+), 30 deletions(-)

diff --git a/include/vlc_common.h b/include/vlc_common.h
index 0bbb98fd62..c6e6b7ae6a 100644
--- a/include/vlc_common.h
+++ b/include/vlc_common.h
@@ -42,6 +42,11 @@
 /*****************************************************************************
  * Required system headers
  *****************************************************************************/
+#ifndef __cplusplus
+# include <errno.h>
+#else
+# include <cerrno>
+#endif
 #include <stdlib.h>
 #include <stdarg.h>
 
@@ -468,23 +473,23 @@ typedef union
  * Error values (shouldn't be exposed)
  *****************************************************************************/
 /** No error */
-#define VLC_SUCCESS        (-0)
+#define VLC_SUCCESS        0
 /** Unspecified error */
-#define VLC_EGENERIC       (-1)
+#define VLC_EGENERIC       (-666)
 /** Not enough memory */
-#define VLC_ENOMEM         (-2)
+#define VLC_ENOMEM         (-ENOMEM)
 /** Timeout */
-#define VLC_ETIMEOUT       (-3)
+#define VLC_ETIMEOUT       (-ETIMEDOUT)
 /** Module not found */
-#define VLC_ENOMOD         (-4)
+#define VLC_ENOMOD         (-ENOTSUP)
 /** Object not found */
-#define VLC_ENOOBJ         (-5)
+#define VLC_ENOOBJ         (-EFAULT)
 /** Variable not found */
-#define VLC_ENOVAR         (-6)
+#define VLC_ENOVAR         (-EFAULT)
 /** Bad variable value */
-#define VLC_EBADVAR        (-7)
+#define VLC_EBADVAR        (-EINVAL)
 /** Item not found */
-#define VLC_ENOITEM        (-8)
+#define VLC_ENOITEM        (-ENOENT)
 
 /*****************************************************************************
  * Variable callbacks: called when the value is modified
diff --git a/modules/lua/libs/misc.c b/modules/lua/libs/misc.c
index 25f44c3047..c7d47c020b 100644
--- a/modules/lua/libs/misc.c
+++ b/modules/lua/libs/misc.c
@@ -85,27 +85,8 @@ vlc_object_t * vlclua_get_this( lua_State *L )
 int vlclua_push_ret( lua_State *L, int i_error )
 {
     lua_pushnumber( L, i_error );
-
-    int err;
-
-    switch( i_error )
-    {
-        case VLC_SUCCESS:   err = 0;         break;
-        case VLC_ENOMEM:    err = ENOMEM;    break;
-        case VLC_ETIMEOUT:  err = ETIMEDOUT; break;
-        case VLC_EBADVAR:   err = EINVAL;    break;
-        case VLC_ENOMOD:    err = ENOENT;    break;
-        case VLC_ENOOBJ:    err = ENOENT;    break;
-        case VLC_ENOVAR:    err = ENOENT;    break;
-        case VLC_EGENERIC:
-            lua_pushstring( L, "generic error" );
-            return 2;
-        default:
-            lua_pushstring( L, "unknown error" );
-            return 2;
-    }
-
-    lua_pushstring( L, vlc_strerror_c(err) );
+    lua_pushstring( L, (i_error == VLC_EGENERIC ? "generic error"
+                                                : vlc_strerror_c(-i_error)) );
     return 2;
 }
 
-- 
2.20.1



More information about the vlc-devel mailing list