add legacy futimes and lutimes functions
authorRich Felker <dalias@aerifal.cx>
Wed, 25 Jan 2012 00:50:44 +0000 (19:50 -0500)
committerRich Felker <dalias@aerifal.cx>
Wed, 25 Jan 2012 00:50:44 +0000 (19:50 -0500)
based on patch by sh4rm4. these functions are deprecated; futimens and
utimensat should be used instead in new programs.

include/sys/time.h
src/misc/futimes.c [new file with mode: 0644]
src/misc/lutimes.c [new file with mode: 0644]

index b39800f29f94d6b394bf6f27d0c629b80bc602e5..fa98944264752fc3230c463d5f473be21f0ffd73 100644 (file)
@@ -27,6 +27,8 @@ int utimes (const char *, const struct timeval [2]);
 #endif
 
 #ifdef _GNU_SOURCE
+int futimes(int, const struct timeval [2]);
+int lutimes(const char *, const struct timeval [2]);
 int settimeofday (const struct timeval *, void *);
 int adjtime (const struct timeval *, struct timeval *);
 struct timezone {
diff --git a/src/misc/futimes.c b/src/misc/futimes.c
new file mode 100644 (file)
index 0000000..f8fd1cd
--- /dev/null
@@ -0,0 +1,13 @@
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+
+int futimes(int fd, const struct timeval tv[2])
+{
+       struct timespec times[2];
+       times[0].tv_sec  = tv[0].tv_sec;
+       times[0].tv_nsec = tv[0].tv_usec * 1000;
+       times[1].tv_sec  = tv[1].tv_sec;
+       times[1].tv_nsec = tv[1].tv_usec * 1000;
+       return futimens(fd, times);
+}
diff --git a/src/misc/lutimes.c b/src/misc/lutimes.c
new file mode 100644 (file)
index 0000000..13dfe4e
--- /dev/null
@@ -0,0 +1,13 @@
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+
+int lutimes(const char *filename, const struct timeval tv[2])
+{
+       struct timespec times[2];
+       times[0].tv_sec  = tv[0].tv_sec;
+       times[0].tv_nsec = tv[0].tv_usec * 1000;
+       times[1].tv_sec  = tv[1].tv_sec;
+       times[1].tv_nsec = tv[1].tv_usec * 1000;
+       return utimensat(AT_FDCWD, filename, times, AT_SYMLINK_NOFOLLOW);
+}