gettimeofday: port recent C++ fix to Emacs
[gnulib.git] / lib / fdutimensat.c
index 7c08a52..63c79e9 100644 (file)
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
 /* Set file access and modification times.
 
-   Copyright (C) 2009-2010 Free Software Foundation, Inc.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
    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.
    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.
+   ATFLAG is passed to utimensat if FD is negative or futimens was
+   unsupported, which can allow operation on FILE as a symlink.
    Return 0 on success, -1 (setting errno) on failure.  */
 
 int
    Return 0 on success, -1 (setting errno) on failure.  */
 
 int
-fdutimensat (int dir, char const *file, int fd, struct timespec const ts[2])
+fdutimensat (int fd, int dir, char const *file, struct timespec const ts[2],
+             int atflag)
 {
   int result = 1;
   if (0 <= fd)
     result = futimens (fd, ts);
   if (file && (fd < 0 || (result == -1 && errno == ENOSYS)))
 {
   int result = 1;
   if (0 <= fd)
     result = futimens (fd, ts);
   if (file && (fd < 0 || (result == -1 && errno == ENOSYS)))
-    result = utimensat (dir, file, ts, 0);
+    result = utimensat (dir, file, ts, atflag);
   if (result == 1)
     {
       errno = EBADF;
   if (result == 1)
     {
       errno = EBADF;