summaryrefslogtreecommitdiff
path: root/m4/utimes.m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2003-08-10 13:28:38 +0000
committerJim Meyering <jim@meyering.net>2003-08-10 13:28:38 +0000
commit8bdd034bd407d264c92464eb0ada4d64e464598e (patch)
tree5ee6263a43eeeb5347b7536bfce80ee8e19e0cd2 /m4/utimes.m4
parentc68ad5dff039842f43028c345af472af869ea3b5 (diff)
downloadcoreutils-8bdd034bd407d264c92464eb0ada4d64e464598e.tar.xz
(gl_FUNC_UTIMES): New file.
Diffstat (limited to 'm4/utimes.m4')
-rw-r--r--m4/utimes.m446
1 files changed, 46 insertions, 0 deletions
diff --git a/m4/utimes.m4 b/m4/utimes.m4
new file mode 100644
index 000000000..ce1a7caf0
--- /dev/null
+++ b/m4/utimes.m4
@@ -0,0 +1,46 @@
+# See if we need to work around bugs in glibc's implementation of utimes
+# from around July/August 2003.
+# First, there was a bug that would make utimes set mtime and atime
+# to zero (1970-01-01) unconditionally.
+# Then, there is/was code to round rather than truncate.
+#
+# From Jim Meyering, with suggestions from Paul Eggert.
+
+AC_DEFUN([gl_FUNC_UTIMES],
+[
+ AC_CACHE_CHECK([determine whether the utimes function works],
+ gl_cv_func_working_utimes,
+ [
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <utime.h>
+
+int
+main ()
+{
+ static struct timeval timeval[2] = {{9, 10}, {999999, 999999}};
+ struct stat sbuf;
+ char const *file = "x";
+ FILE *f;
+
+ exit ( ! ((f = fopen (file, "w"))
+ && fclose (f) == 0
+ && utimes (file, timeval) == 0
+ && lstat (file, &sbuf) == 0
+ && sbuf.st_atime == timeval[0].tv_sec
+ && sbuf.st_mtime == timeval[1].tv_sec) );
+}
+ ]])],
+ [gl_cv_func_working_utimes=yes],
+ [gl_cv_func_working_utimes=no],
+ [gl_cv_func_working_utimes=no])])
+
+ if test $gl_cv_func_working_utimes = yes; then
+ AC_DEFINE([HAVE_WORKING_UTIMES], 1, [Define if utimes works properly. ])
+ fi
+])