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-09-12 12:03:09.111689620 +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-09-12 12:06:20.612256361 +0000
@@ -220,7 +220,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 {
@@ -513,7 +514,7 @@ static void showinfo(
             const char *session, const char *name,
 #endif
             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,
             const int pids)
 {
     unsigned long long jcpu, pcpu;
@@ -576,7 +577,19 @@ static void showinfo(
     uname[UT_NAMESIZE] = '\0';
 
     if (formtype) {
-        printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, tty + 5);
+        int utlnlen = 8;
+        if (formtype > 1) {
+            userlen = strnlen(uname, UT_NAMESIZE);
+            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 (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
         if (session) {
             uint64_t ltime;
@@ -658,6 +671,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);
@@ -696,6 +710,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'},
@@ -718,7 +733,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;
@@ -726,6 +741,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