[dev] [sbase] [PATCH 3/3] touch: Use both atime and mtime of reference file

From: Michael Forney <mforney_AT_mforney.org>
Date: Sat, 16 May 2015 04:57:27 +0000

---
 touch.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/touch.c b/touch.c
index 2789716..fb04142 100644
--- a/touch.c
+++ b/touch.c
_AT_@ -14,14 +14,13 @@
 static int aflag;
 static int cflag;
 static int mflag;
-static struct timespec t;
+static struct timespec times[2];
 
 static void
 touch(const char *file)
 {
 	int fd;
 	struct stat st;
-	struct timespec times[2];
 	int r;
 
 	if ((r = stat(file, &st)) < 0) {
_AT_@ -30,8 +29,10 @@ touch(const char *file)
 		if (cflag)
 			return;
 	} else if (!r) {
-		times[0] = aflag ? t : st.st_atim;
-		times[1] = mflag ? t : st.st_mtim;
+		if (!aflag)
+			times[0] = st.st_atim;
+		if (!mflag)
+			times[1] = st.st_mtim;
 		if (utimensat(AT_FDCWD, file, times, 0) < 0)
 			eprintf("utimensat %s:", file);
 		return;
_AT_@ -117,8 +118,8 @@ int
 main(int argc, char *argv[])
 {
 	struct stat st;
-	char *ref;
-	clock_gettime(CLOCK_REALTIME, &t);
+	char *ref = NULL;
+	clock_gettime(CLOCK_REALTIME, &times[0]);
 
 	ARGBEGIN {
 	case 'a':
_AT_@ -129,7 +130,7 @@ main(int argc, char *argv[])
 		break;
 	case 'd':
 	case 't':
-		t.tv_sec = parsetime(EARGF(usage()), t.tv_sec);
+		times[0].tv_sec = parsetime(EARGF(usage()), times[0].tv_sec);
 		break;
 	case 'm':
 		mflag = 1;
_AT_@ -138,10 +139,11 @@ main(int argc, char *argv[])
 		ref = EARGF(usage());
 		if (stat(ref, &st) < 0)
 			eprintf("stat '%s':", ref);
-		t = st.st_mtim;
+		times[0] = st.st_atim;
+		times[1] = st.st_mtim;
 		break;
 	case 'T':
-		t.tv_sec = estrtonum(EARGF(usage()), 0, LLONG_MAX);
+		times[0].tv_sec = estrtonum(EARGF(usage()), 0, LLONG_MAX);
 		break;
 	default:
 		usage();
_AT_@ -151,6 +153,8 @@ main(int argc, char *argv[])
 		usage();
 	if (!aflag && !mflag)
 		aflag = mflag = 1;
+	if (!ref)
+		times[1] = times[0];
 
 	for (; *argv; argc--, argv++)
 		touch(*argv);
-- 
2.1.3.1.g339ec9c
Received on Sat May 16 2015 - 06:57:27 CEST

This archive was generated by hypermail 2.3.0 : Sat May 16 2015 - 07:12:19 CEST