--- w.c +++ w.c 2012-10-30 10:58:51.547461515 +0000 @@ -360,7 +360,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; @@ -390,7 +390,13 @@ 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); + } + printf("%-*.*s%-*.*s", userlen + 1, userlen, uname, utlnlen + 1, utlnlen, u->ut_line); if (from) print_from(u, ip_addresses, fromlen); print_logintime(u->ut_time, stdout); @@ -440,6 +446,7 @@ static void __attribute__ ((__noreturn__ fputs(_(" -h, --no-header do not print header\n" " -u, --no-current ignore current process username\n" " -s, --short short format\n" + " -n, --no-truncat non truncated listing (large)\n" " -f, --from show remote hostname field\n" " -o, --old-style old style output\n" " -i, --ip-addr display IP address instead of hostname (if possible)\n"), out); @@ -476,6 +483,7 @@ int main(int argc, char **argv) {"no-header", no_argument, NULL, 'h'}, {"no-current", no_argument, NULL, 'u'}, {"sort", no_argument, NULL, 's'}, + {"no-truncat", no_argument, NULL, 'n'}, {"from", no_argument, NULL, 'f'}, {"old-style", no_argument, NULL, 'o'}, {"help", no_argument, NULL, HELP_OPTION}, @@ -494,7 +502,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; @@ -505,6 +513,10 @@ int main(int argc, char **argv) case 's': longform = 0; break; + case 'n': + longform = 2; + header = 0; + break; case 'f': from = !from; break;