.
[coreutils.git] / m4 / utimes.m4
blobdae46f00eb5c072de2cfa151ee2a7dd693267d8c
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.
7 # From Jim Meyering, with suggestions from Paul Eggert.
9 AC_DEFUN([gl_FUNC_UTIMES],
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>
23 int
24 main ()
26   static struct timeval timeval[2] = {{9, 10}, {999999, 999999}};
27   struct stat sbuf;
28   char const *file = "conftest.utimes";
29   FILE *f;
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) );
38   ]])],
39        [gl_cv_func_working_utimes=yes],
40        [gl_cv_func_working_utimes=no],
41        [gl_cv_func_working_utimes=no])])
43   if test $gl_cv_func_working_utimes = yes; then
44     AC_DEFINE([HAVE_WORKING_UTIMES], 1, [Define if utimes works properly. ])
45   fi