Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 155253 Details for
Bug 224483
sys-apps/coreutils-6.12 - touch uses unknown system call utimensat
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
coreutils-6.12-faeb3e6b2191565dc3197804cd9ff624f26a1004-revert.patch
coreutils-6.12-faeb3e6b2191565dc3197804cd9ff624f26a1004-revert.patch (text/plain), 5.98 KB, created by
Peter Alfredsen (RETIRED)
on 2008-06-02 16:46:54 UTC
(
hide
)
Description:
coreutils-6.12-faeb3e6b2191565dc3197804cd9ff624f26a1004-revert.patch
Filename:
MIME Type:
Creator:
Peter Alfredsen (RETIRED)
Created:
2008-06-02 16:46:54 UTC
Size:
5.98 KB
patch
obsolete
>diff -NrU5 coreutils-6.12.orig/lib/utimens.c coreutils-6.12/lib/utimens.c >--- coreutils-6.12.orig/lib/utimens.c 2008-06-02 18:43:33.000000000 +0200 >+++ coreutils-6.12/lib/utimens.c 2008-06-02 18:39:28.000000000 +0200 >@@ -24,11 +24,10 @@ > > #include "utimens.h" > > #include <errno.h> > #include <fcntl.h> >-#include <sys/stat.h> > #include <sys/time.h> > #include <unistd.h> > > #if HAVE_UTIME_H > # include <utime.h> >@@ -93,105 +92,93 @@ > sync (); > else > fsync (fd); > #endif > >- /* POSIX 200x added two interfaces to set file timestamps with >- nanosecond resolution. */ >-#if HAVE_UTIMENSAT >- if (fd < 0) >- return utimensat (AT_FDCWD, file, timespec, 0); >-#endif >-#if HAVE_FUTIMENS >- return futimens (fd, timespec); >-#else >- >- /* The platform lacks an interface to set file timestamps with >+ /* There's currently no interface to set file timestamps with > nanosecond resolution, so do the best we can, discarding any > fractional part of the timestamp. */ >- { >-# if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES >- struct timeval timeval[2]; >- struct timeval const *t; >- if (timespec) >- { >- timeval[0].tv_sec = timespec[0].tv_sec; >- timeval[0].tv_usec = timespec[0].tv_nsec / 1000; >- timeval[1].tv_sec = timespec[1].tv_sec; >- timeval[1].tv_usec = timespec[1].tv_nsec / 1000; >- t = timeval; >- } >- else >- t = NULL; >+#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES >+ struct timeval timeval[2]; >+ struct timeval const *t; >+ if (timespec) >+ { >+ timeval[0].tv_sec = timespec[0].tv_sec; >+ timeval[0].tv_usec = timespec[0].tv_nsec / 1000; >+ timeval[1].tv_sec = timespec[1].tv_sec; >+ timeval[1].tv_usec = timespec[1].tv_nsec / 1000; >+ t = timeval; >+ } >+ else >+ t = NULL; > >- if (fd < 0) >- { >-# if HAVE_FUTIMESAT >- return futimesat (AT_FDCWD, file, t); >-# endif >- } >- else >- { >- /* If futimesat or futimes fails here, don't try to speed things >- up by returning right away. glibc can incorrectly fail with >- errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 >- in high security mode doesn't allow ordinary users to read >- /proc/self, so glibc incorrectly fails with errno == EACCES. >- If errno == EIO, EPERM, or EROFS, it's probably safe to fail >- right away, but these cases are rare enough that they're not >- worth optimizing, and who knows what other messed-up systems >- are out there? So play it safe and fall back on the code >- below. */ >-# if HAVE_FUTIMESAT >- if (futimesat (fd, NULL, t) == 0) >- return 0; >-# elif HAVE_FUTIMES >- if (futimes (fd, t) == 0) >- return 0; >-# endif >- } >-# endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */ > >- if (!file) >- { >-# if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES)) >- errno = ENOSYS; >+ if (fd < 0) >+ { >+# if HAVE_FUTIMESAT >+ return futimesat (AT_FDCWD, file, t); > # endif >+ } >+ else >+ { >+ /* If futimesat or futimes fails here, don't try to speed things >+ up by returning right away. glibc can incorrectly fail with >+ errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 >+ in high security mode doesn't allow ordinary users to read >+ /proc/self, so glibc incorrectly fails with errno == EACCES. >+ If errno == EIO, EPERM, or EROFS, it's probably safe to fail >+ right away, but these cases are rare enough that they're not >+ worth optimizing, and who knows what other messed-up systems >+ are out there? So play it safe and fall back on the code >+ below. */ >+# if HAVE_FUTIMESAT >+ if (futimesat (fd, NULL, t) == 0) >+ return 0; >+# elif HAVE_FUTIMES >+ if (futimes (fd, t) == 0) >+ return 0; >+# endif >+ } >+#endif > >- /* Prefer EBADF to ENOSYS if both error numbers apply. */ >- if (errno == ENOSYS) >- { >- int fd2 = dup (fd); >- int dup_errno = errno; >- if (0 <= fd2) >- close (fd2); >- errno = (fd2 < 0 && dup_errno == EBADF ? EBADF : ENOSYS); >- } >- >- return -1; >- } >- >-# if HAVE_WORKING_UTIMES >- return utimes (file, t); >-# else >+ if (!file) > { >- struct utimbuf utimbuf; >- struct utimbuf const *ut; >- if (timespec) >+#if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES)) >+ errno = ENOSYS; >+#endif >+ >+ /* Prefer EBADF to ENOSYS if both error numbers apply. */ >+ if (errno == ENOSYS) > { >- utimbuf.actime = timespec[0].tv_sec; >- utimbuf.modtime = timespec[1].tv_sec; >- ut = &utimbuf; >+ int fd2 = dup (fd); >+ int dup_errno = errno; >+ if (0 <= fd2) >+ close (fd2); >+ errno = (fd2 < 0 && dup_errno == EBADF ? EBADF : ENOSYS); > } >- else >- ut = NULL; > >- return utime (file, ut); >+ return -1; > } >-# endif /* !HAVE_WORKING_UTIMES */ >+ >+#if HAVE_WORKING_UTIMES >+ return utimes (file, t); >+#else >+ { >+ struct utimbuf utimbuf; >+ struct utimbuf const *ut; >+ if (timespec) >+ { >+ utimbuf.actime = timespec[0].tv_sec; >+ utimbuf.modtime = timespec[1].tv_sec; >+ ut = &utimbuf; >+ } >+ else >+ ut = NULL; >+ >+ return utime (file, ut); > } >-#endif /* !HAVE_FUTIMENS */ >+#endif > } > > /* Set the access and modification time stamps of FILE to be > TIMESPEC[0] and TIMESPEC[1], respectively. */ > int >diff -NrU5 coreutils-6.12.orig/m4/utimens.m4 coreutils-6.12/m4/utimens.m4 >--- coreutils-6.12.orig/m4/utimens.m4 2008-06-02 18:43:33.000000000 +0200 >+++ coreutils-6.12/m4/utimens.m4 2008-06-02 18:39:28.000000000 +0200 >@@ -1,18 +1,15 @@ >-dnl Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software >-dnl Foundation, Inc. >+dnl Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. > dnl This file is free software; the Free Software Foundation > dnl gives unlimited permission to copy and/or distribute it, > dnl with or without modifications, as long as this notice is preserved. > >-dnl serial 2 >- > AC_DEFUN([gl_UTIMENS], > [ > AC_LIBOBJ([utimens]) > > dnl Prerequisites of lib/utimens.c. > AC_REQUIRE([gl_FUNC_UTIMES]) > AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) > AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF]) >- AC_CHECK_FUNCS_ONCE([futimes futimesat futimens utimensat]) >+ AC_CHECK_FUNCS_ONCE([futimes futimesat]) > ])
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 224483
:
155253
|
155373
|
155835
|
161662