[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH] hush: add bash-compatible EPOCH variables
From: Ron Yorston <rmy () pobox ! com>
Date: 2019-04-15 9:48:29
Message-ID: 5cb4536d.MKuexKx4lcdMGO8j%rmy () pobox ! com
[Download RAW message or body]
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>
---
shell/hush.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/shell/hush.c b/shell/hush.c
index fa9afa38e..13d8364e7 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -379,6 +379,7 @@
#define BASH_SUBSTR ENABLE_HUSH_BASH_COMPAT
#define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT
#define BASH_HOSTNAME_VAR ENABLE_HUSH_BASH_COMPAT
+#define BASH_EPOCH_VARS ENABLE_HUSH_BASH_COMPAT
#define BASH_TEST2 (ENABLE_HUSH_BASH_COMPAT && ENABLE_HUSH_TEST)
#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT
@@ -1011,6 +1012,9 @@ struct globals {
int debug_indent;
#endif
struct sigaction sa;
+#if BASH_EPOCH_VARS
+ char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3];
+#endif
#if ENABLE_FEATURE_EDITING
char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN];
#endif
@@ -2227,6 +2231,24 @@ static const char* FAST_FUNC get_local_var_value(const char *name)
#if ENABLE_HUSH_RANDOM_SUPPORT
if (strcmp(name, "RANDOM") == 0)
return utoa(next_random(&G.random_gen));
+#endif
+#if BASH_EPOCH_VARS
+ {
+ struct timeval tv;
+ const char *fmt = NULL;
+
+ if (strcmp(name, "EPOCHSECONDS") == 0)
+ fmt = "%lu";
+ else if (strcmp(name, "EPOCHREALTIME") == 0)
+ fmt = "%lu.%06u";
+
+ if (fmt) {
+ gettimeofday(&tv, NULL);
+ sprintf(G.epoch_buf, fmt, (unsigned long)tv.tv_sec,
+ (unsigned)tv.tv_usec);
+ return G.epoch_buf;
+ }
+ }
#endif
return NULL;
}
--
2.20.1
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic