w: Show time with TIME_BITS=64 on 32bit env

Thanks to @kabe-gl for this patch.

w command shows ????? for LOGIN@ column when compiled on 32bit environment with -D_TIME_BITS=64.

References:
 #256

Signed-off-by: Craig Small <csmall@dropbear.xyz>
This commit is contained in:
Craig Small 2022-11-09 21:02:09 +11:00
parent 2647eb57da
commit d99c213af9
2 changed files with 8 additions and 7 deletions

1
NEWS
View File

@ -2,6 +2,7 @@ procps-ng-NEXT
--------------- ---------------
* library * library
Handle absent 'core_id' in /proc/cpuinfo Handle absent 'core_id' in /proc/cpuinfo
* w: Show time with D_TIME_BITS=64 on 32bit env issue #256
procps-ng-4.0.1 procps-ng-4.0.1
--------------- ---------------

14
src/w.c
View File

@ -251,34 +251,34 @@ static void print_time_ival7(time_t t, int centi_sec, FILE * fout)
if (oldstyle) { if (oldstyle) {
if (t >= 48 * 60 * 60) if (t >= 48 * 60 * 60)
/* > 2 days */ /* > 2 days */
fprintf(fout, _(" %2ludays"), t / (24 * 60 * 60)); fprintf(fout, _(" %2lludays"), (unsigned long long)t / (24 * 60 * 60));
else if (t >= 60 * 60) else if (t >= 60 * 60)
/* > 1 hour */ /* > 1 hour */
/* Translation Hint: Hours:Minutes */ /* Translation Hint: Hours:Minutes */
fprintf(fout, " %2lu:%02u ", t / (60 * 60), fprintf(fout, " %2llu:%02u ", (unsigned long long)t / (60 * 60),
(unsigned)((t / 60) % 60)); (unsigned)((t / 60) % 60));
else if (t > 60) else if (t > 60)
/* > 1 minute */ /* > 1 minute */
/* Translation Hint: Minutes:Seconds */ /* Translation Hint: Minutes:Seconds */
fprintf(fout, _(" %2lu:%02um"), t / 60, (unsigned)t % 60); fprintf(fout, _(" %2llu:%02um"), (unsigned long long)t / 60, (unsigned)t % 60);
else else
fprintf(fout, " "); fprintf(fout, " ");
} else { } else {
if (t >= 48 * 60 * 60) if (t >= 48 * 60 * 60)
/* 2 days or more */ /* 2 days or more */
fprintf(fout, _(" %2ludays"), t / (24 * 60 * 60)); fprintf(fout, _(" %2lludays"), (unsigned long long)t / (24 * 60 * 60));
else if (t >= 60 * 60) else if (t >= 60 * 60)
/* 1 hour or more */ /* 1 hour or more */
/* Translation Hint: Hours:Minutes */ /* Translation Hint: Hours:Minutes */
fprintf(fout, _(" %2lu:%02um"), t / (60 * 60), fprintf(fout, _(" %2llu:%02um"), (unsigned long long)t / (60 * 60),
(unsigned)((t / 60) % 60)); (unsigned)((t / 60) % 60));
else if (t > 60) else if (t > 60)
/* 1 minute or more */ /* 1 minute or more */
/* Translation Hint: Minutes:Seconds */ /* Translation Hint: Minutes:Seconds */
fprintf(fout, " %2lu:%02u ", t / 60, (unsigned)t % 60); fprintf(fout, " %2llu:%02u ", (unsigned long long)t / 60, (unsigned)t % 60);
else else
/* Translation Hint: Seconds:Centiseconds */ /* Translation Hint: Seconds:Centiseconds */
fprintf(fout, _(" %2lu.%02us"), t, centi_sec); fprintf(fout, _(" %2llu.%02us"), (unsigned long long)t, centi_sec);
} }
} }