On Fri, 2014-10-24 at 10:21 +0200, Guillem Jover wrote: > Hi! > > On Fri, 2014-10-24 at 09:43:22 +0200, Svante Signell wrote: > > Currently libzip FTBFS on GNU/Hurd due to one failing test: > > open_nosuchfile.test. This test checks for a non-existing file and the > > error codes for ENOENT: No such file or directory. On GNU/Linux and > > GNU/kFreeBSD this number is 2 in errno.h but for GNU/Hurd it is > > 1073741826, resulting in a false negative. > > > > The attached patch solves this problem by printing the string "No such > > file or directory" in regress/tryopen.c and test for that string in > > regress/open_nosuchfile.test instead of printing and testing the error > > number. > > I don't think this fix is right, for several reasons. The string is > just a description and could vary over time or depending on the system > or libc used. It also can return a localized string if the locale has > not been forced to C (which I don't know if it's the case here). > > A more fail-proof fix might be something like the following untested > modifications (keeping the strerror() so that if the test fails it's > easier to know what went wrong): >
> > - printf("/%d", errno); > > + printf("/%s", strerror(errno)); > > printf("/%s", errno == ENOENT ? "ENOENT" : strerror(errno)); > > > Index: libzip-0.11.2/regress/open_nosuchfile.test > > =================================================================== > > --- libzip-0.11.2.orig/regress/open_nosuchfile.test > > +++ libzip-0.11.2/regress/open_nosuchfile.test > > -stdout opening 'nosuchfile' returned error 11/2 > > +stdout opening 'nosuchfile' returned error 11/No such file or directory > > stdout opening 'nosuchfile' returned error 11/ENOENT Thanks Guillem, that's the solution I was looking for, bud did not yet find myself, thanks :) Updated patch attached.
Index: libzip-0.11.2/regress/tryopen.c =================================================================== --- libzip-0.11.2.orig/regress/tryopen.c +++ libzip-0.11.2/regress/tryopen.c @@ -35,6 +35,7 @@ #include "config.h" #include <errno.h> +#include <string.h> #include <stdio.h> #include <stdlib.h> #ifdef HAVE_UNISTD_H @@ -102,7 +103,7 @@ main(int argc, char *argv[]) printf("opening '%s' returned error %d", fname, ze); if (zip_error_get_sys_type(ze) == ZIP_ET_SYS) - printf("/%d", errno); + printf("/%s", errno == ENOENT ? "ENOENT" : strerror(errno)); printf("\n"); error++; } Index: libzip-0.11.2/regress/open_nosuchfile.test =================================================================== --- libzip-0.11.2.orig/regress/open_nosuchfile.test +++ libzip-0.11.2/regress/open_nosuchfile.test @@ -2,5 +2,5 @@ program tryopen args nosuchfile return 1 -stdout opening 'nosuchfile' returned error 11/2 +stdout opening 'nosuchfile' returned error 11/ENOENT stderr 1 errors