]> granicus.if.org Git - sudo/commitdiff
Support st_nmtime in struct stat as found in HP-UX.
authorTodd C. Miller <Todd.Miller@sudo.ws>
Wed, 14 Nov 2018 20:37:46 +0000 (13:37 -0700)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Wed, 14 Nov 2018 20:37:46 +0000 (13:37 -0700)
config.h.in
configure
configure.ac
include/sudo_util.h
lib/util/utimens.c

index fd99abdaac7480077149a0a1f84aa00fd14b8ceb..8e0f429c98c2a2362d066dd3cf3e2989412d6eff 100644 (file)
 /* Define to 1 if your struct stat has an st_mtimespec member. */
 #undef HAVE_ST_MTIMESPEC
 
+/* Define to 1 if your struct stat has an st_nmtime member. */
+#undef HAVE_ST_NMTIME
+
 /* Define to 1 if your struct stat uses an st__tim union. */
 #undef HAVE_ST__TIM
 
index 794516296bb4df07603dc8e0bda9d404434d4b02..cb51705f99a0488a312296468a79d700b1d411d8 100755 (executable)
--- a/configure
+++ b/configure
@@ -20975,8 +20975,17 @@ else
 if test "x$ac_cv_member_struct_stat_st_mtimespec" = xyes; then :
   $as_echo "#define HAVE_ST_MTIMESPEC 1" >>confdefs.h
 
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_nmtime" "ac_cv_member_struct_stat_st_nmtime" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_nmtime" = xyes; then :
+  $as_echo "#define HAVE_ST_NMTIME 1" >>confdefs.h
+
 fi
 
+fi
+
+
+
 fi
 
 # Look for sha2 functions if not using openssl
@@ -29141,5 +29150,6 @@ fi
 
 
 
+
 
 
index 86e0627c896e4f001503e1547031066b79b56a29..660a206d78cd083eb02cc66e649f0623eb78ae55 100644 (file)
@@ -2836,9 +2836,14 @@ AC_CHECK_MEMBERS([struct tm.tm_gmtoff], [], [], [
 AC_INCLUDES_DEFAULT
 #include <errno.h>
 ])
-AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)]
+AC_CHECK_MEMBER([struct stat.st_mtim],
+    [AC_DEFINE(HAVE_ST_MTIM)]
     [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
-    [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
+    [AC_CHECK_MEMBER([struct stat.st_mtimespec],
+       [AC_DEFINE([HAVE_ST_MTIMESPEC])],
+       [AC_CHECK_MEMBER([struct stat.st_nmtime], AC_DEFINE(HAVE_ST_NMTIME))])
+    ]
+)
 # Look for sha2 functions if not using openssl
 if test "$DIGEST" = "digest.lo"; then
     FOUND_SHA2=no
@@ -4578,6 +4583,7 @@ AH_TEMPLATE(HAVE_SOLARIS_AUDIT, [Define to 1 to enable Solaris audit support.])
 AH_TEMPLATE(HAVE_ST__TIM, [Define to 1 if your struct stat uses an st__tim union.])
 AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member.])
 AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member.])
+AH_TEMPLATE(HAVE_ST_NMTIME, [Define to 1 if your struct stat has an st_nmtime member.])
 AH_TEMPLATE(HAVE___PROGNAME, [Define to 1 if your crt0.o defines the __progname symbol for you.])
 AH_TEMPLATE(HOST_IN_LOG, [Define to 1 if you want the hostname to be entered into the log file.])
 AH_TEMPLATE(IGNORE_DOT_PATH, [Define to 1 if you want to ignore '.' and empty PATH elements.])
index 2d3f5f185536e547011bfe41487c6c2a53031483..96cac165d9c1ba718ea6569311de369e999bbce6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2016 Todd C. Miller <Todd.Miller@sudo.ws>
+ * Copyright (c) 2013-2018 Todd C. Miller <Todd.Miller@sudo.ws>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
 # else
 #  define mtim_get(_x, _y)     do { (_y).tv_sec = (_x)->SUDO_ST_MTIM.tv_sec; (_y).tv_nsec = ((_x)->SUDO_ST_MTIM.tv_nsec / 1000) * 1000; } while (0)
 # endif
+#elif defined(HAVE_ST_NMTIME)
+# define mtim_get(_x, _y)      do { (_y).tv_sec = (_x)->st_mtime; (_y).tv_nsec = (_x)->st_nmtime; } while (0)
 #else
 # define mtim_get(_x, _y)      do { (_y).tv_sec = (_x)->st_mtime; (_y).tv_nsec = 0; } while (0)
 #endif /* HAVE_ST_MTIM */
index 7cbe250f3e11cf65d0368124e47dd7c85bd80375..579391f149f5ec6c1fe23b7a6214c99899a30165 100644 (file)
@@ -52,6 +52,9 @@
 #elif defined(HAVE_ST_MTIMESPEC)
 # define ATIME_TO_TIMEVAL(_x, _y)      TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_atimespec)
 # define MTIME_TO_TIMEVAL(_x, _y)      TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_mtimespec)
+#elif defined(HAVE_ST_NMTIME)
+# define ATIME_TO_TIMEVAL(_x, _y)      do { (_x)->tv_sec = (_y)->st_atime; (_x)->tv_usec = (_y)->st_natime; } while (0)
+# define MTIME_TO_TIMEVAL(_x, _y)      do { (_x)->tv_sec = (_y)->st_mtime; (_x)->tv_usec = (_y)->st_nmtime; } while (0)
 #else
 # define ATIME_TO_TIMEVAL(_x, _y)      do { (_x)->tv_sec = (_y)->st_atime; (_x)->tv_usec = 0; } while (0)
 # define MTIME_TO_TIMEVAL(_x, _y)      do { (_x)->tv_sec = (_y)->st_mtime; (_x)->tv_usec = 0; } while (0)