Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190324142118.GS23599@brightrain.aerifal.cx>
Date: Sun, 24 Mar 2019 10:21:18 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: futimens on musl libc (fwd)

I think this needs action but I'm not clear what the exact mechanism
is yet, so I'm forwarding to the list.

----- Forwarded message from Bruno Haible <bruno@...sp.org> -----

From: Bruno Haible <bruno@...sp.org>
To: bug-gnulib@....org, Rich Felker <dalias@...c.org>
Subject: futimens on musl libc
Date: Sat, 23 Mar 2019 21:40:33 +0100
Message-ID: <4061903.SY8uJAIc8I@...ga>

The gnulib configure test in m4/futimens.m4, when run on Alpine Linux 3.7,
determines that the errno value is not as expected for a wrong fd.

Let me document this in gnulib and update the cross-compilation guess
accordingly.

Rich, FYI: The test program is this one:

#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
int main ()
{
      struct timespec ts[2];
      int fd = creat ("conftest.file", 0600);
      struct stat st;
      if (fd < 0) return 1;
      ts[0].tv_sec = 1;
      ts[0].tv_nsec = UTIME_OMIT;
      ts[1].tv_sec = 1;
      ts[1].tv_nsec = UTIME_NOW;
      errno = 0;
      if (futimens (AT_FDCWD, NULL) == 0) return 2;
      if (errno != EBADF) return 3;     /* <== It fails here */
      if (futimens (fd, ts)) return 4;
      sleep (1);
      ts[0].tv_nsec = UTIME_NOW;
      ts[1].tv_nsec = UTIME_OMIT;
      if (futimens (fd, ts)) return 5;
      if (fstat (fd, &st)) return 6;
      if (st.st_ctime < st.st_atime) return 7;
      return 0;
}


2019-03-23  Bruno Haible  <bruno@...sp.org>

	futimens: Document musl libc bug.
	* doc/posix-functions/futimens.texi: Mention the bug.
	* m4/futimens.m4 (gl_FUNC_FUTIMENS): Require AC_CANONICAL_HOST. When
	cross-compiling guess no on glibc and musl systems.

diff --git a/doc/posix-functions/futimens.texi b/doc/posix-functions/futimens.texi
index 19fb84e..1e1c76c 100644
--- a/doc/posix-functions/futimens.texi
+++ b/doc/posix-functions/futimens.texi
@@ -29,7 +29,7 @@ Linux kernel 2.6.32, Solaris 11.1.
 @item
 Passing @code{AT_FDCWD} as the fd argument does not properly fail with
 @code{EBADF} on some systems:
-glibc 2.11, Solaris 11.
+glibc 2.11, musl libc, Solaris 11.
 @end itemize
 
 Portability problems not fixed by Gnulib:
diff --git a/m4/futimens.m4 b/m4/futimens.m4
index 3cfa4a1..b5f4be9 100644
--- a/m4/futimens.m4
+++ b/m4/futimens.m4
@@ -1,4 +1,4 @@
-# serial 7
+# serial 8
 # See if we need to provide futimens replacement.
 
 dnl Copyright (C) 2009-2019 Free Software Foundation, Inc.
@@ -11,6 +11,7 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC_FUTIMENS],
 [
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_CHECK_FUNCS_ONCE([futimens])
   if test $ac_cv_func_futimens = no; then
@@ -44,10 +45,21 @@ AC_DEFUN([gl_FUNC_FUTIMENS],
       ]])],
          [gl_cv_func_futimens_works=yes],
          [gl_cv_func_futimens_works=no],
-         [gl_cv_func_futimens_works="guessing yes"])
+         [case "$host_os" in
+                           # Guess no on glibc systems.
+            *-gnu* | gnu*) gl_cv_func_futimens_works="guessing no" ;;
+                           # Guess no on musl systems.
+            *-musl*)       gl_cv_func_futimens_works="guessing no" ;;
+                           # Guess yes otherwise.
+            *)             gl_cv_func_futimens_works="guessing yes" ;;
+          esac
+         ])
       rm -f conftest.file])
-    if test "$gl_cv_func_futimens_works" = no; then
-      REPLACE_FUTIMENS=1
-    fi
+    case "$gl_cv_func_futimens_works" in
+      *yes) ;;
+      *)
+        REPLACE_FUTIMENS=1
+        ;;
+    esac
   fi
 ])

----- End forwarded message -----

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.