[git commit] touch: code shrink

Denys Vlasenko vda.linux at googlemail.com
Tue Apr 13 13:11:47 UTC 2021


commit: https://git.busybox.net/busybox/commit/?id=6f63a2ba0e54f7fc8ec66d470beb0212dd1b4d4f
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
.rodata                                           103215  103218      +3
touch_main                                           460     450     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-10)              Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/touch.c | 40 +++++++++++++++++-----------------------
 1 file changed, 17 insertions(+), 23 deletions(-)

diff --git a/coreutils/touch.c b/coreutils/touch.c
index 189428a79..43312d22a 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -85,8 +85,19 @@ int touch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int touch_main(int argc UNUSED_PARAM, char **argv)
 {
 	int fd;
-	int status = EXIT_SUCCESS;
 	int opts;
+	smalluint status = EXIT_SUCCESS;
+#if ENABLE_FEATURE_TOUCH_SUSV3
+	char *reference_file = NULL;
+	char *date_str = NULL;
+	/* timebuf[0] is atime, timebuf[1] is mtime */
+	struct timespec timebuf[2];
+#else
+# define reference_file NULL
+# define date_str       NULL
+# define timebuf        ((struct timespec*)NULL)
+#endif
+
 	enum {
 		OPT_c = (1 << 0),
 		OPT_h = (1 << 1) * ENABLE_FEATURE_TOUCH_NODEREF,
@@ -105,17 +116,6 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 		IF_FEATURE_TOUCH_NODEREF("no-dereference\0" No_argument "h")
 	;
 #endif
-#if ENABLE_FEATURE_TOUCH_SUSV3
-	char *reference_file = NULL;
-	char *date_str = NULL;
-	/* timebuf[0] is atime, timebuf[1] is mtime */
-	struct timespec timebuf[2];
-#else
-# define reference_file NULL
-# define date_str       NULL
-# define timebuf        ((struct timespec*)NULL)
-#endif
-
 	/* -d and -t both set time. In coreutils,
 	 * accepted data format differs a bit between -d and -t.
 	 * We accept the same formats for both
@@ -125,9 +125,10 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 		IF_FEATURE_TOUCH_SUSV3("r:d:t:am")
 		/*ignored:*/ "f" IF_NOT_FEATURE_TOUCH_SUSV3("am")
 		"\0" /* opt_complementary: */
-		/* coreutils forbids -r and -t at once: */ IF_FEATURE_TOUCH_SUSV3("r--t:t--r")
-		/* but allows these combinations: "r--d:d--r:t--d:d--t" */,
-		touch_longopts
+		/* at least one arg: */ "-1"
+		/* coreutils forbids -r and -t at once: */ IF_FEATURE_TOUCH_SUSV3(":r--t:t--r")
+		/* but allows these combinations: "r--d:d--r:t--d:d--t" */
+		, touch_longopts
 #if ENABLE_FEATURE_TOUCH_SUSV3
 		, &reference_file
 		, &date_str
@@ -135,13 +136,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 #endif
 	);
 
-	argv += optind;
-	if (!*argv) {
-		bb_show_usage();
-	}
-
 	timebuf[0].tv_nsec = timebuf[1].tv_nsec = UTIME_NOW;
-
 	if (reference_file) {
 		struct stat stbuf;
 		xstat(reference_file, &stbuf);
@@ -150,7 +145,6 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 		timebuf[0].tv_nsec = stbuf.st_atim.tv_nsec;
 		timebuf[1].tv_nsec = stbuf.st_mtim.tv_nsec;
 	}
-
 	if (date_str) {
 		struct tm tm_time;
 		time_t t;
@@ -168,7 +162,6 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 		timebuf[1].tv_sec = timebuf[0].tv_sec = t;
 		timebuf[1].tv_nsec = timebuf[0].tv_nsec = 0;
 	}
-
 	if (opts & OPT_a) {
 		timebuf[1].tv_nsec = UTIME_OMIT;
 	}
@@ -176,6 +169,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
 		timebuf[0].tv_nsec = UTIME_OMIT;
 	}
 
+	argv += optind;
 	do {
 		int result = utimensat(AT_FDCWD, *argv, timebuf,
 				(opts & OPT_h) ? AT_SYMLINK_NOFOLLOW : 0);


More information about the busybox-cvs mailing list