Update comment about utimes bugs.
[gnulib.git] / m4 / utimes.m4
1 # See if we need to work around bugs in glibc's implementation of
2 # utimes from 2003-07-12 to 2003-09-17.
3 # First, there was a bug that would make utimes set mtime
4 # and atime to zero (1970-01-01) unconditionally.
5 # Then, there was code to round rather than truncate.
6 #
7 # From Jim Meyering, with suggestions from Paul Eggert.
8
9 AC_DEFUN([gl_FUNC_UTIMES],
10 [
11   AC_CACHE_CHECK([determine whether the utimes function works],
12                  gl_cv_func_working_utimes,
13   [
14   AC_RUN_IFELSE([AC_LANG_SOURCE([[
15 #include <sys/types.h>
16 #include <sys/stat.h>
17 #include <sys/time.h>
18 #include <unistd.h>
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <utime.h>
22
23 int
24 main ()
25 {
26   static struct timeval timeval[2] = {{9, 10}, {999999, 999999}};
27   struct stat sbuf;
28   char const *file = "conftest.utimes";
29   FILE *f;
30
31   exit ( ! ((f = fopen (file, "w"))
32             && fclose (f) == 0
33             && utimes (file, timeval) == 0
34             && lstat (file, &sbuf) == 0
35             && sbuf.st_atime == timeval[0].tv_sec
36             && sbuf.st_mtime == timeval[1].tv_sec) );
37 }
38   ]])],
39        [gl_cv_func_working_utimes=yes],
40        [gl_cv_func_working_utimes=no],
41        [gl_cv_func_working_utimes=no])])
42
43   if test $gl_cv_func_working_utimes = yes; then
44     AC_DEFINE([HAVE_WORKING_UTIMES], 1, [Define if utimes works properly. ])
45   fi
46 ])