From 3c13da3dab539eac948de48640d8862857d0c8d0 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 30 Dec 2020 23:48:01 +0100 Subject: libbb: introduce and use xgettimeofday(), do not truncate 64-bit time_t in shells function old new delta xgettimeofday - 11 +11 get_local_var_value 280 281 +1 svlogd_main 1323 1322 -1 change_epoch 67 66 -1 timestamp_and_log 461 458 -3 hwclock_main 301 298 -3 fmt_time_bernstein_25 135 132 -3 step_time 331 326 -5 script_main 1207 1202 -5 machtime 34 28 -6 curtime 61 54 -7 ts_main 423 415 -8 nmeter_main 761 751 -10 gettime1900d 67 46 -21 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/12 up/down: 12/-73) Total: -61 bytes Signed-off-by: Denys Vlasenko --- shell/ash.c | 10 +++++----- shell/hush.c | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'shell') diff --git a/shell/ash.c b/shell/ash.c index f16d7fb6a..54f004375 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11371,10 +11371,10 @@ static void FAST_FUNC change_epoch(struct var *vepoch, const char *fmt) { struct timeval tv; - char buffer[sizeof("%lu.nnnnnn") + sizeof(long)*3]; + char buffer[sizeof("%llu.nnnnnn") + sizeof(long long)*3]; - gettimeofday(&tv, NULL); - sprintf(buffer, fmt, (unsigned long)tv.tv_sec, (unsigned)tv.tv_usec); + xgettimeofday(&tv); + sprintf(buffer, fmt, (unsigned long long)tv.tv_sec, (unsigned)tv.tv_usec); setvar(vepoch->var_text, buffer, VNOFUNC); vepoch->flags &= ~VNOFUNC; } @@ -11382,13 +11382,13 @@ change_epoch(struct var *vepoch, const char *fmt) static void FAST_FUNC change_seconds(const char *value UNUSED_PARAM) { - change_epoch(&vepochs, "%lu"); + change_epoch(&vepochs, "%llu"); } static void FAST_FUNC change_realtime(const char *value UNUSED_PARAM) { - change_epoch(&vepochr, "%lu.%06u"); + change_epoch(&vepochr, "%llu.%06u"); } #endif diff --git a/shell/hush.c b/shell/hush.c index 9fead37da..65f08659f 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -1027,7 +1027,7 @@ struct globals { struct sigaction sa; char optstring_buf[sizeof("eixcs")]; #if BASH_EPOCH_VARS - char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3]; + char epoch_buf[sizeof("%llu.nnnnnn") + sizeof(long long)*3]; #endif #if ENABLE_FEATURE_EDITING char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN]; @@ -2277,13 +2277,13 @@ static const char* FAST_FUNC get_local_var_value(const char *name) { const char *fmt = NULL; if (strcmp(name, "EPOCHSECONDS") == 0) - fmt = "%lu"; + fmt = "%llu"; else if (strcmp(name, "EPOCHREALTIME") == 0) - fmt = "%lu.%06u"; + fmt = "%llu.%06u"; if (fmt) { struct timeval tv; - gettimeofday(&tv, NULL); - sprintf(G.epoch_buf, fmt, (unsigned long)tv.tv_sec, + xgettimeofday(&tv); + sprintf(G.epoch_buf, fmt, (unsigned long long)tv.tv_sec, (unsigned)tv.tv_usec); return G.epoch_buf; } -- cgit v1.2.3