Re: Bug#662083: libzip: FTBFS on hurd-i386
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
Reply to: