diff options
-rw-r--r-- | shell/hush.c | 20 |
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 | ||