← Commit list

a81700bc0

Ron Yorston
Ron Yorston
2019-04-16
SUCCESS Duration: 152s

Subject

hush: add bash-compatible EPOCH variables

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

shell/hush.c+20 -0
@@ -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,22 @@ 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
+ {
+ 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
return NULL;
}