File procps-ng-3.3.9-w-notruncate.diff of Package procps4

---
 procps-ng-4.0.4/man/w.1 |    3 +++
 procps-ng-4.0.4/src/w.c |   27 +++++++++++++++++++++++----
 2 files changed, 26 insertions(+), 4 deletions(-)

--- procps-ng-4.0.4/man/w.1
+++ procps-ng-4.0.4/man/w.1	2023-11-13 12:22:54.245834105 +0000
@@ -51,6 +51,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
--- procps-ng-4.0.4/src/w.c
+++ procps-ng-4.0.4/src/w.c	2023-11-13 12:47:16.843483082 +0000
@@ -218,7 +218,8 @@ static void print_from(
 	    if (r < 0 || host == NULL)
 	        print_host("", 0, fromlen);
 	    else {
-	        print_host(host, strlen(host), fromlen);
+	        print_host(host, strlen(host),
+			   fromlen == 0?strlen(host):fromlen);
 		free(host);
 	    }
 	} else {
@@ -510,7 +511,7 @@ static int find_best_proc(
 static void showinfo(
             const char *session, const char *name,
             utmp_t * u, const int longform, int maxcmd, int from,
-            const int userlen, const int fromlen, const int ip_addresses,
+            int userlen, int fromlen, const int ip_addresses,
             const int pids)
 {
     unsigned long long jcpu, pcpu;
@@ -520,6 +521,7 @@ static void showinfo(
     char cmdline[MAX_CMD_WIDTH + 1];
     pid_t best_pid = -1;
     int pids_length = 0;
+    int utlnlen = 8;
 
     strcpy(cmdline, "-");
 
@@ -572,7 +574,18 @@ static void showinfo(
     /* force NUL term for printf */
     uname[UT_NAMESIZE] = '\0';
 
-    printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, tty + 5);
+    if (longform > 1) {
+        userlen = strlen(uname);
+        if (u) {
+            fromlen = strnlen(u->ut_host, UT_HOSTSIZE);
+            utlnlen = strnlen(u->ut_line, UT_LINESIZE);
+        } else {
+            fromlen = 0;
+            utlnlen = strlen (tty+5);
+        }
+        maxcmd = MAX_CMD_WIDTH;
+    }
+    printf("%-*.*s%-*.*s", userlen + 1, userlen, uname, utlnlen + 1, utlnlen, tty+5);
     if (from)
         print_from(session, NULL, ip_addresses, fromlen);
 
@@ -643,6 +656,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);
@@ -681,6 +695,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'},
@@ -703,7 +718,7 @@ int main(int argc, char **argv)
 #endif
 
 	while ((ch =
-		getopt_long(argc, argv, "husfoVip", longopts, NULL)) != -1)
+		getopt_long(argc, argv, "husnfoVip", longopts, NULL)) != -1)
 		switch (ch) {
 		case 'h':
 			header = 0;
@@ -711,6 +726,10 @@ int main(int argc, char **argv)
 		case 's':
 			longform = 0;
 			break;
+		case 'n':
+			longform = 2;
+			header = 0;
+			break;
 		case 'f':
 			from = !from;
 			break;
openSUSE Build Service is sponsored by