w command shows "?????" for LOGIN@ column when compiled with -D_TIME_BITS=64 on 32bit environment
w command shows ????? for LOGIN@ column when compiled on 32bit environment with -D_TIME_BITS=64. Patch below seems to fix this: (Note: tabspace is expanded to 8 whitespaces due to copy-paste activity)
diff -up ./w.c.t64 ./w.c
--- ./w.c.t64 2022-10-29 11:13:48.398963315 +0900
+++ ./w.c 2022-10-29 11:11:51.919401191 +0900
@@ -257,34 +257,34 @@ static void print_time_ival7(time_t t, i
if (oldstyle) {
if (t >= 48 * 60 * 60)
/* > 2 days */
- fprintf(fout, _(" %2ludays"), t / (24 * 60 * 60));
+ fprintf(fout, _(" %2lludays"), (unsigned long long)t / (24 * 60 * 60));
else if (t >= 60 * 60)
/* > 1 hour */
/* 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));
else if (t > 60)
/* > 1 minute */
/* 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
fprintf(fout, " ");
} else {
if (t >= 48 * 60 * 60)
/* 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)
/* 1 hour or more */
/* 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));
else if (t > 60)
/* 1 minute or more */
/* 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
/* Translation Hint: Seconds:Centiseconds */
- fprintf(fout, _(" %2lu.%02us"), t, centi_sec);
+ fprintf(fout, _(" %2llu.%02us"), (unsigned long long)t, centi_sec);
}
}