[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:56:25 UTC 2018


On Mon, Jan 22, 2018 at 06:19:33PM +0100, Pino Toscano wrote:
> > On Monday, 22 January 2018 18:02:08 CET Richard W.M. Jones wrote:
> > ---
> >  generator/lua.ml  | 22 +++++++++++++++-------
> >  generator/perl.ml |  2 +-
> >  lua/Makefile.am   |  1 +
> >  3 files changed, 17 insertions(+), 8 deletions(-)
> 
> Ah, you just beat me to it... OTOH you missed the ruby binding, see
> ruby/ext/guestfs/handle.c.

This one is too hard for me to fix.  I need to include the gnulib
directory (to get the replacement strerror_r) otherwise I see:

handle.c: In function 'guestfs_int_ruby_event_to_string':
handle.c:285:5: error: ignoring return value of 'strerror_r', declared with attribute warn_unused_result [-Werror=unused-result]
     strerror_r (errno, err, sizeof err);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

but I couldn't work out how to add that without breaking Ruby's
conftests.

In any case Ruby is irretrievably broken with pthread, see recent
nbdkit commits ...

> > 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\"
> 
> In my local version, ignore_value() was not needed in the lua bindings
> Did you get a build failure without it?

In fact no I don't need it.

BUT I do need to add the gnulib directory so we get the replacement
strerror_r, because the original strerror_r from glibc is declared
with warn_unused_result:

lua-guestfs.c: In function 'guestfs_int_lua_create':
lua-guestfs.c:178:5: error: ignoring return value of 'strerror_r', declared with attribute warn_unused_result [-Werror=unused-result]
     strerror_r (errno, err, sizeof err);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Anyway, I dropped ignore_value but still added gnulib/lib to the
include path.

> >  #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];
> 
> In other places were strerror_r is used, the size of the buffer is 256.
> Can you please adapt it? (Mostly so we have the same code everywhere.)

I pushed this with the changes above, plus err[256].

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW




More information about the Libguestfs mailing list