bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Build failures of coreutils-8.1 in Fedora build system "koji"


From: Eric Blake
Subject: Re: Build failures of coreutils-8.1 in Fedora build system "koji"
Date: Tue, 24 Nov 2009 17:24:39 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Eric Blake <ebb9 <at> byu.net> writes:

> Also, does utimensat(AT_FDCWD,"file",NULL,0) work, and it is just the
> AT_SYMLINK_NOFOLLOW variant that fails with ENOSYS?  If so, I see at least
> one problem in lib/utimens.c - it shares a static variable between
> lutimens and fdutimens, which means that if lutimens detects
> AT_SYMLINK_NOFOLLOW failure, then fdutimens fails to even try utimensat in
> the future.

This gnulib patch is necessary if you answer affirmatively to the above 
question; If I'm correct, it will fix the touch/trailing-slash and gnulib side 
of things, but we would still need a patch to coreutils testsuite to ignore 
ENOSYS failure in touch/no-dereference.


>From 60e9adacc94170106b45352ee230d9db179287c1 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Tue, 24 Nov 2009 10:00:18 -0700
Subject: [PATCH 1/2] utimes: fix configure grammar

'Checking determine whether...' doesn't read well.

* m4/utimes.m4 (gl_FUNC_UTIMES): Delete spurious word.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog    |    5 +++++
 m4/utimes.m4 |    5 +++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f9c4e1e..b76e351 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-24  Eric Blake  <address@hidden>
+
+       utimes: fix configure grammar
+       * m4/utimes.m4 (gl_FUNC_UTIMES): Delete spurious word.
+
 2009-11-24  Bruno Haible  <address@hidden>

        duplocale: Fix logic bug.
diff --git a/m4/utimes.m4 b/m4/utimes.m4
index 5b010ac..239a0db 100644
--- a/m4/utimes.m4
+++ b/m4/utimes.m4
@@ -1,4 +1,5 @@
 # Detect some bugs in glibc's implementation of utimes.
+# serial 2

 dnl Copyright (C) 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
@@ -19,8 +20,8 @@ dnl with or without modifications, as long as this notice is 
preserved.

 AC_DEFUN([gl_FUNC_UTIMES],
 [
-  AC_CACHE_CHECK([determine whether the utimes function works],
-                gl_cv_func_working_utimes,
+  AC_CACHE_CHECK([whether the utimes function works],
+                [gl_cv_func_working_utimes],
   [
   AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
-- 
1.6.4.2


>From 007579b937c4c9422919c7f68761dd9aa75699a5 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Tue, 24 Nov 2009 10:07:57 -0700
Subject: [PATCH 2/2] utimens: work around older Linux failure with symlinks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* lib/utimens.c (lutimensat_works_really): New variable.
(fdutimens, lutimens): Use it to manage kernels that support
nanosecond times on files, but not on symlinks.
Reported by Ondřej Vašík.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog     |    6 ++++++
 lib/utimens.c |   14 +++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b76e351..1fd4506 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-11-24  Eric Blake  <address@hidden>

+       utimens: work around older Linux failure with symlinks
+       * lib/utimens.c (lutimensat_works_really): New variable.
+       (fdutimens, lutimens): Use it to manage kernels that support
+       nanosecond times on files, but not on symlinks.
+       Reported by Ondřej Vašík.
+
        utimes: fix configure grammar
        * m4/utimes.m4 (gl_FUNC_UTIMES): Delete spurious word.

diff --git a/lib/utimens.c b/lib/utimens.c
index eb63487..61221fd 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -54,10 +54,12 @@ struct utimbuf
 #undef utimensat

 #if HAVE_UTIMENSAT || HAVE_FUTIMENS
-/* Cache variable for whether syscall works; used to avoid calling the
-   syscall if we know it will just fail with ENOSYS.  0 = unknown, 1 =
-   yes, -1 = no.  */
+/* Cache variables for whether the utimensat syscall works; used to
+   avoid calling the syscall if we know it will just fail with ENOSYS.
+   There are some Linux kernel versions where a flag of 0 passes, but
+   not AT_SYMLINK_NOFOLLOW.  0 = unknown, 1 = yes, -1 = no.  */
 static int utimensat_works_really;
+static int lutimensat_works_really;
 #endif /* HAVE_UTIMENSAT || HAVE_UTIMENSAT */

 /* Solaris 9 mistakenly succeeds when given a non-directory with a
@@ -242,6 +244,7 @@ fdutimens (char const *file, int fd, struct timespec const 
timespec[2])
 # endif /* HAVE_FUTIMENS */
     }
   utimensat_works_really = -1;
+  lutimensat_works_really = -1;
 #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */

   /* The platform lacks an interface to set file timestamps with
@@ -381,7 +384,7 @@ lutimens (char const *file, struct timespec const timespec
[2])
      worry about bogus return values.  */

 #if HAVE_UTIMENSAT
-  if (0 <= utimensat_works_really)
+  if (0 <= lutimensat_works_really)
     {
       int result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW);
 # ifdef __linux__
@@ -398,10 +401,11 @@ lutimens (char const *file, struct timespec const timespec
[2])
       if (result == 0 || errno != ENOSYS)
         {
           utimensat_works_really = 1;
+          lutimensat_works_really = 1;
           return result;
         }
     }
-  utimensat_works_really = -1;
+  lutimensat_works_really = -1;
 #endif /* HAVE_UTIMENSAT */

   /* The platform lacks an interface to set file timestamps with
-- 
1.6.4.2








reply via email to

[Prev in Thread] Current Thread [Next in Thread]