--- w.1 | 3 +++ w.c | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) --- w.1 +++ w.1 2023-08-18 08:21:51.764340794 +0000 @@ -40,6 +40,9 @@ and a \fB\-s\fR, \fB\-\-short\fR Use the short format. Don't print the login time, JCPU or PCPU times. .TP +\fB\-n\fR, \fB\-\-no\-truncat\fR +Do not truncate the output format. This option might become renamed in future versions. +.TP \fB\-f\fR, \fB\-\-from\fR Toggle printing the .B from --- w.c +++ w.c 2023-08-18 08:37:32.143482035 +0000 @@ -394,7 +394,7 @@ static const proc_t *getproc(const utmp_ } static void showinfo(utmp_t * u, int formtype, int maxcmd, int from, - const int userlen, const int fromlen, const int ip_addresses) + int userlen, int fromlen, const int ip_addresses) { unsigned long long jcpu; int ut_pid_found; @@ -424,7 +424,14 @@ static void showinfo(utmp_t * u, int for strncpy(uname, u->ut_user, UT_NAMESIZE); if (formtype) { - printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, u->ut_line); + int utlnlen = 8; + if (formtype > 1) { + userlen = strnlen(uname, UT_NAMESIZE); + fromlen = strnlen(u->ut_host, UT_HOSTSIZE); + utlnlen = strnlen(u->ut_line, UT_LINESIZE); + maxcmd = MAX_CMD_WIDTH; + } + printf("%-*.*s%-*.*s", userlen + 1, userlen, uname, utlnlen + 1, utlnlen, u->ut_line); if (from) print_from(u, ip_addresses, fromlen); #ifdef HAVE_UTMPX_H @@ -478,6 +485,7 @@ static void __attribute__ ((__noreturn__ fputs(_(" -h, --no-header do not print header\n"),out); fputs(_(" -u, --no-current ignore current process username\n"),out); fputs(_(" -s, --short short format\n"),out); + fputs(_(" -n, --no-truncat non truncated listing (large)\n"),out); fputs(_(" -f, --from show remote hostname field\n"),out); fputs(_(" -o, --old-style old style output\n"),out); fputs(_(" -i, --ip-addr display IP address instead of hostname (if possible)\n"), out); @@ -514,6 +522,7 @@ int main(int argc, char **argv) {"no-header", no_argument, NULL, 'h'}, {"no-current", no_argument, NULL, 'u'}, {"short", no_argument, NULL, 's'}, + {"no-truncat", no_argument, NULL, 'n'}, {"from", no_argument, NULL, 'f'}, {"old-style", no_argument, NULL, 'o'}, {"ip-addr", no_argument, NULL, 'i'}, @@ -535,7 +544,7 @@ int main(int argc, char **argv) #endif while ((ch = - getopt_long(argc, argv, "husfoVi", longopts, NULL)) != -1) + getopt_long(argc, argv, "husnfoVi", longopts, NULL)) != -1) switch (ch) { case 'h': header = 0; @@ -546,6 +555,10 @@ int main(int argc, char **argv) case 's': longform = 0; break; + case 'n': + longform = 2; + header = 0; + break; case 'f': from = !from; break;