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>
This commit is contained in:
parent
2efa726b22
commit
a81700bc08
20
shell/hush.c
20
shell/hush.c
@ -379,6 +379,7 @@
|
|||||||
#define BASH_SUBSTR ENABLE_HUSH_BASH_COMPAT
|
#define BASH_SUBSTR ENABLE_HUSH_BASH_COMPAT
|
||||||
#define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT
|
#define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT
|
||||||
#define BASH_HOSTNAME_VAR 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_TEST2 (ENABLE_HUSH_BASH_COMPAT && ENABLE_HUSH_TEST)
|
||||||
#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT
|
#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT
|
||||||
|
|
||||||
@ -1011,6 +1012,9 @@ struct globals {
|
|||||||
int debug_indent;
|
int debug_indent;
|
||||||
#endif
|
#endif
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
#if BASH_EPOCH_VARS
|
||||||
|
char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3];
|
||||||
|
#endif
|
||||||
#if ENABLE_FEATURE_EDITING
|
#if ENABLE_FEATURE_EDITING
|
||||||
char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN];
|
char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN];
|
||||||
#endif
|
#endif
|
||||||
@ -2227,6 +2231,22 @@ static const char* FAST_FUNC get_local_var_value(const char *name)
|
|||||||
#if ENABLE_HUSH_RANDOM_SUPPORT
|
#if ENABLE_HUSH_RANDOM_SUPPORT
|
||||||
if (strcmp(name, "RANDOM") == 0)
|
if (strcmp(name, "RANDOM") == 0)
|
||||||
return utoa(next_random(&G.random_gen));
|
return utoa(next_random(&G.random_gen));
|
||||||
|
#endif
|
||||||
|
#if BASH_EPOCH_VARS
|
||||||
|
{
|
||||||
|
const char *fmt = NULL;
|
||||||
|
if (strcmp(name, "EPOCHSECONDS") == 0)
|
||||||
|
fmt = "%lu";
|
||||||
|
else if (strcmp(name, "EPOCHREALTIME") == 0)
|
||||||
|
fmt = "%lu.%06u";
|
||||||
|
if (fmt) {
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
sprintf(G.epoch_buf, fmt, (unsigned long)tv.tv_sec,
|
||||||
|
(unsigned)tv.tv_usec);
|
||||||
|
return G.epoch_buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user