aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-12-30 23:48:01 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-12-30 23:48:01 +0100
commit3c13da3dab539eac948de48640d8862857d0c8d0 (patch)
tree9cf3ae59b79ca89cbcfe08ce6b2b121f37d54a66 /shell
parent89a55972fd5d7f0ab815c2a62be69a8f34718353 (diff)
downloadbusybox-w32-3c13da3dab539eac948de48640d8862857d0c8d0.tar.gz
busybox-w32-3c13da3dab539eac948de48640d8862857d0c8d0.tar.bz2
busybox-w32-3c13da3dab539eac948de48640d8862857d0c8d0.zip
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 <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c10
-rw-r--r--shell/hush.c10
2 files changed, 10 insertions, 10 deletions
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
11371change_epoch(struct var *vepoch, const char *fmt) 11371change_epoch(struct var *vepoch, const char *fmt)
11372{ 11372{
11373 struct timeval tv; 11373 struct timeval tv;
11374 char buffer[sizeof("%lu.nnnnnn") + sizeof(long)*3]; 11374 char buffer[sizeof("%llu.nnnnnn") + sizeof(long long)*3];
11375 11375
11376 gettimeofday(&tv, NULL); 11376 xgettimeofday(&tv);
11377 sprintf(buffer, fmt, (unsigned long)tv.tv_sec, (unsigned)tv.tv_usec); 11377 sprintf(buffer, fmt, (unsigned long long)tv.tv_sec, (unsigned)tv.tv_usec);
11378 setvar(vepoch->var_text, buffer, VNOFUNC); 11378 setvar(vepoch->var_text, buffer, VNOFUNC);
11379 vepoch->flags &= ~VNOFUNC; 11379 vepoch->flags &= ~VNOFUNC;
11380} 11380}
@@ -11382,13 +11382,13 @@ change_epoch(struct var *vepoch, const char *fmt)
11382static void FAST_FUNC 11382static void FAST_FUNC
11383change_seconds(const char *value UNUSED_PARAM) 11383change_seconds(const char *value UNUSED_PARAM)
11384{ 11384{
11385 change_epoch(&vepochs, "%lu"); 11385 change_epoch(&vepochs, "%llu");
11386} 11386}
11387 11387
11388static void FAST_FUNC 11388static void FAST_FUNC
11389change_realtime(const char *value UNUSED_PARAM) 11389change_realtime(const char *value UNUSED_PARAM)
11390{ 11390{
11391 change_epoch(&vepochr, "%lu.%06u"); 11391 change_epoch(&vepochr, "%llu.%06u");
11392} 11392}
11393#endif 11393#endif
11394 11394
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 {
1027 struct sigaction sa; 1027 struct sigaction sa;
1028 char optstring_buf[sizeof("eixcs")]; 1028 char optstring_buf[sizeof("eixcs")];
1029#if BASH_EPOCH_VARS 1029#if BASH_EPOCH_VARS
1030 char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3]; 1030 char epoch_buf[sizeof("%llu.nnnnnn") + sizeof(long long)*3];
1031#endif 1031#endif
1032#if ENABLE_FEATURE_EDITING 1032#if ENABLE_FEATURE_EDITING
1033 char user_input_buf[CONFIG_FEATURE_EDITING_MAX_LEN]; 1033 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)
2277 { 2277 {
2278 const char *fmt = NULL; 2278 const char *fmt = NULL;
2279 if (strcmp(name, "EPOCHSECONDS") == 0) 2279 if (strcmp(name, "EPOCHSECONDS") == 0)
2280 fmt = "%lu"; 2280 fmt = "%llu";
2281 else if (strcmp(name, "EPOCHREALTIME") == 0) 2281 else if (strcmp(name, "EPOCHREALTIME") == 0)
2282 fmt = "%lu.%06u"; 2282 fmt = "%llu.%06u";
2283 if (fmt) { 2283 if (fmt) {
2284 struct timeval tv; 2284 struct timeval tv;
2285 gettimeofday(&tv, NULL); 2285 xgettimeofday(&tv);
2286 sprintf(G.epoch_buf, fmt, (unsigned long)tv.tv_sec, 2286 sprintf(G.epoch_buf, fmt, (unsigned long long)tv.tv_sec,
2287 (unsigned)tv.tv_usec); 2287 (unsigned)tv.tv_usec);
2288 return G.epoch_buf; 2288 return G.epoch_buf;
2289 } 2289 }