From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/13994 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: futimens on musl libc (fwd) Date: Sun, 24 Mar 2019 10:21:18 -0400 Message-ID: <20190324142118.GS23599@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="217534"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-14010-gllmg-musl=m.gmane.org@lists.openwall.com Sun Mar 24 15:21:34 2019 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.89) (envelope-from ) id 1h840D-000uWN-Tk for gllmg-musl@m.gmane.org; Sun, 24 Mar 2019 15:21:33 +0100 Original-Received: (qmail 5948 invoked by uid 550); 24 Mar 2019 14:21:31 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 5883 invoked from network); 24 Mar 2019 14:21:31 -0000 Content-Disposition: inline Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:13994 Archived-At: 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 ----- From: Bruno Haible To: bug-gnulib@gnu.org, Rich Felker Subject: futimens on musl libc Date: Sat, 23 Mar 2019 21:40:33 +0100 Message-ID: <4061903.SY8uJAIc8I@omega> 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 #include #include #include #include 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 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 -----