[Libguestfs] [PATCH] lua, perl: Use thread-safe strerror_r instead of strerror (RHBZ#1536763).

Richard W.M. Jones rjones at redhat.com
Mon Jan 22 17:02:08 UTC 2018


---
 generator/lua.ml  | 22 +++++++++++++++-------
 generator/perl.ml |  2 +-
 lua/Makefile.am   |  1 +
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/generator/lua.ml b/generator/lua.ml
index dd6aedbe9..7cfceb152 100644
--- a/generator/lua.ml
+++ b/generator/lua.ml
@@ -63,6 +63,8 @@ let generate_lua_c () =
 #endif
 #endif
 
+#include \"ignore-value.h\"
+
 #include <guestfs.h>
 #include \"guestfs-utils.h\"
 
@@ -142,6 +144,7 @@ guestfs_int_lua_create (lua_State *L)
   guestfs_h *g;
   struct userdata *u;
   unsigned flags = 0;
+  char err[128];
 
   if (lua_gettop (L) == 1) {
     OPTARG_IF_SET (1, \"environment\",
@@ -157,9 +160,10 @@ guestfs_int_lua_create (lua_State *L)
     return luaL_error (L, \"Guestfs.create: too many arguments\");
 
   g = guestfs_create_flags (flags);
-  if (!g)
-    return luaL_error (L, \"Guestfs.create: cannot create handle: %%s\",
-                       strerror (errno));
+  if (!g) {
+    ignore_value (strerror_r (errno, err, sizeof err));
+    return luaL_error (L, \"Guestfs.create: cannot create handle: %%s\", err);
+  }
 
   guestfs_set_error_handler (g, NULL, NULL);
 
@@ -226,6 +230,7 @@ error__tostring (lua_State *L)
 {
   int code;
   const char *msg;
+  char err[128];
 
   lua_pushliteral (L, \"code\");
   lua_gettable (L, 1);
@@ -234,8 +239,10 @@ error__tostring (lua_State *L)
   lua_gettable (L, 1);
   msg = luaL_checkstring (L, -1);
 
-  if (code)
-    lua_pushfstring (L, \"%%s: %%s\", msg, strerror (code));
+  if (code) {
+    ignore_value (strerror_r (code, err, sizeof err));
+    lua_pushfstring (L, \"%%s: %%s\", msg, err);
+  }
   else
     lua_pushstring (L, msg);
 
@@ -640,11 +647,12 @@ get_string_list (lua_State *L, int index)
   const size_t len = lua_objlen (L, index);
   size_t i;
   char **strs;
+  char err[128];
 
   strs = malloc ((len+1) * sizeof (char *));
   if (strs == NULL) {
-    luaL_error (L, \"get_string_list: malloc failed: %%s\",
-                strerror (errno));
+    ignore_value (strerror_r (errno, err, sizeof err));
+    luaL_error (L, \"get_string_list: malloc failed: %%s\", err);
     /*NOTREACHED*/
     return NULL;
   }
diff --git a/generator/perl.ml b/generator/perl.ml
index bd7e328cd..240bf3b54 100644
--- a/generator/perl.ml
+++ b/generator/perl.ml
@@ -308,7 +308,7 @@ PREINIT:
    CODE:
       str = guestfs_event_to_string (event_bitmask);
       if (str == NULL)
-        croak (\"%%s\", strerror (errno));
+        croak (\"%%m\");
       RETVAL = newSVpv (str, 0);
       free (str);
  OUTPUT:
diff --git a/lua/Makefile.am b/lua/Makefile.am
index f90c1d7cb..a26c0baee 100644
--- a/lua/Makefile.am
+++ b/lua/Makefile.am
@@ -41,6 +41,7 @@ libluaguestfs_la_SOURCES = lua-guestfs.c
 
 libluaguestfs_la_CPPFLAGS = \
 	-DGUESTFS_PRIVATE=1 \
+	-I$(srcdir)/../gnulib/lib -I../gnulib/lib \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib
 
-- 
2.13.2




More information about the Libguestfs mailing list