Change do_setattrlist_times() to use an stp arg.
diff --git a/syscall.c b/syscall.c
index 35caa07..bcd9738 100644
--- a/syscall.c
+++ b/syscall.c
@@ -367,7 +367,7 @@
 }
 
 #ifdef HAVE_SETATTRLIST
-int do_setattrlist_times(const char *fname, time_t modtime, uint32 mod_nsec)
+int do_setattrlist_times(const char *fname, STRUCT_STAT *stp)
 {
 	struct attrlist attrList;
 	struct timespec ts;
@@ -375,8 +375,8 @@
 	if (dry_run) return 0;
 	RETURN_ERROR_IF_RO_OR_LO;
 
-	ts.tv_sec = modtime;
-	ts.tv_nsec = mod_nsec;
+	ts.tv_sec = stp->st_mtime;
+	ts.tv_nsec = stp->ST_MTIME_NSEC;
 
 	memset(&attrList, 0, sizeof attrList);
 	attrList.bitmapcount = ATTR_BIT_MAP_COUNT;
diff --git a/util.c b/util.c
index 1935a77..03917c3 100644
--- a/util.c
+++ b/util.c
@@ -131,7 +131,7 @@
 	switch (switch_step) {
 #ifdef HAVE_SETATTRLIST
 #include "case_N.h"
-		if (do_setattrlist_times(fname, modtime, mod_nsec) == 0)
+		if (do_setattrlist_times(fname, stp) == 0)
 			break;
 		if (errno != ENOSYS)
 			return -1;