aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2019-04-15 10:48:29 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2019-04-16 18:29:52 +0200
commita81700bc0810b2cad59d450a380ece20a8eb96a4 (patch)
tree371499cb5755478247e8acaa864b89069ba71a94
parent2efa726b22e9ebb7ee6c192a0fea0c478a857219 (diff)
downloadbusybox-w32-a81700bc0810b2cad59d450a380ece20a8eb96a4.tar.gz
busybox-w32-a81700bc0810b2cad59d450a380ece20a8eb96a4.tar.bz2
busybox-w32-a81700bc0810b2cad59d450a380ece20a8eb96a4.zip
hush: add bash-compatible EPOCH variables
Bash 5.0 added the dynamic variable EPOCHSECONDS and EPOCHREALTIME which return the number of seconds since the Unix Epoch as an integer or float. These are useful for logging or tracing. function old new delta get_local_var_value 207 302 +95 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 95/0) Total: 95 bytes text data bss dec hex filename 938702 4203 1888 944793 e6a99 busybox_old 938797 4203 1888 944888 e6af8 busybox_unstripped Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/hush.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/shell/hush.c b/shell/hush.c
index fa9afa38e..d745148f4 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -379,6 +379,7 @@
379#define BASH_SUBSTR ENABLE_HUSH_BASH_COMPAT 379#define BASH_SUBSTR ENABLE_HUSH_BASH_COMPAT
380#define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT 380#define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT
381#define BASH_HOSTNAME_VAR ENABLE_HUSH_BASH_COMPAT 381#define BASH_HOSTNAME_VAR ENABLE_HUSH_BASH_COMPAT
382#define BASH_EPOCH_VARS ENABLE_HUSH_BASH_COMPAT
382#define BASH_TEST2 (ENABLE_HUSH_BASH_COMPAT && ENABLE_HUSH_TEST) 383#define BASH_TEST2 (ENABLE_HUSH_BASH_COMPAT && ENABLE_HUSH_TEST)
383#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT 384#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT
384 385
@@ -1011,6 +1012,9 @@ struct globals {
1011 int debug_indent; 1012 int debug_indent;
1012#endif 1013#endif
1013 struct sigaction sa; 1014 struct sigaction sa;
1015#if BASH_EPOCH_VARS
1016 char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3];
1017#endif
1014#if ENABLE_FEATURE_EDITING 1018#if ENABLE_FEATURE_EDITING
1015 char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN]; 1019 char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN];
1016#endif 1020#endif
@@ -2228,6 +2232,22 @@ static const char* FAST_FUNC get_local_var_value(const char *name)
2228 if (strcmp(name, "RANDOM") == 0) 2232 if (strcmp(name, "RANDOM") == 0)
2229 return utoa(next_random(&G.random_gen)); 2233 return utoa(next_random(&G.random_gen));
2230#endif 2234#endif
2235#if BASH_EPOCH_VARS
2236 {
2237 const char *fmt = NULL;
2238 if (strcmp(name, "EPOCHSECONDS") == 0)
2239 fmt = "%lu";
2240 else if (strcmp(name, "EPOCHREALTIME") == 0)
2241 fmt = "%lu.%06u";
2242 if (fmt) {
2243 struct timeval tv;
2244 gettimeofday(&tv, NULL);
2245 sprintf(G.epoch_buf, fmt, (unsigned long)tv.tv_sec,
2246 (unsigned)tv.tv_usec);
2247 return G.epoch_buf;
2248 }
2249 }
2250#endif
2231 return NULL; 2251 return NULL;
2232} 2252}
2233 2253