This option is the long version of -a and -m. function old new delta touch_main 484 553 +69 .rodata 103649 103681 +32 static.touch_longopts 49 56 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 108/0) Total: 108 bytes
Signed-off-by: Xabier Oneca <[email protected]> --- coreutils/touch.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/coreutils/touch.c b/coreutils/touch.c index 6a4ffb400..9156c8cf1 100644 --- a/coreutils/touch.c +++ b/coreutils/touch.c @@ -76,7 +76,9 @@ * -t STAMP * use [[CC]YY]MMDDhhmm[.ss] instead of current time * --time=WORD - * change the specified time: WORD is access, atime, or use + * change the specified time: + * WORD is access, atime, or use: equivalent to -a + * WORD is modify or mtime: equivalent to -m */ #include "libbb.h" @@ -104,12 +106,14 @@ int touch_main(int argc UNUSED_PARAM, char **argv) "no-create\0" No_argument "c" IF_FEATURE_TOUCH_SUSV3("reference\0" Required_argument "r") IF_FEATURE_TOUCH_SUSV3("date\0" Required_argument "d") + IF_FEATURE_TOUCH_SUSV3("time\0" Required_argument "\x7f") IF_FEATURE_TOUCH_NODEREF("no-dereference\0" No_argument "h") ; #endif #if ENABLE_FEATURE_TOUCH_SUSV3 char *reference_file = NULL; char *date_str = NULL; + IF_LONG_OPTS(char *time_arg = NULL;) /* timebuf[0] is atime, timebuf[1] is mtime */ struct timespec timebuf[2]; //timebuf[0].tv_sec = timebuf[1].tv_sec = 0; /* -- needed on Linux <=v2.6.26? */ @@ -136,6 +140,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv) , &reference_file , &date_str , &date_str + IF_LONG_OPTS(, &time_arg) #endif ); @@ -144,6 +149,22 @@ int touch_main(int argc UNUSED_PARAM, char **argv) bb_show_usage(); } +#if ENABLE_FEATURE_TOUCH_SUSV3 && ENABLE_LONG_OPTS + if (time_arg) { + static const char *atime_values ALIGN1 = "access\0atime\0use\0"; + static const char *mtime_values ALIGN1 = "modify\0mtime\0"; + + if (index_in_substrings(atime_values, time_arg) >= 0) { + opts |= OPT_a; + } else if (index_in_substrings(mtime_values, time_arg) >= 0) { + opts |= OPT_m; + } else { + //bb_error_msg("Invalid value: %s", time_arg); + bb_show_usage(); + } + } +#endif + if (reference_file) { struct stat stbuf; xstat(reference_file, &stbuf); -- 2.30.2
From 1abfcb152294076b34d33bc6c09a9d842d49c5e5 Mon Sep 17 00:00:00 2001 From: Xabier Oneca <[email protected]> Date: Sat, 10 Apr 2021 01:51:08 +0200 Subject: [PATCH 3/3] touch: add --time=what option This option is the long version of -a and -m. function old new delta touch_main 484 553 +69 .rodata 103649 103681 +32 static.touch_longopts 49 56 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 108/0) Total: 108 bytes Signed-off-by: Xabier Oneca <[email protected]> --- coreutils/touch.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/coreutils/touch.c b/coreutils/touch.c index 6a4ffb400..9156c8cf1 100644 --- a/coreutils/touch.c +++ b/coreutils/touch.c @@ -76,7 +76,9 @@ * -t STAMP * use [[CC]YY]MMDDhhmm[.ss] instead of current time * --time=WORD - * change the specified time: WORD is access, atime, or use + * change the specified time: + * WORD is access, atime, or use: equivalent to -a + * WORD is modify or mtime: equivalent to -m */ #include "libbb.h" @@ -104,12 +106,14 @@ int touch_main(int argc UNUSED_PARAM, char **argv) "no-create\0" No_argument "c" IF_FEATURE_TOUCH_SUSV3("reference\0" Required_argument "r") IF_FEATURE_TOUCH_SUSV3("date\0" Required_argument "d") + IF_FEATURE_TOUCH_SUSV3("time\0" Required_argument "\x7f") IF_FEATURE_TOUCH_NODEREF("no-dereference\0" No_argument "h") ; #endif #if ENABLE_FEATURE_TOUCH_SUSV3 char *reference_file = NULL; char *date_str = NULL; + IF_LONG_OPTS(char *time_arg = NULL;) /* timebuf[0] is atime, timebuf[1] is mtime */ struct timespec timebuf[2]; //timebuf[0].tv_sec = timebuf[1].tv_sec = 0; /* -- needed on Linux <=v2.6.26? */ @@ -136,6 +140,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv) , &reference_file , &date_str , &date_str + IF_LONG_OPTS(, &time_arg) #endif ); @@ -144,6 +149,22 @@ int touch_main(int argc UNUSED_PARAM, char **argv) bb_show_usage(); } +#if ENABLE_FEATURE_TOUCH_SUSV3 && ENABLE_LONG_OPTS + if (time_arg) { + static const char *atime_values ALIGN1 = "access\0atime\0use\0"; + static const char *mtime_values ALIGN1 = "modify\0mtime\0"; + + if (index_in_substrings(atime_values, time_arg) >= 0) { + opts |= OPT_a; + } else if (index_in_substrings(mtime_values, time_arg) >= 0) { + opts |= OPT_m; + } else { + //bb_error_msg("Invalid value: %s", time_arg); + bb_show_usage(); + } + } +#endif + if (reference_file) { struct stat stbuf; xstat(reference_file, &stbuf); -- 2.30.2
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
