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>
This commit is contained in:
+5
-5
@@ -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
|
||||
|
||||
|
||||
+5
-5
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user