[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
utimens merge from coreutils to support "touch -"
From: |
Paul Eggert |
Subject: |
utimens merge from coreutils to support "touch -" |
Date: |
Sat, 24 Sep 2005 23:24:27 -0700 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
I installed this to merge from coreutils the support for "touch -":
2005-09-24 Paul Eggert <address@hidden>
* utimens.c (ENOSYS): Define if not already defined.
(futimens): Support having a null PATH if the file descriptor
is nonnegative.
Index: utimens.c
===================================================================
RCS file: /cvsroot/gnulib/gnulib/lib/utimens.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -p -u -r1.5 -r1.6
--- utimens.c 23 Sep 2005 19:18:06 -0000 1.5
+++ utimens.c 25 Sep 2005 06:22:35 -0000 1.6
@@ -41,6 +41,16 @@ struct utimbuf
};
#endif
+/* Some systems don't have ENOSYS. */
+#ifndef ENOSYS
+# ifdef ENOTSUP
+# define ENOSYS ENOTSUP
+# else
+/* Some systems don't have ENOTSUP either. */
+# define ENOSYS EINVAL
+# endif
+#endif
+
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
# define __attribute__(x)
#endif
@@ -53,7 +63,11 @@ struct utimbuf
TIMESPEC[0] and TIMESPEC[1], respectively.
FD must be either negative -- in which case it is ignored --
or a file descriptor that is open on FILE.
- If TIMESPEC is null, set the time stamps to the current time. */
+ If FD is nonnegative, then FILE can be NULL, which means
+ use just futimes (or equivalent) instead of utimes (or equivalent),
+ and fail if on an old system without futimes (or equivalent).
+ If TIMESPEC is null, set the time stamps to the current time.
+ Return 0 on success, -1 (setting errno) on failure. */
int
futimens (int fd ATTRIBUTE_UNUSED,
@@ -78,8 +92,7 @@ futimens (int fd ATTRIBUTE_UNUSED,
# if HAVE_FUTIMESAT
return fd < 0 ? futimesat (AT_FDCWD, file, t) : futimesat (fd, NULL, t);
-# else
-# if HAVE_FUTIMES
+# elif HAVE_FUTIMES
if (0 <= fd)
{
if (futimes (fd, t) == 0)
@@ -97,23 +110,35 @@ futimens (int fd ATTRIBUTE_UNUSED,
return -1;
}
}
-# endif
- return utimes (file, t);
# endif
+#endif
-#else
+#if ! HAVE_FUTIMES_AT
- struct utimbuf utimbuf;
- struct utimbuf const *t;
- if (timespec)
+ if (!file)
{
- utimbuf.actime = timespec[0].tv_sec;
- utimbuf.modtime = timespec[1].tv_sec;
- t = &utimbuf;
+ errno = ENOSYS;
+ return -1;
}
- else
- t = NULL;
- return utime (file, t);
+
+# 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
#endif
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- utimens merge from coreutils to support "touch -",
Paul Eggert <=