Browse Source

Use utimes instead of utime if utimes is available.

Tatsuhiro Tsujikawa 14 years ago
parent
commit
af46293ef9
2 changed files with 13 additions and 2 deletions
  1. 2 1
      configure.ac
  2. 11 1
      src/File.cc

+ 2 - 1
configure.ac

@@ -400,7 +400,8 @@ AC_CHECK_FUNCS([__argz_count \
                 tzset \
                 unsetenv \
                 usleep \
-		utime])
+		utime \
+		utimes])
 
 if test "x$enable_epoll" = "xyes"; then
   AC_CHECK_FUNCS([epoll_create], [have_epoll=yes])

+ 11 - 1
src/File.cc

@@ -36,7 +36,9 @@
 
 #include <stdlib.h>
 #include <sys/types.h>
-#include <utime.h>
+#ifdef HAVE_UTIME_H
+# include <utime.h>
+#endif // HAVE_UTIME_H
 #include <unistd.h>
 
 #include <vector>
@@ -218,10 +220,18 @@ bool File::renameTo(const std::string& dest)
 
 bool File::utime(const Time& actime, const Time& modtime) const
 {
+#if defined HAVE_UTIMES && !(defined __MINGW32__)
+  struct timeval times[2] = {
+    { actime.getTime(), 0 },
+    { modtime.getTime(), 0 }
+  };
+  return utimes(name_.c_str(), times) == 0;
+#else // !HAVE_UTIMES
   a2utimbuf ub;
   ub.actime = actime.getTime();
   ub.modtime = modtime.getTime();
   return a2utime(utf8ToWChar(name_).c_str(), &ub) == 0;
+#endif // !HAVE_UTIMES
 }
 
 Time File::getModifiedTime()