diff --git a/79042e07.patch b/79042e07.patch
new file mode 100644
index 0000000..32719bd
--- /dev/null
+++ b/79042e07.patch
@@ -0,0 +1,176 @@
+From 79042e07fab9956135a21b1df7a69d1fbde7ef79 Mon Sep 17 00:00:00 2001
+From: Craig Small <csmall@dropbear.xyz>
+Date: Tue, 12 Sep 2023 16:59:18 +1000
+Subject: [PATCH] ps: Don't crash when using short option
+
+ps would crash with the -si or -sf options with systemd enabled.
+The issue was the utmp wasn't filled in, the long option checked, the
+short option did not.
+
+Refactored the showinfo() function so instead of a branch with duplicate
+prints for the items in both long and short we just branch on the items
+for long output.
+
+Also, made the function prototypes not dependendent on systemd enabled,
+it was too messy that way and passing a char* NULL is not really going
+to hurt anything.
+
+References:
+ #301
+
+Signed-off-by: Craig Small <csmall@dropbear.xyz>
+---
+ NEWS    |  1 +
+ src/w.c | 61 ++++++++++++++++++++-------------------------------------
+ 2 files changed, 22 insertions(+), 40 deletions(-)
+
+|diff --git a/NEWS b/NEWS
+|index 4ad9f74e..883f9139 100644
+|--- a/NEWS
+|+++ b/NEWS
+|@@ -1,5 +1,6 @@
+| procps-ng-NEXT
+| ---------------
+|+  * w: Don't segfault with -s option                       issue #301
+| 
+| procps-ng-4.0.4
+| ---------------
+diff --git a/src/w.c b/src/w.c
+index fd6e75f7..e2d754b5 100644
+--- a/src/w.c
++++ b/src/w.c
+@@ -207,9 +207,7 @@ static void print_display_or_interface(const char *restrict host, int len, int r
+ 
+ /* This routine prints either the hostname or the IP address of the remote */
+ static void print_from(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+ 		       const char *session,
+-#endif
+ 		       const utmp_t *restrict const u, const int ip_addresses, const int fromlen) {
+ #if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+         if (session) {
+@@ -508,11 +506,10 @@ static int find_best_proc(
+ #undef PIDS_GETSTR
+ }
+ 
++
+ static void showinfo(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+             const char *session, const char *name,
+-#endif
+-            utmp_t * u, int formtype, int maxcmd, int from,
++            utmp_t * u, const int longform, int maxcmd, int from,
+             const int userlen, const int fromlen, const int ip_addresses,
+             const int pids)
+ {
+@@ -575,25 +572,20 @@ static void showinfo(
+     /* force NUL term for printf */
+     uname[UT_NAMESIZE] = '\0';
+ 
+-    if (formtype) {
+-        printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, tty + 5);
++    printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, tty + 5);
++    if (from)
++        print_from(session, NULL, ip_addresses, fromlen);
++
++    /* login time */
++    if (longform) {
+ #if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+         if (session) {
+             uint64_t ltime;
+ 
+-            if (from)
+-              print_from(session, NULL, ip_addresses, fromlen);
+-
+             sd_session_get_start_time(session, &ltime);
+             print_logintime(ltime/((uint64_t) 1000000ULL), stdout);
+         } else {
+ #endif
+-            if (from)
+-                print_from(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+-			   NULL,
+-#endif
+-			   u, ip_addresses, fromlen);
+ 
+ #ifdef HAVE_UTMPX_H
+             print_logintime(u->ut_tv.tv_sec, stdout);
+@@ -603,11 +595,16 @@ static void showinfo(
+ #if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+         }
+ #endif
+-        if (u && *u->ut_line == ':')
+-            /* idle unknown for xdm logins */
+-            printf(" ?xdm? ");
+-        else
+-            print_time_ival7(idletime(tty), 0, stdout);
++    }
++    /* idle */
++    if (u && *u->ut_line == ':')
++        /* idle unknown for xdm logins */
++        printf(" ?xdm? ");
++    else
++        print_time_ival7(idletime(tty), 0, stdout);
++
++    /* jpcpu/pcpu */
++    if (longform) {
+         print_time_ival7(jcpu / hertz, (jcpu % hertz) * (100. / hertz),
+                  stdout);
+         if (pcpu > 0)
+@@ -616,20 +613,8 @@ static void showinfo(
+                              stdout);
+         else
+             printf("   ?   ");
+-    } else {
+-        printf("%-*.*s%-9.8s", userlen + 1, userlen, uname, tty + 5);
+-        if (from)
+-	    print_from(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+-		       NULL,
+-#endif
+-		       u, ip_addresses, fromlen);
+-        if (u && *u->ut_line == ':')
+-            /* idle unknown for xdm logins */
+-            printf(" ?xdm? ");
+-        else
+-            print_time_ival7(idletime(tty), 0, stdout);
+     }
++    /* what */
+     if (pids) {
+         pid_t ut_pid = -1;
+         if (u)
+@@ -798,9 +783,9 @@ int main(int argc, char **argv)
+ 		 * headers. Try to keep alignment intact.  */
+ 		printf(_("%-*s TTY      "), userlen, _("USER"));
+ 		if (from)
+-			printf("%-*s", fromlen - 1, _("FROM"));
++			printf("%-*s", fromlen, _("FROM"));
+ 		if (longform)
+-			printf(_("  LOGIN@   IDLE   JCPU   PCPU WHAT\n"));
++			printf(_(" LOGIN@   IDLE   JCPU   PCPU  WHAT\n"));
+ 		else
+ 			printf(_("   IDLE WHAT\n"));
+ 	}
+@@ -857,9 +842,7 @@ int main(int argc, char **argv)
+ 				continue;
+ 			if (!strncmp(u->ut_user, user, UT_NAMESIZE))
+ 				showinfo(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+ 					 NULL, NULL,
+-#endif
+ 					 u, longform, maxcmd, from, userlen,
+ 					 fromlen, ip_addresses, pids);
+ 		}
+@@ -876,9 +859,7 @@ int main(int argc, char **argv)
+ 				continue;
+ 			if (*u->ut_user)
+ 				showinfo(
+-#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
+ 					 NULL, NULL,
+-#endif
+ 					 u, longform, maxcmd, from, userlen,
+ 					 fromlen, ip_addresses, pids);
+ 		}
+-- 
+GitLab
+
diff --git a/CVE-2023-4016.patch b/CVE-2023-4016.patch
deleted file mode 100644
index 1124fe4..0000000
--- a/CVE-2023-4016.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 2c933ecba3bb1d3041a5a7a53a7b4078a6003413 Mon Sep 17 00:00:00 2001
-From: Craig Small <csmall@dropbear.xyz>
-Date: Thu, 10 Aug 2023 21:18:38 +1000
-Subject: [PATCH] ps: Fix possible buffer overflow in -C option
-
-ps allocates memory using malloc(length of arg * len of struct).
-In certain strange circumstances, the arg length could be very large
-and the multiplecation will overflow, allocating a small amount of
-memory.
-
-Subsequent strncpy() will then write into unallocated memory.
-The fix is to use calloc. It's slower but this is a one-time
-allocation. Other malloc(x * y) calls have also been replaced
-by calloc(x, y)
-
-References:
- https://www.freelists.org/post/procps/ps-buffer-overflow-CVE-20234016
- https://nvd.nist.gov/vuln/detail/CVE-2023-4016
- https://gitlab.com/procps-ng/procps/-/issues/297
- https://bugs.debian.org/1042887
-
-Signed-off-by: Craig Small <csmall@dropbear.xyz>
----
- ps/parser.c |   24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
-
---- ps/parser.c
-+++ ps/parser.c	2023-08-15 12:19:13.375422122 +0000
-@@ -183,8 +183,7 @@ static const char *parse_list(const char
-   int need_item;
-   const char *err;       /* error code that could or did happen */
-   /*** prepare to operate ***/
--  node = malloc(sizeof(selection_node));
--  node->u = malloc(strlen(arg)*sizeof(sel_union)); /* waste is insignificant */
-+  node = xmalloc(sizeof(selection_node));
-   node->n = 0;
-   buf = strdup(arg);
-   /*** sanity check and count items ***/
-@@ -205,6 +204,7 @@ static const char *parse_list(const char
-   } while (*++walk);
-   if(need_item) goto parse_error;
-   node->n = items;
-+  node->u = xcalloc(items*sizeof(sel_union));
-   /*** actually parse the list ***/
-   walk = buf;
-   while(items--){
-@@ -569,8 +569,8 @@ static const char *parse_bsd_option(void
-       /* put our tty on a tiny list */
-       {
-         selection_node *node;
--        node = malloc(sizeof(selection_node));
--        node->u = malloc(sizeof(sel_union));
-+        node = xmalloc(sizeof(selection_node));
-+        node->u = xmalloc(sizeof(sel_union));
-         node->u[0].tty = cached_tty;
-         node->typecode = SEL_TTY;
-         node->n = 1;
-@@ -706,8 +706,8 @@ static const char *parse_bsd_option(void
-       if(!arg){
-         /* Wow, obsolete BSD syntax. Put our tty on a tiny list. */
-         selection_node *node;
--        node = malloc(sizeof(selection_node));
--        node->u = malloc(sizeof(sel_union));
-+        node = xmalloc(sizeof(selection_node));
-+        node->u = xmalloc(sizeof(sel_union));
-         node->u[0].tty = cached_tty;
-         node->typecode = SEL_TTY;
-         node->n = 1;
-@@ -1030,16 +1030,16 @@ static const char *parse_trailing_pids(v
-   argp = ps_argv + thisarg;
-   thisarg = ps_argc - 1;   /* we must be at the end now */
- 
--  pidnode = malloc(sizeof(selection_node));
--  pidnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  pidnode = xmalloc(sizeof(selection_node));
-+  pidnode->u = xcalloc(i*sizeof(sel_union)); /* waste is insignificant */
-   pidnode->n = 0;
- 
--  grpnode = malloc(sizeof(selection_node));
--  grpnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  grpnode = xmalloc(sizeof(selection_node));
-+  grpnode->u = xcalloc(i*sizeof(sel_union)); /* waste is insignificant */
-   grpnode->n = 0;
- 
--  sidnode = malloc(sizeof(selection_node));
--  sidnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  sidnode = xmalloc(sizeof(selection_node));
-+  sidnode->u = xcalloc(i*sizeof(sel_union)); /* waste is insignificant */
-   sidnode->n = 0;
- 
-   while(i--){
---- proc/libprocps.sym
-+++ proc/libprocps.sym	2023-08-15 12:43:18.905661726 +0000
-@@ -67,6 +67,8 @@ global:
- 	unix_print_signals;
- 	uptime;
- 	xalloc_err_handler;
-+	xcalloc;
-+	xmalloc;
- local:
- 	*;
- };
diff --git a/bsc1195468-23da4f40.patch b/bsc1195468-23da4f40.patch
deleted file mode 100644
index d0f0102..0000000
--- a/bsc1195468-23da4f40.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 23da4f40ea27afe998e92ca317f2dcb48a6ffc1f Mon Sep 17 00:00:00 2001
-From: Tommi Rantala <tommi.t.rantala@nokia.com>
-Date: Mon, 11 Oct 2021 13:33:18 +0300
-Subject: [PATCH] ps: ignore SIGURG
-
-Stop registering signal handler for SIGURG, to avoid ps failure if
-someone sends such signal. Without the signal handler, SIGURG will
-just be ignored.
-
-  Signal 23 (URG) caught by ps (3.3.16).
-  ps:ps/display.c:66: please report this bug
-
-https://man7.org/linux/man-pages/man7/signal.7.html
-https://www.freebsd.org/cgi/man.cgi?sektion=3&query=signal
----
- ps/display.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ps/display.c b/ps/display.c
-index 04803c3b..346e21a7 100644
---- a/ps/display.c
-+++ b/ps/display.c
-@@ -673,6 +673,7 @@ int main(int argc, char *argv[]){
-     case SIGKILL:  /* can not catch */
-     case SIGSTOP:  /* can not catch */
-     case SIGWINCH: /* don't care if window size changes */
-+    case SIGURG:   /* Urgent condition on socket (4.2BSD) */
-       ;
-     }
-   } while (0);
--- 
-GitLab
-
diff --git a/procps-3.3.17-bsc1181976.patch b/procps-3.3.17-bsc1181976.patch
deleted file mode 100644
index fcb2f74..0000000
--- a/procps-3.3.17-bsc1181976.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 3dd1661a3d91671ca6c977c2e514f47d807be79d Mon Sep 17 00:00:00 2001
-From: Craig Small <csmall@dropbear.xyz>
-Date: Mon, 29 Mar 2021 22:11:27 +1100
-Subject: [PATCH] docs: psr ps field is last run processor
-
-The ps.1 manpage incorrectly stated that psr field showed the
-processor the process was assigned to. However if the assignment
-has changed but the process has not run, then the field doesn't
-change.
-
-Some digging by @srikard showed it wasn't the processor assigned
-but the last one it was run on. The man page now correctly
-describes psr in that way.
-
-References:
- procps-ng/procps#187
----
- ps/ps.1 | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git ps/ps.1 ps/ps.1
-index 8678123..b433655 100644
---- ps/ps.1
-+++ ps/ps.1
-|@@ -4,7 +4,7 @@
-| .\" Quick hack conversion by Albert Cahalan, 1998.
-| .\" Licensed under version 2 of the Gnu General Public License.
-| .\"
-|-.TH PS "1" "2021-03-05" "procps-ng" "User Commands"
-|+.TH PS "1" "2021-03-29" "procps-ng" "User Commands"
-| .\"
-| .\" To render this page:
-| .\"    groff -t -b -man -X -P-resolution -P100 -Tps ps.1 &
-@@ -1518,7 +1518,7 @@ priority of the process.  Higher number means lower priority.
- T}
- 
- psr	PSR	T{
--processor that process is currently assigned to.
-+processor that process last executed on.
- T}
- 
- rgid	RGID	T{
--- 
-2.26.2
-
diff --git a/procps-3.3.17-ignore-sysctl_conf.patch b/procps-3.3.17-ignore-sysctl_conf.patch
deleted file mode 100644
index 4cfecee..0000000
--- a/procps-3.3.17-ignore-sysctl_conf.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- procps-3.3.17/sysctl.c.old	2021-02-09 11:11:25.000000000 +0100
-+++ procps-3.3.17/sysctl.c	2023-12-14 13:56:36.785976315 +0100
-@@ -546,6 +546,8 @@
- 		fp = (globbuf.gl_pathv[j][0] == '-' && !globbuf.gl_pathv[j][1])
- 		    ? stdin : fopen(globbuf.gl_pathv[j], "r");
- 		if (!fp) {
-+		        if (strcmp ("/usr/lib/sysctl.d/99-sysctl.conf", globbuf.gl_pathv[j]) == 0)
-+			        continue;
- 			xwarn(_("cannot open \"%s\""), globbuf.gl_pathv[j]);
- 			rc = -1;
- 			goto out;
diff --git a/procps-3.3.17-library-bsc1181475.patch b/procps-3.3.17-library-bsc1181475.patch
deleted file mode 100644
index 208638c..0000000
--- a/procps-3.3.17-library-bsc1181475.patch
+++ /dev/null
@@ -1,41 +0,0 @@
----
- free.1         |    2 +-
- proc/sysinfo.c |    9 +++++----
- 2 files changed, 6 insertions(+), 5 deletions(-)
-
---- free.1
-+++ free.1	2022-12-15 09:40:32.807087343 +0000
-@@ -19,7 +19,7 @@ columns are:
- Total installed memory (MemTotal and SwapTotal in /proc/meminfo)
- .TP
- \fBused\fR
--Used memory (calculated as \fBtotal\fR - \fBfree\fR - \fBbuffers\fR - \fBcache\fR)
-+Used memory (calculated as \fBtotal\fR - \fBavailable\fR)
- .TP
- \fBfree\fR
- Unused memory (MemFree and SwapFree in /proc/meminfo)
---- proc/sysinfo.c
-+++ proc/sysinfo.c	2022-06-22 11:29:39.240066488 +0000
-@@ -794,10 +794,6 @@ nextline:
-      where such values will be dramatically distorted over those of the host. */
-   if (kb_main_available > kb_main_total)
-     kb_main_available = kb_main_free;
--  mem_used = kb_main_total - kb_main_free - kb_main_cached - kb_main_buffers;
--  if (mem_used < 0)
--    mem_used = kb_main_total - kb_main_free;
--  kb_main_used = (unsigned long)mem_used;
- 
-   /* zero? might need fallback for 2.6.27 <= kernel <? 3.14 */
-   if (!kb_main_available) {
-@@ -821,6 +817,11 @@ nextline:
-       kb_main_available = kb_main_free;
- #endif /* linux */
-   }
-+
-+  mem_used = kb_main_total - kb_main_available;
-+  if (mem_used < 0)
-+    mem_used = kb_main_total - kb_main_free;
-+  kb_main_used = (unsigned long)mem_used;
- }
- 
- /*****************************************************************/
diff --git a/procps-3.3.17-top-bsc1181475.patch b/procps-3.3.17-top-bsc1181475.patch
deleted file mode 100644
index 825f31b..0000000
--- a/procps-3.3.17-top-bsc1181475.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- top/top.1 |    4 ++--
- top/top.c |    6 ++++--
- 2 files changed, 6 insertions(+), 4 deletions(-)
-
---- top/top.1
-+++ top/top.1	2022-06-22 12:05:55.572154830 +0000
-@@ -565,8 +565,8 @@ visual graphs of those representations.
- 
- In the case of \*(MP, the percentage represents the \fBtotal\fR minus the estimated
- \fBavail\fR noted above.
--The `Mem' graph itself is divided between \fBused\fR and any remaining memory not
--otherwise accounted for by \fBavail\fR.
-+The `Mem' graph itself is divided between the non-cached portion of \fBused\fR and
-+any remaining memory not otherwise accounted for by \fBavail\fR.
- \*(XT 4b. SUMMARY AREA Commands and the `m' command for additional information
- on that special 4-way toggle.
- 
---- top/top.c
-+++ top/top.c	2022-06-22 12:03:17.911044097 +0000
-@@ -6086,12 +6086,14 @@ numa_nope:
-          char used[SMLBUFSIZ], util[SMLBUFSIZ], dual[MEDBUFSIZ];
-          float pct_used, pct_misc, pct_swap;
-          int ix, num_used, num_misc;
-+         unsigned long my_ulong;
- 
--         pct_used = (float)kb_main_used * (100.0 / (float)kb_main_total);
-+         my_ulong = kb_main_total - kb_main_buffers - kb_main_cached - kb_main_free;
-+         pct_used = (float)my_ulong * (100.0 / (float)kb_main_total);
- #ifdef MEMGRAPH_OLD
-          pct_misc = (float)(kb_main_buffers + kb_main_cached) * (100.0 / (float)kb_main_total);
- #else
--         pct_misc = (float)(kb_main_total - kb_main_available - kb_main_used) * (100.0 / (float)kb_main_total);
-+         pct_misc = (float)(kb_main_total - kb_main_available - my_ulong) * (100.0 / (float)kb_main_total);
- #endif
-          if (pct_used + pct_misc > 100.0 || pct_misc < 0) pct_misc = 0;
-          pct_swap = kb_swap_total ? (float)kb_swap_used * (100.0 / (float)kb_swap_total) : 0;
diff --git a/procps-ng-3.3.10-bnc634071_procstat2.diff b/procps-ng-3.3.10-bnc634071_procstat2.diff
deleted file mode 100644
index fbc178b..0000000
--- a/procps-ng-3.3.10-bnc634071_procstat2.diff
+++ /dev/null
@@ -1,61 +0,0 @@
----
- proc/libprocps.sym |    1 +
- proc/sysinfo.c     |   13 +++++++++++--
- proc/sysinfo.h     |    2 ++
- 3 files changed, 14 insertions(+), 2 deletions(-)
-
---- proc/libprocps.sym
-+++ proc/libprocps.sym	2018-04-04 11:30:51.841725161 +0000
-@@ -60,6 +60,7 @@ global:
- 	signal_name_to_number;
- 	signal_number_to_name;
- 	smp_num_cpus;
-+	__smp_num_cpus;
- 	sprint_uptime;
- 	strtosig;
- 	tty_to_dev;
---- proc/sysinfo.c
-+++ proc/sysinfo.c	2018-04-04 11:33:26.306886237 +0000
-@@ -47,7 +47,8 @@
- #endif
- #include <elf.h>
- 
--long smp_num_cpus;     /* number of CPUs */
-+#undef smp_num_cpus
-+long smp_num_cpus=-1;  /* number of CPUs */
- long page_bytes;       /* this architecture's page size */
- 
- #define BAD_OPEN_MESSAGE					\
-@@ -1166,7 +1167,11 @@ out:
- 
- ///////////////////////////////////////////////////////////////////////////
- 
--void cpuinfo (void) {
-+long __smp_num_cpus (void) {
-+
-+  if (smp_num_cpus != -1)
-+    return(smp_num_cpus);
-+
-   // ought to count CPUs in /proc/stat instead of relying
-   // on glibc, which foolishly tries to parse /proc/cpuinfo
-   // note: that may have been the case but now /proc/stat
-@@ -1181,4 +1186,8 @@ void cpuinfo (void) {
-   smp_num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
-   if (smp_num_cpus<1)        /* SPARC glibc is buggy */
-     smp_num_cpus=1;
-+
-+  return smp_num_cpus;
- }
-+
-+void cpuinfo (void) { (void)__smp_num_cpus(); }
---- proc/sysinfo.h
-+++ proc/sysinfo.h	2018-04-04 11:30:51.841725161 +0000
-@@ -8,6 +8,8 @@ EXTERN_C_BEGIN
- 
- extern unsigned long long Hertz;   /* clock tick frequency */
- extern long smp_num_cpus;          /* number of CPUs */
-+extern long __smp_num_cpus(void);
-+#define smp_num_cpus __smp_num_cpus()
- extern int have_privs;             /* boolean, true if setuid or similar */
- extern long page_bytes;            /* this architecture's bytes per page */
- 
diff --git a/procps-ng-3.3.10-errno.patch b/procps-ng-3.3.10-errno.patch
index 48c0aae..a8f1d2c 100644
--- a/procps-ng-3.3.10-errno.patch
+++ b/procps-ng-3.3.10-errno.patch
@@ -6,20 +6,20 @@ open("/usr/lib/locale/de_DE.utf8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = 3
 and this causes a problem later on (bsc#908516)
 
 ---
- free.c |    5 +++++
+ src/free.c |    5 +++++
  1 file changed, 5 insertions(+)
 
---- free.c
-+++ free.c	2018-04-04 12:47:06.360757839 +0000
-@@ -197,6 +197,7 @@ int main(int argc, char **argv)
- {
- 	int c, flags = 0, unit_set = 0;
+--- src/free.c
++++ src/free.c	2022-10-20 13:33:28.880818112 +0000
+@@ -208,6 +208,7 @@ int main(int argc, char **argv)
+ 	int c, flags = 0, unit_set = 0, rc = 0;
  	struct commandline_arguments args;
+ 	struct meminfo_info *mem_info = NULL;
 +	int errsv;
  
  	/*
  	 * For long options that have no equivalent short option, use a
-@@ -247,10 +248,12 @@ int main(int argc, char **argv)
+@@ -260,10 +261,12 @@ int main(int argc, char **argv)
  #ifdef HAVE_PROGRAM_INVOCATION_NAME
  	program_invocation_name = program_invocation_short_name;
  #endif
@@ -30,9 +30,9 @@ and this causes a problem later on (bsc#908516)
  	atexit(close_stdout);
 +	errno = errsv;
  
- 	while ((c = getopt_long(argc, argv, "bkmghltCc:ws:V", longopts, NULL)) != -1)
+ 	while ((c = getopt_long(argc, argv, "bkmghlLtvCc:ws:V", longopts, NULL)) != -1)
  		switch (c) {
-@@ -317,11 +320,13 @@ int main(int argc, char **argv)
+@@ -336,11 +339,13 @@ int main(int argc, char **argv)
  			break;
  		case 's':
  			flags |= FREE_REPEAT;
diff --git a/procps-ng-3.3.10-fdleak.dif b/procps-ng-3.3.10-fdleak.dif
deleted file mode 100644
index ee7d736..0000000
--- a/procps-ng-3.3.10-fdleak.dif
+++ /dev/null
@@ -1,38 +0,0 @@
----
- vmstat.c |    7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
---- vmstat.c
-+++ vmstat.c	2018-04-04 11:16:07.577968520 +0000
-@@ -40,6 +40,7 @@
- #include <string.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
-+#include <sys/stat.h>
- #include <termios.h>
- #include <unistd.h>
- #include <time.h>
-@@ -708,13 +709,12 @@ static void slabheader(void)
- 
- static void slabformat(void)
- {
--	FILE *fSlab;
-+	struct stat fSlab;
- 	struct slab_cache *slabs;
- 	unsigned long nSlab, i, j, k;
- 	const char format[] = "%-24s %6u %6u %6u %6u\n";
- 
--	fSlab = fopen("/proc/slabinfo", "rb");
--	if (!fSlab) {
-+	if (stat("/proc/slabinfo", &fSlab) < 0) {
- 		xwarnx(_("your kernel does not support slabinfo or your permissions are insufficient"));
- 		return;
- 	}
-@@ -746,7 +746,6 @@ static void slabformat(void)
- 		}
- 		free(slabs);
- 	}
--	fclose(fSlab);
- }
- 
- static void disksum_format(void)
diff --git a/procps-ng-3.3.10-integer-overflow.patch b/procps-ng-3.3.10-integer-overflow.patch
deleted file mode 100644
index d6482dd..0000000
--- a/procps-ng-3.3.10-integer-overflow.patch
+++ /dev/null
@@ -1,61 +0,0 @@
----
- free.c         |   19 ++++++++++++++++---
- proc/sysinfo.c |    5 ++++-
- 2 files changed, 20 insertions(+), 4 deletions(-)
-
---- free.c
-+++ free.c	2021-02-10 09:58:35.409695062 +0000
-@@ -134,7 +134,7 @@ static const char *scale_size(unsigned l
- 		if (args.exponent > 1) {
- 			/* In desired scale. */
- 			snprintf(buf, sizeof(buf), "%ld",
--                 (long int)((size * 1024.0) / power(base, args.exponent-1))
-+                 (long int)(((long long int)size * 1024) / power(base, args.exponent-1))
- 			    );
- 			return buf;
- 		}
-@@ -381,15 +381,28 @@ int main(int argc, char **argv)
- 		 * to print the high info, even if it is zero.
- 		 */
- 		if (flags & FREE_LOHI) {
-+			unsigned long kb_low_used;
-+			unsigned long kb_high_used;
-+
-+			if (kb_low_total > kb_low_free)
-+				kb_low_used = kb_low_total - kb_low_free;
-+			else
-+				kb_low_used = 0;
-+
-+			if (kb_high_total > kb_high_free)
-+				kb_high_used = kb_high_total - kb_high_free;
-+			else
-+				kb_high_used = 0;
-+
- 			printf("%-9s", _("Low:"));
- 			printf("%11s", scale_size(kb_low_total, flags, args));
--			printf(" %11s", scale_size(kb_low_total - kb_low_free, flags, args));
-+			printf(" %11s", scale_size(kb_low_used, flags, args));
- 			printf(" %11s", scale_size(kb_low_free, flags, args));
- 			printf("\n");
- 
- 			printf("%-9s", _("High:"));
- 			printf("%11s", scale_size(kb_high_total, flags, args));
--			printf(" %11s", scale_size(kb_high_total - kb_high_free, flags, args));
-+			printf(" %11s", scale_size(kb_high_used, flags, args));
- 			printf(" %11s", scale_size(kb_high_free, flags, args));
- 			printf("\n");
- 		}
---- proc/sysinfo.c
-+++ proc/sysinfo.c	2021-02-10 10:00:35.227385913 +0000
-@@ -783,7 +783,10 @@ nextline:
-   kb_main_cached = kb_page_cache + kb_slab_reclaimable;
-   if ((ev=getenv("PS_FULL_CACHE")))
-     kb_main_cached += kb_swap_cached + kb_nfs_unstable;
--  kb_swap_used = kb_swap_total - kb_swap_free;
-+  if (kb_swap_total > kb_swap_free)
-+    kb_swap_used = kb_swap_total - kb_swap_free;
-+  else
-+    kb_swap_used = 0;
- 
-   /* if kb_main_available is greater than kb_main_total or our calculation of
-      mem_used overflows, that's symptomatic of running within a lxc container
diff --git a/procps-ng-3.3.10-large_pcpu.patch b/procps-ng-3.3.10-large_pcpu.patch
deleted file mode 100644
index 2f344de..0000000
--- a/procps-ng-3.3.10-large_pcpu.patch
+++ /dev/null
@@ -1,19 +0,0 @@
----
- top/top.c |    6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
---- top/top.c
-+++ top/top.c	2018-04-04 12:09:16.087193018 +0000
-@@ -2404,7 +2404,11 @@ static void zap_fieldstab (void) {
-    Cpu_pmax = 99.9;
-    if (Rc.mode_irixps && smp_num_cpus > 1 && !Thread_mode) {
-       Cpu_pmax = 100.0 * smp_num_cpus;
--      if (smp_num_cpus > 10) {
-+      if (smp_num_cpus > 1000) {
-+	 if (Cpu_pmax > 9999999.0) Cpu_pmax = 9999999.0;
-+      } else if (smp_num_cpus > 100) {
-+	 if (Cpu_pmax > 999999.0) Cpu_pmax = 999999.0;
-+      } else if (smp_num_cpus > 10) {
-          if (Cpu_pmax > 99999.0) Cpu_pmax = 99999.0;
-       } else {
-          if (Cpu_pmax > 999.9) Cpu_pmax = 999.9;
diff --git a/procps-ng-3.3.10-slab.patch b/procps-ng-3.3.10-slab.patch
index e444d47..ef96155 100644
--- a/procps-ng-3.3.10-slab.patch
+++ b/procps-ng-3.3.10-slab.patch
@@ -1,13 +1,43 @@
 ---
- free.1         |    6 ++++++
- free.c         |    7 ++++++-
- proc/sysinfo.c |    4 ++++
- vmstat.c       |    6 +++++-
- 4 files changed, 21 insertions(+), 2 deletions(-)
+ library/meminfo.c |    7 ++++++-
+ man/free.1        |    6 ++++++
+ src/free.c        |    7 ++++++-
+ src/vmstat.c      |    7 ++++++-
+ 4 files changed, 24 insertions(+), 3 deletions(-)
 
---- free.1
-+++ free.1	2019-12-11 06:20:16.659772479 +0000
-@@ -100,6 +100,12 @@ Switch to the wide mode. The wide mode p
+--- library/meminfo.c
++++ library/meminfo.c	2023-09-12 12:08:41.033738450 +0000
+@@ -3,6 +3,7 @@
+  *
+  * Copyright © 2015-2023 Jim Warner <james.warner@comcast.net>
+  * Copyright © 2015-2023 Craig Small <csmall@dropbear.xyz>
++ * Copyright © 2008 Bart Van Assche.
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -640,6 +641,7 @@ static int meminfo_read_failed (
+     int size;
+     unsigned long *valptr;
+     signed long mem_used;
++    const char *ev;
+ 
+     // remember history from last time around
+     memcpy(&info->hist.old, &info->hist.new, sizeof(struct meminfo_data));
+@@ -692,7 +694,10 @@ static int meminfo_read_failed (
+ 
+     if (0 == mHr(MemAvailable))
+         mHr(MemAvailable) = mHr(MemFree);
+-    mHr(derived_mem_cached) = mHr(Cached) + mHr(SReclaimable);
++    if ((ev=getenv("PS_FULL_CACHE")))
++	mHr(derived_mem_cached) = mHr(Cached) + mHr(SReclaimable) + mHr(NFS_Unstable);
++    else
++	mHr(derived_mem_cached) = mHr(Cached) + mHr(SReclaimable);
+ 
+     /* if 'available' is greater than 'total' or our calculation of mem_used
+        overflows, that's symptomatic of running within a lxc container where
+--- man/free.1
++++ man/free.1	2023-09-12 12:08:41.029738522 +0000
+@@ -110,6 +110,12 @@ Switch to the wide mode. The wide mode p
  than 80 characters. In this mode \fBbuffers\fR and \fBcache\fR
  are reported in two separate columns.
  .TP
@@ -20,34 +50,34 @@
  \fB\-c\fR, \fB\-\-count\fR \fIcount\fR
  Display the result
  .I count
---- free.c
-+++ free.c	2019-12-11 06:20:16.659772479 +0000
-@@ -90,6 +90,7 @@ static void __attribute__ ((__noreturn__
- 	fputs(_(" -t, --total         show total for RAM + swap\n"), out);
+--- src/free.c
++++ src/free.c	2023-09-12 12:10:26.647842455 +0000
+@@ -92,6 +92,7 @@ static void __attribute__ ((__noreturn__
+ 	fputs(_(" -v, --committed     show committed memory and commit limit\n"), out);
  	fputs(_(" -s N, --seconds N   repeat printing every N seconds\n"), out);
  	fputs(_(" -c N, --count N     repeat printing N times, then exit\n"), out);
 +	fputs(_(" -C, --full-cache    add further cache lines to main cache\n"), out);
  	fputs(_(" -w, --wide          wide output\n"), out);
  	fputs(USAGE_SEPARATOR, out);
  	fputs(_("     --help     display this help and exit\n"), out);
-@@ -231,6 +232,7 @@ int main(int argc, char **argv)
- 		{  "total",	no_argument,	    NULL,  't'		},
+@@ -244,6 +245,7 @@ int main(int argc, char **argv)
+ 		{  "committed",	no_argument,	    NULL,  'v'		},
  		{  "seconds",	required_argument,  NULL,  's'		},
  		{  "count",	required_argument,  NULL,  'c'		},
-+		{  "full-cache",required_argument,  NULL,  HELP_OPTION	},
++		{  "full-cache",no_argument,        NULL,  'C'		},
  		{  "wide",	no_argument,	    NULL,  'w'		},
  		{  "help",	no_argument,	    NULL,  HELP_OPTION	},
  		{  "version",	no_argument,	    NULL,  'V'		},
-@@ -250,7 +252,7 @@ int main(int argc, char **argv)
+@@ -263,7 +265,7 @@ int main(int argc, char **argv)
  	textdomain(PACKAGE);
  	atexit(close_stdout);
  
--	while ((c = getopt_long(argc, argv, "bkmghltc:ws:V", longopts, NULL)) != -1)
-+	while ((c = getopt_long(argc, argv, "bkmghltCc:ws:V", longopts, NULL)) != -1)
+-	while ((c = getopt_long(argc, argv, "bkmghlLtvc:ws:V", longopts, NULL)) != -1)
++	while ((c = getopt_long(argc, argv, "bkmghlLtvCc:ws:V", longopts, NULL)) != -1)
  		switch (c) {
  		case 'b':
  		        check_unit_set(&unit_set);
-@@ -333,6 +335,9 @@ int main(int argc, char **argv)
+@@ -352,6 +354,9 @@ int main(int argc, char **argv)
  		case 'w':
  			flags |= FREE_WIDE;
  			break;
@@ -57,59 +87,40 @@
  		case HELP_OPTION:
  			usage(stdout);
  		case 'V':
---- proc/sysinfo.c
-+++ proc/sysinfo.c	2019-12-11 06:20:16.659772479 +0000
-@@ -3,6 +3,7 @@
-  * Copyright (C) 1992-1998 by Michael K. Johnson, johnsonm@redhat.com
-  * Copyright 1998-2003 Albert Cahalan
-  * June 2003, Fabian Frederick, disk and slab info
-+ * Copyright (c) 2008 Bart Van Assche.
-  *
-  * This library is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-@@ -700,6 +701,7 @@ void meminfo(void){
-   int linux_version_code = procps_linux_version();
-   mem_table_struct findme = { namebuf, NULL};
-   mem_table_struct *found;
-+  const char *ev;
-   char *head;
-   char *tail;
-   static const mem_table_struct mem_table[] = {
-@@ -779,6 +781,8 @@ nextline:
-     kb_inactive = kb_inact_dirty + kb_inact_clean + kb_inact_laundry;
-   }
-   kb_main_cached = kb_page_cache + kb_slab_reclaimable;
-+  if ((ev=getenv("PS_FULL_CACHE")))
-+    kb_main_cached += kb_swap_cached + kb_nfs_unstable;
-   kb_swap_used = kb_swap_total - kb_swap_free;
+--- src/vmstat.c
++++ src/vmstat.c	2023-09-12 12:08:41.033738450 +0000
+@@ -230,6 +230,7 @@ static void __attribute__ ((__noreturn__
+     fputs(_(" -p, --partition <dev>  partition specific statistics\n"), out);
+     fputs(_(" -S, --unit <char>      define display unit\n"), out);
+     fputs(_(" -w, --wide             wide output\n"), out);
++    fputs(_(" -C, --full-cache       add further cache lines to main cache\n"), out);
+     fputs(_(" -t, --timestamp        show timestamp\n"), out);
+     fputs(_(" -y, --no-first         skips first line of output\n"), out);
+     fputs(USAGE_SEPARATOR, out);
+@@ -951,6 +952,7 @@ int main(int argc, char *argv[])
+         {"partition", required_argument, NULL, 'p'},
+         {"unit", required_argument, NULL, 'S'},
+         {"wide", no_argument, NULL, 'w'},
++        {"full-cache", no_argument, NULL, 'C'},
+         {"timestamp", no_argument, NULL, 't'},
+         {"help", no_argument, NULL, 'h'},
+         {"version", no_argument, NULL, 'V'},
+@@ -967,7 +969,7 @@ int main(int argc, char *argv[])
+     atexit(close_stdout);
  
-   /* if kb_main_available is greater than kb_main_total or our calculation of
---- vmstat.c
-+++ vmstat.c	2019-12-11 06:22:44.716984764 +0000
-@@ -103,6 +103,7 @@ static void __attribute__ ((__noreturn__
- 	fputs(_(" -p, --partition <dev>  partition specific statistics\n"), out);
- 	fputs(_(" -S, --unit <char>      define display unit\n"), out);
- 	fputs(_(" -w, --wide             wide output\n"), out);
-+	fputs(_(" -C, --full-cache       add further cache lines to main cache\n"), out);
- 	fputs(_(" -t, --timestamp        show timestamp\n"), out);
- 	fputs(USAGE_SEPARATOR, out);
- 	fputs(USAGE_HELP, out);
-@@ -899,7 +900,7 @@ int main(int argc, char *argv[])
- 	atexit(close_stdout);
- 
- 	while ((c =
--		getopt_long(argc, argv, "afmnsdDp:S:wthV", longopts,
-+		getopt_long(argc, argv, "aCfmnsdDp:S:wthV", longopts,
- 			    NULL)) != -1)
- 		switch (c) {
- 		case 'V':
-@@ -968,6 +969,9 @@ int main(int argc, char *argv[])
- 		case 't':
- 			t_option = 1;
- 			break;
-+		case 'C':
-+			setenv("PS_FULL_CACHE", "yes", 1);
-+			break;
- 		default:
- 			/* no other aguments defined yet. */
- 			usage(stderr);
+     while ((c =
+-        getopt_long(argc, argv, "afmnsdDp:S:wthVy", longopts, NULL)) != -1)
++        getopt_long(argc, argv, "aCfmnsdDp:S:wthVy", longopts, NULL)) != -1)
+         switch (c) {
+         case 'V':
+             printf(PROCPS_NG_VERSION);
+@@ -1034,6 +1036,9 @@ int main(int argc, char *argv[])
+         case 't':
+             t_option = 1;
+             break;
++	case 'C':
++	    setenv("PS_FULL_CACHE", "yes", 1);
++	    break;
+         case 'y':
+             /* Don't display stats since system restart */
+             y_option = 1;
diff --git a/procps-ng-3.3.10-xen.dif b/procps-ng-3.3.10-xen.dif
index 7babd2d..562ab8d 100644
--- a/procps-ng-3.3.10-xen.dif
+++ b/procps-ng-3.3.10-xen.dif
@@ -1,29 +1,33 @@
---- vmstat.c
-+++ vmstat.c	2015-01-27 14:57:19.467491788 +0000
-@@ -295,7 +295,7 @@ static void new_format(void)
- 	unsigned int intr[2], ctxt[2];
- 	unsigned int sleep_half;
- 	unsigned long kb_per_page = sysconf(_SC_PAGESIZE) / 1024ul;
--	int debt = 0;		/* handle idle ticks running backwards */
-+	long long debt = 0;		/* handle idle ticks running backwards */
- 	struct tm *tm_ptr;
- 	time_t the_time;
- 	char timebuf[32];
-@@ -386,12 +386,12 @@ static void new_format(void)
+---
+ vmstat.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- src/vmstat.c
++++ src/vmstat.c	2022-03-29 09:21:41.156855432 +0000
+@@ -357,7 +357,7 @@ static void new_format(void)
+     unsigned long pgpgin[2], pgpgout[2], pswpin[2] = {0,0}, pswpout[2];
+     unsigned int sleep_half;
+     unsigned long kb_per_page = sysconf(_SC_PAGESIZE) / 1024ul;
+-    int debt = 0;        /* handle idle ticks running backwards */
++    long long debt = 0;      /* handle idle ticks running backwards */
+     struct tm *tm_ptr;
+     time_t the_time;
+     char timebuf[32];
+@@ -484,12 +484,12 @@ static void new_format(void)
  
- 		/* idle can run backwards for a moment -- kernel "feature" */
- 		if (debt) {
--			didl = (int)didl + debt;
--			debt = 0;
-+			didl = (long long)didl + debt;
-+			debt = 0LL;
- 		}
--		if ((int)didl < 0) {
--			debt = (int)didl;
--			didl = 0;
-+		if ((long long)didl < 0) {
-+			debt = (long long)didl;
-+			didl = 0ULL;
- 		}
+         /* idle can run backwards for a moment -- kernel "feature" */
+         if (debt) {
+-            cpu_idl = (int)cpu_idl + debt;
+-            debt = 0;
++            cpu_idl = cpu_idl + debt;
++            debt = 0LL;
+         }
+-        if ((int)cpu_idl < 0) {
+-            debt = (int)cpu_idl;
+-            cpu_idl = 0;
++        if (cpu_idl < 0) {
++            debt = cpu_idl;
++            cpu_idl = 0LL;
+         }
  
- 		Div = duse + dsys + didl + diow + dstl;
+         Div = cpu_use + cpu_sys + cpu_idl + cpu_iow + cpu_sto;
diff --git a/procps-ng-3.3.11-pmap4suse.patch b/procps-ng-3.3.11-pmap4suse.patch
index efcaffa..f22992d 100644
--- a/procps-ng-3.3.11-pmap4suse.patch
+++ b/procps-ng-3.3.11-pmap4suse.patch
@@ -1,11 +1,11 @@
 ---
- pmap.c                       |   47 ++++++++++++++++++++++++++++++++-----------
+ src/pmap.c                   |   47 ++++++++++++++++++++++++++++++++-----------
  testsuite/pmap.test/pmap.exp |   17 +++++++--------
  2 files changed, 44 insertions(+), 20 deletions(-)
 
---- pmap.c
-+++ pmap.c	2018-06-05 09:37:34.404294888 +0000
-@@ -49,7 +49,9 @@ const char *nls_Address,
+--- src/pmap.c
++++ src/pmap.c	2023-09-12 12:23:39.537610124 +0000
+@@ -59,7 +59,9 @@ const char *nls_Address,
  	   *nls_Kbytes,
  	   *nls_Mode,
  	   *nls_RSS,
@@ -16,7 +16,7 @@
  
  static void nls_initialize(void)
  {
-@@ -73,7 +75,9 @@ static void nls_initialize(void)
+@@ -83,7 +85,9 @@ static void nls_initialize(void)
  	nls_Kbytes  = _("Kbytes");
  	nls_Mode    = _("Mode");
  	nls_RSS     = _("RSS");
@@ -26,20 +26,20 @@
  }
  
  static int justify_print(const char *str, int width, int right)
-@@ -141,10 +145,10 @@ static int d_option;
- static int n_option;
- static int N_option;
- static int q_option;
--static int x_option;
+@@ -150,10 +154,10 @@ static int d_option = 0;
+ static int n_option = 0;
+ static int N_option = 0;
+ static int q_option = 0;
+-static int x_option = 0;
 +static int x_option = 1;
- static int X_option;
+ static int X_option = 0;
  
 -static int map_desc_showpath;
 +static int map_desc_showpath = 1;
  
  static unsigned shm_minor = ~0u;
  
-@@ -522,12 +526,17 @@ static int one_proc(const proc_t * p)
+@@ -544,12 +548,17 @@ static int one_proc (struct pids_stack *
  	char perms[32] = "";
  	const char *cp2 = NULL;
  	unsigned long long rss = 0ull;
@@ -55,12 +55,12 @@
  	int maxw1=0, maxw2=0, maxw3=0, maxw4=0, maxw5=0;
 +	int maxw6=0, maxw7=0;
  
- 	/* Overkill, but who knows what is proper? The "w" prog uses
- 	 * the tty width to determine this.
-@@ -557,13 +566,15 @@ static int one_proc(const proc_t * p)
+ 	printf("%u:   %s\n", PIDS_VAL(tgid, s_int, p, Pids_info), PIDS_VAL(cmdline, str, p, Pids_info));
+ 
+@@ -572,13 +581,15 @@ static int one_proc (struct pids_stack *
  	if (x_option) {
  		maxw1 = 16;
- 		if (sizeof(KLONG) == 4) maxw1 = 8;
+ 		if (sizeof(long) == 4) maxw1 = 8;
 -		maxw2 = maxw3 = maxw4 = 7;
 +		maxw2 = maxw3 = maxw4 = maxw6 = maxw7 = 7;
  		maxw5 = 5;
@@ -74,7 +74,7 @@
  			maxw5 = justify_print(nls_Mode, maxw5, 0);
  			justify_print(nls_Mapping, 0, 0);
  		}
-@@ -603,6 +614,11 @@ static int one_proc(const proc_t * p)
+@@ -618,6 +629,11 @@ static int one_proc (struct pids_stack *
  					total_rss += smap_value;
  					continue;
  				}
@@ -86,29 +86,30 @@
  				if (strcmp("Shared_Dirty", smap_key) == 0) {
  					shared_dirty = smap_value;
  					total_shared_dirty += smap_value;
-@@ -615,15 +631,19 @@ static int one_proc(const proc_t * p)
+@@ -630,16 +646,20 @@ static int one_proc (struct pids_stack *
  				}
  				if (strcmp("Swap", smap_key) == 0) {
  					/* doesn't matter as long as last */
--					if (cp2) printf("%0*" KLF "x %*lu %*llu %*llu %*s %s\n",
 +					swap = smap_value;
 +					total_swap += smap_value;
-+					if (cp2) printf("%0*" KLF "x %*lu %*llu %*llu %*llu %*llu %*s %s\n",
- 					       maxw1, start,
- 					       maxw2, (unsigned long)(diff >> 10),
- 					       maxw3, rss,
-+					       maxw6, pss,
- 					       maxw4, (private_dirty + shared_dirty),
-+					       maxw7, swap,
- 					       maxw5, perms,
- 					       cp2);
+ 					if (cp2)
+-                        printf("%0*lx %*lu %*llu %*llu %*s %s\n",
++                        printf("%0*lx %*lu %*llu %*llu %*llu %*llu %*s %s\n",
+                                maxw1, start_To_Avoid_Warning,
+                                maxw2, (unsigned long)(diff >> 10),
+                                maxw3, rss,
++                               maxw6, pss,
+                                maxw4, (private_dirty + shared_dirty),
++                               maxw7, swap,
+                                maxw5, perms,
+                                cp2);
  					/* reset some counters */
 -					rss = shared_dirty = private_dirty = 0ull;
 +					rss = pss = shared_dirty = private_dirty = swap = 0ull;
- 					start = diff = end = 0;
- 					perms[0] = '\0';
- 					cp2 = NULL;
-@@ -656,7 +676,6 @@ static int one_proc(const proc_t * p)
+                     diff = end = 0;
+                     perms[0] = '\0';
+                     cp2 = NULL;
+@@ -673,7 +693,6 @@ static int one_proc (struct pids_stack *
  		if (perms[3] == 's')
  			total_shared += diff;
  		if (perms[3] == 'p') {
@@ -116,7 +117,7 @@
  			if (perms[1] == 'w')
  				total_private_writeable += diff;
  			else
-@@ -708,17 +727,21 @@ static int one_proc(const proc_t * p)
+@@ -725,17 +744,21 @@ static int one_proc (struct pids_stack *
  				justify_print("----------------", maxw1, 0);
  			justify_print("-------", maxw2, 1);
  			justify_print("-------", maxw3, 1);
@@ -140,7 +141,7 @@
  		}
  		if (d_option) {
  			printf
-@@ -1028,16 +1051,18 @@ int main(int argc, char **argv)
+@@ -1052,16 +1075,18 @@ int main(int argc, char **argv)
  	while ((c = getopt_long(argc, argv, "xXrdqA:hVcC:nN:p", longopts, NULL)) != -1)
  		switch (c) {
  		case 'x':
@@ -162,7 +163,7 @@
  		case 'q':
  			q_option = 1;
 --- testsuite/pmap.test/pmap.exp
-+++ testsuite/pmap.test/pmap.exp	2018-06-05 09:23:53.955370363 +0000
++++ testsuite/pmap.test/pmap.exp	2023-09-12 12:25:22.375764402 +0000
 @@ -8,16 +8,16 @@ set pmap_procname "${mypid}:\\s+\\S+\[^\
  set pmap_initname "1:\\s+\\S+\[^\\r\]+\\s+"
  set pmap_std_header $pmap_procname
@@ -205,12 +206,12 @@
  set test "pmap device output quiet (dq)"
  spawn $pmap -dq $mypid
  expect_table $test $pmap_procname $pmap_device_items "\$"
-@@ -47,7 +46,7 @@ expect_table $test $pmap_procname $pmap_
+@@ -50,7 +49,7 @@ if  { [ file readable "/proc/self/smaps"
+ } else {
+     set test "pmap extended output"
+     spawn $pmap -x $mypid
+-    expect_table $test $pmap_ext_header $pmap_ext_items $pmap_ext_footer
++    expect_table $test $pmap_std_header $pmap_std_items $pmap_std_footer
  
- set test "pmap extended output"
- spawn $pmap -x $mypid
--expect_table $test $pmap_ext_header $pmap_ext_items $pmap_ext_footer
-+expect_table $test $pmap_std_header $pmap_std_items $pmap_std_footer
- 
- # -X and -XX have no real format as its dependent on smaps
- set test "pmap extra extended output"
+     # -X and -XX have no real format as its dependent on smaps
+     set test "pmap extra extended output"
diff --git a/procps-ng-3.3.17-logind.patch b/procps-ng-3.3.17-logind.patch
deleted file mode 100644
index bed9e0f..0000000
--- a/procps-ng-3.3.17-logind.patch
+++ /dev/null
@@ -1,407 +0,0 @@
-diff -ur procps-3.3.17/configure.ac procps-3.3.17-no-utmp/configure.ac
---- procps-3.3.17/configure.ac	2023-10-27 17:02:55.230522174 +0200
-+++ procps-3.3.17-no-utmp/configure.ac	2023-10-27 17:05:56.027565296 +0200
-@@ -214,6 +214,13 @@
- AS_IF([test "x$with_systemd" != "xno"], [
-   PKG_CHECK_MODULES([SYSTEMD], [libsystemd])
-   AC_DEFINE(WITH_SYSTEMD, 1, [enable systemd support])
-+
-+  # The functions needed to replace utmp with logind are only available
-+  # with systemd v254 or later.
-+  old_LIBS="$LIBS"
-+  LIBS="$LIBS $SYSTEMD_LIBS"
-+  AC_CHECK_FUNCS([sd_session_get_leader])
-+  LIBS="$old_LIBS"
- ])
- AM_CONDITIONAL([WITH_SYSTEMD], [test x$with_systemd != xno])
- 
-diff -ur procps-3.3.17/proc/whattime.c procps-3.3.17-no-utmp/proc/whattime.c
---- procps-3.3.17/proc/whattime.c	2021-02-09 11:11:25.000000000 +0100
-+++ procps-3.3.17-no-utmp/proc/whattime.c	2023-10-27 17:05:56.027565296 +0200
-@@ -38,6 +38,15 @@
- #include "whattime.h"
- #include "sysinfo.h"
- 
-+#ifdef WITH_SYSTEMD
-+#include <systemd/sd-daemon.h>
-+#include <systemd/sd-login.h>
-+#endif
-+#ifdef WITH_ELOGIND
-+#include <elogind/sd-daemon.h>
-+#include <elogind/sd-login.h>
-+#endif
-+
- static char buf[256];
- static double av[3];
- 
-@@ -98,6 +107,11 @@
- /* count the number of users */
- 
-     numuser = 0;
-+#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)
-+    if (sd_booted() > 0)
-+      numuser = sd_get_sessions(NULL);
-+    else {
-+#endif
-     setutent();
-     while ((utmpstruct = getutent())) {
-       if ((utmpstruct->ut_type == USER_PROCESS) &&
-@@ -105,6 +119,10 @@
-         numuser++;
-     }
-     endutent();
-+#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)
-+       }
-+#endif
-+
- 
-     pos += sprintf(buf + pos, "%2d user%s, ", numuser, numuser == 1 ? "" : "s");
- 
-Datei procps-3.3.17/screen.620TQo/23075..f05 ist ein Socket, während Datei procps-3.3.17-no-utmp/screen.620TQo/23075..f05 ein Socket ist.
-diff -ur procps-3.3.17/w.c procps-3.3.17-no-utmp/w.c
---- procps-3.3.17/w.c	2023-10-27 17:02:55.194521966 +0200
-+++ procps-3.3.17-no-utmp/w.c	2023-10-27 18:10:00.371042829 +0200
-@@ -56,11 +56,22 @@
- #include <time.h>
- #include <unistd.h>
- #ifdef HAVE_UTMPX_H
--#	include <utmpx.h>
-+#include <utmpx.h>
-+#ifndef HAVE_UT_HOSTSIZE_IN_UTMPX
-+#include <utmp.h>
-+#endif
- #else
- #	include <utmp.h>
- #endif
- #include <arpa/inet.h>
-+#ifdef WITH_SYSTEMD
-+#      include <systemd/sd-login.h>
-+#      include <systemd/sd-daemon.h>
-+#endif
-+#ifdef WITH_ELOGIND
-+#      include <elogind/sd-login.h>
-+#      include <elogind/sd-daemon.h>
-+#endif
- 
- static int ignoreuser = 0;	/* for '-u' */
- static int oldstyle = 0;	/* for '-o' */
-@@ -72,12 +83,6 @@
- typedef struct utmp utmp_t;
- #endif
- 
--#if !defined(UT_HOSTSIZE) || defined(__UT_HOSTSIZE)
--#	define UT_HOSTSIZE __UT_HOSTSIZE
--#	define UT_LINESIZE __UT_LINESIZE
--#	define UT_NAMESIZE __UT_NAMESIZE
--#endif
--
- #ifdef W_SHOWFROM
- # define FROM_STRING "on"
- #else
-@@ -198,7 +203,25 @@
- 
- 
- /* This routine prints either the hostname or the IP address of the remote */
--static void print_from(const utmp_t *restrict const u, const int ip_addresses, const int fromlen) {
-+static void print_from(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+		       const char *session,
-+#endif
-+		       const utmp_t *restrict const u, const int ip_addresses, const int fromlen) {
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+        if (session) {
-+	    char *host = NULL;
-+	    int r;
-+
-+	    r = sd_session_get_remote_host(session, &host);
-+	    if (r < 0 || host == NULL)
-+	        print_host("", 0, fromlen);
-+	    else {
-+	        print_host(host, strlen(host), fromlen == 0?strlen(host):fromlen);
-+		free(host);
-+	    }
-+	} else {
-+#endif
- 	char buf[fromlen + 1];
- 	char buf_ipv6[INET6_ADDRSTRLEN];
- 	int len;
-@@ -243,6 +266,9 @@
- #else
- 	print_host(u->ut_host, UT_HOSTSIZE, fromlen);
- #endif
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	}
-+#endif
- }
- 
- 
-@@ -341,7 +367,11 @@
-  * the user for that login session is doing currently. This the
-  * essential core of 'w'.
-  */
--static const proc_t *getproc(const utmp_t * restrict const u,
-+static const proc_t *getproc(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+			     const char *session,
-+#endif
-+			     const utmp_t * restrict const u,
- 			     const char *restrict const tty,
- 			     unsigned long long *restrict const jcpu,
- 			     int *restrict const found_utpid)
-@@ -351,9 +381,16 @@
- 	const proc_t *best = NULL;
- 	const proc_t *secondbest = NULL;
- 	unsigned uid = ~0U;
-+	pid_t ut_pid = -1;
- 
- 	*found_utpid = 0;
- 	if (!ignoreuser) {
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+        if (session) {
-+            if (sd_session_get_uid(session, &uid) < 0)
-+                return 0;
-+        } else {
-+#endif
- 		char buf[UT_NAMESIZE + 1];
- 		/* pointer to static data */
- 		struct passwd *passwd_data;
-@@ -364,12 +401,21 @@
- 			return NULL;
- 		uid = passwd_data->pw_uid;
- 		/* OK to have passwd_data go out of scope here */
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	}
-+#endif
- 	}
- 	line = tty_to_dev(tty);
- 	*jcpu = 0;
-+	if (u)
-+	  ut_pid = u->ut_pid;
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	else
-+	  sd_session_get_leader(session, &ut_pid);
-+#endif
- 	for (; *pptr; pptr++) {
--		const proc_t *restrict const tmp = *pptr;
--		if (unlikely(tmp->tgid == u->ut_pid)) {
-+	    const proc_t *restrict const tmp = *pptr;
-+	    if (unlikely(tmp->tgid == ut_pid)) {
- 			*found_utpid = 1;
-             if (!best)
-                 best = tmp;
-@@ -393,7 +439,11 @@
- 	return best ? best : secondbest;
- }
- 
--static void showinfo(utmp_t * u, int formtype, int maxcmd, int from,
-+static void showinfo(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+		     const char *session, const char *name,
-+#endif
-+		     utmp_t * u, int formtype, int maxcmd, int from,
- 		     int userlen, int fromlen, const int ip_addresses)
- {
- 	unsigned long long jcpu;
-@@ -402,14 +452,36 @@
- 	char uname[UT_NAMESIZE + 1] = "", tty[5 + UT_LINESIZE + 1] = "/dev/";
- 	const proc_t *best;
- 
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	if (session) {
-+	  char *sd_tty;
-+
-+	  if (sd_session_get_tty(session, &sd_tty) >= 0) {
-+            for (i = 0; i < strlen (sd_tty); i++)
-+	      /* clean up tty if garbled */
-+	      if (isalnum(sd_tty[i]) || (sd_tty[i] == '/'))
-+		tty[i + 5] = sd_tty[i];
-+	      else
-+		tty[i + 5] = '\0';
-+	    free(sd_tty);
-+	  }
-+	} else {
-+#endif
- 	for (i = 0; i < UT_LINESIZE; i++)
- 		/* clean up tty if garbled */
- 		if (isalnum(u->ut_line[i]) || (u->ut_line[i] == '/'))
- 			tty[i + 5] = u->ut_line[i];
- 		else
- 			tty[i + 5] = '\0';
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	}
-+#endif
- 
--	best = getproc(u, tty + 5, &jcpu, &ut_pid_found);
-+	best = getproc(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+		       session,
-+#endif
-+		       u, tty + 5, &jcpu, &ut_pid_found);
- 
- 	/*
- 	 * just skip if stale utmp entry (i.e. login proc doesn't
-@@ -420,26 +492,56 @@
- 	if (!ut_pid_found)
- 		return;
- 
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+        if (name)
-+	        strncpy(uname, name, UT_NAMESIZE);
-+	else
-+#endif
-+	        strncpy(uname, u->ut_user, UT_NAMESIZE);
- 	/* force NUL term for printf */
--	strncpy(uname, u->ut_user, UT_NAMESIZE);
-+	uname[UT_NAMESIZE] = '\0';
- 
- 	if (formtype) {
--		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;
-+	    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);
- 		}
--		printf("%-*.*s%-*.*s", userlen + 1, userlen, uname, utlnlen + 1, utlnlen, u->ut_line);
-+		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;
-+
- 		if (from)
--			print_from(u, ip_addresses, fromlen);
-+		    print_from(session, NULL, ip_addresses, fromlen);
-+
-+		sd_session_get_start_time(session, &ltime);
-+		print_logintime(ltime/((uint64_t) 1000000ULL), stdout);
-+	    } else {
-+#endif
-+	        if (from)
-+		    print_from(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+			       NULL,
-+#endif
-+			       u, ip_addresses, fromlen);
-+
- #ifdef HAVE_UTMPX_H
- 		print_logintime(u->ut_tv.tv_sec, stdout);
- #else
- 		print_logintime(u->ut_time, stdout);
- #endif
--		if (*u->ut_line == ':')
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	    }
-+#endif
-+	    if (u && *u->ut_line == ':')
- 			/* idle unknown for xdm logins */
- 			printf(" ?xdm? ");
- 		else
-@@ -454,11 +556,15 @@
- 		} else
- 			printf("   ?   ");
- 	} else {
--		printf("%-*.*s%-9.8s", userlen + 1, userlen, u->ut_user,
--		       u->ut_line);
-+		printf("%-*.*s%-9.8s", userlen + 1, userlen, uname,
-+		       tty+5);
- 		if (from)
--			print_from(u, ip_addresses, fromlen);
--		if (*u->ut_line == ':')
-+		  print_from(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+			     session,
-+#endif
-+			     u, ip_addresses, fromlen);
-+		if (u && *u->ut_line == ':')
- 			/* idle unknown for xdm logins */
- 			printf(" ?xdm? ");
- 		else
-@@ -635,7 +741,40 @@
- 		else
- 			printf(_("   IDLE WHAT\n"));
- 	}
--
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	if (sd_booted() > 0) {
-+		char **sessions_list;
-+		int sessions;
-+		int i;
-+
-+		sessions = sd_get_sessions (&sessions_list);
-+		if (sessions < 0 && sessions != -ENOENT)
-+			error(EXIT_FAILURE, -sessions, _("error getting sessions"));
-+
-+		if (sessions >= 0) {
-+			for (int i = 0; i < sessions; i++) {
-+				char *name;
-+				int r;
-+
-+				if ((r = sd_session_get_username(sessions_list[i], &name)) < 0)
-+					error(EXIT_FAILURE, -r, _("get user name failed"));
-+
-+				if (user) {
-+					if (!strcmp(name, user))
-+						showinfo(sessions_list[i], name, NULL, longform,
-+							 maxcmd, from, userlen, fromlen,
-+							 ip_addresses);
-+				} else {
-+					showinfo(sessions_list[i], name, NULL, longform, maxcmd,
-+						 from, userlen, fromlen, ip_addresses);
-+				}
-+				free(name);
-+				free(sessions_list[i]);
-+			}
-+			free(sessions_list);
-+		}
-+	} else {
-+#endif
- #ifdef HAVE_UTMPX_H
- 	setutxent();
- #else
-@@ -654,7 +793,11 @@
- 			if (u->ut_type != USER_PROCESS)
- 				continue;
- 			if (!strncmp(u->ut_user, user, UT_NAMESIZE))
--				showinfo(u, longform, maxcmd, from, userlen,
-+				showinfo(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+					 NULL, NULL,
-+#endif
-+					 u, longform, maxcmd, from, userlen,
- 					 fromlen, ip_addresses);
- 		}
- 	} else {
-@@ -669,7 +812,11 @@
- 			if (u->ut_type != USER_PROCESS)
- 				continue;
- 			if (*u->ut_user)
--				showinfo(u, longform, maxcmd, from, userlen,
-+				showinfo(
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+					 NULL, NULL,
-+#endif
-+					 u, longform, maxcmd, from, userlen,
- 					 fromlen, ip_addresses);
- 		}
- 	}
-@@ -678,6 +825,9 @@
- #else
- 	endutent();
- #endif
-+#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
-+	}
-+#endif
- 
- 	return EXIT_SUCCESS;
- }
diff --git a/procps-ng-3.3.17.tar.xz b/procps-ng-3.3.17.tar.xz
deleted file mode 100644
index be1edc5..0000000
--- a/procps-ng-3.3.17.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4518b3e7aafd34ec07d0063d250fd474999b20b200218c3ae56f5d2113f141b4
-size 1008428
diff --git a/procps-ng-3.3.8-accuracy.dif b/procps-ng-3.3.8-accuracy.dif
deleted file mode 100644
index 352b730..0000000
--- a/procps-ng-3.3.8-accuracy.dif
+++ /dev/null
@@ -1,99 +0,0 @@
----
- ps/common.h |    1 +
- ps/global.c |    5 ++++-
- ps/output.c |   19 ++++++++++---------
- 3 files changed, 15 insertions(+), 10 deletions(-)
-
---- ps/common.h
-+++ ps/common.h	2018-04-04 11:14:33.915688098 +0000
-@@ -303,6 +303,7 @@ extern int             running_only;
- extern int             screen_cols;
- extern int             screen_rows;
- extern time_t          seconds_since_boot;
-+extern unsigned long long jiffies_since_boot;
- extern selection_node *selection_list;
- extern unsigned        simple_select;
- extern sort_node      *sort_list;
---- ps/global.c
-+++ ps/global.c	2018-04-04 11:14:33.915688098 +0000
-@@ -78,6 +78,7 @@ int             prefer_bsd_defaults = -1
- int             screen_cols = -1;
- int             screen_rows = -1;
- time_t          seconds_since_boot = -1;
-+unsigned long long  jiffies_since_boot = -1;
- selection_node *selection_list = (selection_node *)0xdeadbeef;
- unsigned        simple_select = 0xffffffff;
- sort_node      *sort_list = (sort_node *)0xdeadbeef; /* ready-to-use sort list */
-@@ -361,6 +362,7 @@ static const char *set_personality(void)
- /************ Call this to reinitialize everything ***************/
- void reset_global(void){
-   static proc_t p;
-+  double uptime_secs;
-   reset_selection_list();
-   look_up_our_self(&p);
-   set_screen_size();
-@@ -383,7 +385,8 @@ void reset_global(void){
-   negate_selection      = 0;
-   page_size             = getpagesize();
-   running_only          = 0;
--  seconds_since_boot    = uptime(0,0);
-+  seconds_since_boot    = uptime(&uptime_secs,0);
-+  jiffies_since_boot	= ((long double)uptime_secs * Hertz);
-   selection_list        = NULL;
-   simple_select         = 0;
-   sort_list             = NULL;
---- ps/output.c
-+++ ps/output.c	2018-04-04 11:14:33.915688098 +0000
-@@ -134,6 +134,7 @@ static int sr_ ## NAME (const proc_t* P,
- #define cook_time(P) (P->utime + P->stime) / Hertz
- 
- #define cook_etime(P) (((unsigned long long)seconds_since_boot >= (P->start_time / Hertz)) ? ((unsigned long long)seconds_since_boot - (P->start_time / Hertz)) : 0)
-+#define cook_jtime(P) (((unsigned long long)jiffies_since_boot >= (P->start_time)) ? ((unsigned long long)jiffies_since_boot - (P->start_time)) : 0)
- 
- #define CMP_COOKED_TIME(NAME) \
- static int sr_ ## NAME (const proc_t* P, const proc_t* Q) { \
-@@ -507,11 +508,11 @@ static int pr_etimes(char *restrict cons
- static int pr_c(char *restrict const outbuf, const proc_t *restrict const pp){
-   unsigned long long total_time;   /* jiffies used by this process */
-   unsigned pcpu = 0;               /* scaled %cpu, 99 means 99% */
--  unsigned long long seconds;      /* seconds of process life */
-+  unsigned long long jiffies;      /* jiffies of process life */
-   total_time = pp->utime + pp->stime;
-   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
--  seconds = cook_etime(pp);
--  if(seconds) pcpu = (total_time * 100ULL / Hertz) / seconds;
-+  jiffies = cook_jtime(pp);
-+  if(jiffies) pcpu = (total_time * 100ULL) / jiffies;
-   if (pcpu > 99U) pcpu = 99U;
-   return snprintf(outbuf, COLWID, "%2u", pcpu);
- }
-@@ -519,11 +520,11 @@ static int pr_c(char *restrict const out
- static int pr_pcpu(char *restrict const outbuf, const proc_t *restrict const pp){
-   unsigned long long total_time;   /* jiffies used by this process */
-   unsigned pcpu = 0;               /* scaled %cpu, 999 means 99.9% */
--  unsigned long long seconds;      /* seconds of process life */
-+  unsigned long long jiffies;      /* jiffies of process life */
-   total_time = pp->utime + pp->stime;
-   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
--  seconds = cook_etime(pp);
--  if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
-+  jiffies = cook_jtime(pp);
-+  if(jiffies) pcpu = (total_time * 1000ULL) / jiffies;
-   if (pcpu > 999U)
-     return snprintf(outbuf, COLWID, "%u", pcpu/10U);
-   return snprintf(outbuf, COLWID, "%u.%u", pcpu/10U, pcpu%10U);
-@@ -532,11 +533,11 @@ static int pr_pcpu(char *restrict const
- static int pr_cp(char *restrict const outbuf, const proc_t *restrict const pp){
-   unsigned long long total_time;   /* jiffies used by this process */
-   unsigned pcpu = 0;               /* scaled %cpu, 999 means 99.9% */
--  unsigned long long seconds;      /* seconds of process life */
-+  unsigned long long jiffies;      /* jiffies of process life */
-   total_time = pp->utime + pp->stime;
-   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
--  seconds = cook_etime(pp);
--  if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
-+  jiffies = cook_jtime(pp);
-+  if(jiffies) pcpu = (total_time * 1000ULL) / jiffies;
-   if (pcpu > 999U) pcpu = 999U;
-   return snprintf(outbuf, COLWID, "%3u", pcpu);
- }
diff --git a/procps-ng-3.3.8-bnc634840.patch b/procps-ng-3.3.8-bnc634840.patch
deleted file mode 100644
index 8420855..0000000
--- a/procps-ng-3.3.8-bnc634840.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Do not setup SIGHUP signal handler if we are in the batch mode
-
-Top enables a signal handler for the SIGHUP signal (loss of terminal).  While
-this makes sense for top's default interactive mode, it doesn't make any sense
-for batch mode. If you run top in nohup just to collect data over time and
-disconnect top finishes which is not what one would expect.
-Index: procps-3.2.8/top.c
-
----
- top/top.c |    8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
---- top/top.c
-+++ top/top.c	2018-04-04 11:33:59.278280201 +0000
-@@ -3691,7 +3691,13 @@ static void before (char *me) {
-    sa.sa_flags = 0;
-    for (i = SIGRTMAX; i; i--) {
-       switch (i) {
--         case SIGALRM: case SIGHUP:  case SIGINT:
-+         case SIGHUP:
-+            if (Batch)
-+              sa.sa_handler = SIG_IGN;
-+            else
-+              sa.sa_handler = sig_endpgm;
-+            break;
-+         case SIGALRM: case SIGINT:
-          case SIGPIPE: case SIGQUIT: case SIGTERM:
-          case SIGUSR1: case SIGUSR2:
-             sa.sa_handler = sig_endpgm;
diff --git a/procps-ng-3.3.8-ignore-scan_unevictable_pages.patch b/procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
index 8f64330..7c0989b 100644
--- a/procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
+++ b/procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
@@ -8,12 +8,12 @@ Ignore it for avoiding the kernel warning message.
 Signed-off-by: Takashi Iwai <tiwai@suse.de>
 
 ---
- sysctl.c |    1 +
+ src/sysctl.c |    1 +
  1 file changed, 1 insertion(+)
 
---- a/sysctl.c
-+++ b/sysctl.c
-@@ -59,6 +59,7 @@ static const char DEFAULT_PRELOAD[] = "/
+--- a/src/sysctl.c
++++ b/src/sysctl.c
+@@ -63,6 +58,7 @@ static const char DEFAULT_PRELOAD[] = "/
  static const char *DEPRECATED[] = {
  	"base_reachable_time",
  	"retrans_time",
diff --git a/procps-ng-3.3.8-petabytes.patch b/procps-ng-3.3.8-petabytes.patch
index de342cd..6f30043 100644
--- a/procps-ng-3.3.8-petabytes.patch
+++ b/procps-ng-3.3.8-petabytes.patch
@@ -1,11 +1,11 @@
 ---
- top/top.c |    6 +++---
+ src/top/top.c |    6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
---- top/top.c
-+++ top/top.c	2018-04-04 11:49:56.472660056 +0000
-@@ -1626,9 +1626,9 @@ static inline const char *make_str_utf8
- static const char *scale_mem (int target, unsigned long num, int width, int justr) {
+--- src/top/top.c
++++ src/top/top.c	2022-03-29 10:24:43.327490984 +0000
+@@ -1684,9 +1684,9 @@ static inline const char *make_str_utf8
+ static const char *scale_mem (int target, float num, int width, int justr) {
     //                               SK_Kb   SK_Mb      SK_Gb      SK_Tb      SK_Pb      SK_Eb
  #ifdef BOOST_MEMORY
 -   static const char *fmttab[] =  { "%.0f", "%#.1f%c", "%#.3f%c", "%#.3f%c", "%#.3f%c", NULL };
@@ -15,13 +15,13 @@
 +   static const char *fmttab[] =  { "%.0f", "%.1f%c",  "%.1f%c",  "%.1f%c",  "%.1f%c",  "%.1f%c", NULL };
  #endif
     static char buf[SMLBUFSIZ];
-    float scaled_num;
-@@ -1640,7 +1640,7 @@ static const char *scale_mem (int target
+    char *psfx;
+@@ -1696,7 +1696,7 @@ static const char *scale_mem (int target
+    if (Rc.zero_suppress && 0 >= num)
        goto end_justifies;
  
-    scaled_num = num;
 -   for (i = SK_Kb, psfx = Scaled_sfxtab; i < SK_Eb; psfx++, i++) {
 +   for (i = SK_Kb, psfx = Scaled_sfxtab; i <= SK_Eb; psfx++, i++) {
        if (i >= target
-       && (width >= snprintf(buf, sizeof(buf), fmttab[i], scaled_num, *psfx)))
+       && (width >= snprintf(buf, sizeof(buf), fmttab[i], num, *psfx)))
           goto end_justifies;
diff --git a/procps-ng-3.3.8-readeof.patch b/procps-ng-3.3.8-readeof.patch
index ccdaf20..9c214e7 100644
--- a/procps-ng-3.3.8-readeof.patch
+++ b/procps-ng-3.3.8-readeof.patch
@@ -1,11 +1,11 @@
 ---
- proc/readproc.c |   20 ++++++++++----------
+ library/readproc.c |   20 ++++++++++----------
  1 file changed, 10 insertions(+), 10 deletions(-)
 
---- proc/readproc.c
-+++ proc/readproc.c	2018-06-05 08:54:06.408030693 +0000
-@@ -675,7 +675,7 @@ static int file2str(const char *director
-     else ub->buf = xcalloc((ub->siz = buffGRW));
+--- library/readproc.c
++++ library/readproc.c	2022-03-28 11:51:04.751862744 +0000
+@@ -735,7 +735,7 @@ static int file2str(const char *director
+     }
      len = snprintf(path, sizeof path, "%s/%s", directory, what);
      if (len <= 0 || (size_t)len >= sizeof path) return -1;
 -    if (-1 == (fd = open(path, O_RDONLY, 0))) return -1;
@@ -13,9 +13,9 @@
      while (0 < (num = read(fd, ub->buf + tot_read, ub->siz - tot_read))) {
          tot_read += num;
          if (tot_read < ub->siz) break;
-@@ -695,25 +695,25 @@ static int file2str(const char *director
- static char** file2strvec(const char* directory, const char* what) {
-     char buf[2048];	/* read buf bytes at a time */
+@@ -759,25 +759,25 @@ static int file2str(const char *director
+ static char **file2strvec(const char *directory, const char *what) {
+     char buf[2048];     /* read buf bytes at a time */
      char *p, *rbuf = 0, *endbuf, **q, **ret, *strp;
 -    int fd, tot = 0, n, c, end_of_file = 0;
 -    int align;
@@ -30,37 +30,37 @@
  
      /* read whole file into a memory buffer, allocating as we go */
      while ((n = read(fd, buf, sizeof buf - 1)) >= 0) {
--	if (n < (int)(sizeof buf - 1))
-+	if (n < sizeof buf - 1)
- 	    end_of_file = 1;
--	if (n <= 0 && tot <= 0) { /* nothing read now, nothing read before */
-+	if (n <= 0 && tot <= 0) /* nothing read now, nothing read before */
- 	    break;		/* process died between our open and read */
--	}
+-        if (n < (int)(sizeof buf - 1))
++        if (n < (sizeof(buf) - 1))
+             end_of_file = 1;
+-        if (n <= 0 && tot <= 0) {  /* nothing read now, nothing read before */
++        if (n <= 0 && tot <= 0)    /* nothing read now, nothing read before */
+             break;                 /* process died between our open and read */
+-        }
 +
- 	/* ARG_LEN is our guesstimated median length of a command-line argument
- 	   or environment variable (the minimum is 1, the maximum is 131072) */
- 	#define ARG_LEN 64
--	if (tot >= INT_MAX / (ARG_LEN + (int)sizeof(char*)) * ARG_LEN - n) {
-+	if (tot >= INT_MAX / (ARG_LEN + sizeof(char*)) * ARG_LEN - n) {
- 	    end_of_file = 1; /* integer overflow: null-terminate and break */
- 	    n = 0; /* but tot > 0 */
- 	}
-@@ -741,7 +741,7 @@ static char** file2strvec(const char* di
-     c = sizeof(char*);				/* one extra for NULL term */
+         /* ARG_LEN is our guesstimated median length of a command-line argument
+            or environment variable (the minimum is 1, the maximum is 131072) */
+         #define ARG_LEN 64
+-        if (tot >= INT_MAX / (ARG_LEN + (int)sizeof(char*)) * ARG_LEN - n) {
++        if (tot >= INT_MAX / (ARG_LEN + sizeof(char*)) * ARG_LEN - n) {
+             end_of_file = 1;       /* integer overflow: null-terminate and break */
+             n = 0;                 /* but tot > 0 */
+         }
+@@ -811,7 +811,7 @@ static char **file2strvec(const char *di
+     c = sizeof(char*);             /* one extra for NULL term */
      for (p = rbuf; p < endbuf; p++) {
- 	if (!*p || *p == '\n') {
--	    if (c >= INT_MAX - (tot + (int)sizeof(char*) + align)) break;
-+	    if (c >= INT_MAX - (tot + sizeof(char*) + align)) break;
- 	    c += sizeof(char*);
- 	}
- 	if (*p == '\n')
-@@ -753,7 +753,7 @@ static char** file2strvec(const char* di
-     q = ret = (char**) (endbuf+align);		/* ==> free(*ret) to dealloc */
+         if (!*p || *p == '\n') {
+-            if (c >= INT_MAX - (tot + (int)sizeof(char*) + align)) break;
++            if (c >= INT_MAX - (tot + sizeof(char*) + align)) break;
+             c += sizeof(char*);
+         }
+         if (*p == '\n')
+@@ -824,7 +824,7 @@ static char **file2strvec(const char *di
+     q = ret = (char**) (endbuf+align);          /* ==> free(*ret) to dealloc */
      for (strp = p = rbuf; p < endbuf; p++) {
- 	if (!*p) {				/* NUL char implies that */
--	    if (c < 2 * (int)sizeof(char*)) break;
-+	    if (c < 2 * sizeof(char*)) break;
- 	    c -= sizeof(char*);
- 	    *q++ = strp;			/* point ptrs to the strings */
- 	    strp = p+1;				/* next string -> next char */
+         if (!*p) {                              /* NUL char implies that */
+-            if (c < 2 * (int)sizeof(char*)) break;
++            if (c < 2 * sizeof(char*)) break;
+             c -= sizeof(char*);
+             *q++ = strp;                        /* point ptrs to the strings */
+             strp = p+1;                         /* next string -> next char */
diff --git a/procps-ng-3.3.8-tinfo.dif b/procps-ng-3.3.8-tinfo.dif
index ed19e57..3ce00a7 100644
--- a/procps-ng-3.3.8-tinfo.dif
+++ b/procps-ng-3.3.8-tinfo.dif
@@ -4,32 +4,30 @@
  2 files changed, 9 insertions(+), 1 deletion(-)
 
 --- Makefile.am
-+++ Makefile.am	2018-04-04 12:28:14.937957527 +0000
-@@ -171,7 +171,7 @@ else
- slabtop_LDADD = $(LDADD) @NCURSES_LIBS@
++++ Makefile.am	2022-10-20 13:21:37.505517043 +0000
+@@ -191,7 +191,7 @@ src_top_top_SOURCES += local/strverscmp.
  endif
  
--top_top_LDADD = $(LDADD) @NCURSES_LIBS@ $(DL_LIB)
-+top_top_LDADD = $(LDADD) @TOP_NCURSES_LIBS@ $(DL_LIB)
+ src_top_top_CFLAGS = @NCURSES_CFLAGS@
+-src_top_top_LDADD = $(LDADD) @NCURSES_LIBS@ $(DL_LIB)
++src_top_top_LDADD = $(LDADD) @TOP_NCURSES_LIBS@ $(DL_LIB)
  endif
  
  if BUILD_SKILL
 --- configure.ac
-+++ configure.ac	2018-04-04 12:29:23.364676155 +0000
-@@ -194,8 +194,16 @@ else
-   else
-     WATCH_NCURSES_LIBS="$NCURSES_LIBS"
-   fi
-+  cf_tinfo=""
-+  AC_CHECK_LIB(tinfo, setupterm, [cf_tinfo="tinfo"])
-+  if test x$cf_tinfo = xtinfo ; then
-+    TOP_NCURSES_LIBS="-ltinfo"
-+  else
-+    TOP_NCURSES_LIBS="$NCURSES_LIBS"
-+  fi
- fi
- AC_SUBST([NCURSES_LIBS])
++++ configure.ac	2022-10-20 13:23:50.707138810 +0000
+@@ -281,6 +281,14 @@ fi
+ #  else
+ #    WATCH_NCURSES_LIBS="$NCURSES_LIBS"
+ #  fi
++cf_tinfo=""
++AC_CHECK_LIB(tinfo, setupterm, [cf_tinfo="tinfo"])
++if test x$cf_tinfo = xtinfo ; then
++  TOP_NCURSES_LIBS="-ltinfo"
++else
++  TOP_NCURSES_LIBS="$NCURSES_LIBS"
++fi
 +AC_SUBST([TOP_NCURSES_LIBS])
- AC_SUBST([WATCH_NCURSES_LIBS])
- AC_SUBST([WATCH_NCURSES_CFLAGS])
  
+ AC_ARG_WITH([systemd],
+   [AS_HELP_STRING([--with-systemd], [enable systemd support])],
diff --git a/procps-ng-3.3.8-vmstat-terabyte.dif b/procps-ng-3.3.8-vmstat-terabyte.dif
index d2f8212..511bdcd 100644
--- a/procps-ng-3.3.8-vmstat-terabyte.dif
+++ b/procps-ng-3.3.8-vmstat-terabyte.dif
@@ -1,17 +1,17 @@
 ---
- vmstat.c |    4 ++--
+ src/vmstat.c |    4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
---- vmstat.c
-+++ vmstat.c	2016-07-11 13:18:04.993371059 +0000
-@@ -273,8 +273,8 @@ static void new_header(void)
+--- src/vmstat.c
++++ src/vmstat.c	2023-02-08 08:59:05.175343180 +0000
+@@ -333,8 +333,8 @@ static void new_header(void)
  
  static unsigned long unitConvert(unsigned long size)
  {
--	float cvSize;
--	cvSize = (float)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
-+	long double cvSize;
-+	cvSize = (long double)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
- 	return ((unsigned long)cvSize);
+-    double cvSize;
+-    cvSize = (double)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
++    long double cvSize;
++    cvSize = (long double)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
+     return ((unsigned long)cvSize);
  }
  
diff --git a/procps-ng-3.3.9-w-notruncate.diff b/procps-ng-3.3.9-w-notruncate.diff
index d78b760..b9aee39 100644
--- a/procps-ng-3.3.9-w-notruncate.diff
+++ b/procps-ng-3.3.9-w-notruncate.diff
@@ -1,11 +1,11 @@
 ---
- w.1 |    3 +++
- w.c |   19 ++++++++++++++++---
- 2 files changed, 19 insertions(+), 3 deletions(-)
+ 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(-)
 
---- w.1
-+++ w.1	2023-08-18 08:21:51.764340794 +0000
-@@ -40,6 +40,9 @@ and a
+--- 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
@@ -15,34 +15,56 @@
  \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)
+--- 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;
- 	int ut_pid_found;
-@@ -424,7 +424,14 @@ static void showinfo(utmp_t * u, int for
- 	strncpy(uname, u->ut_user, UT_NAMESIZE);
+     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;
  
- 	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__
+     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);
@@ -50,7 +72,7 @@
  	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)
+@@ -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'},
@@ -58,16 +80,16 @@
  		{"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)
+@@ -703,7 +718,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)
+-		getopt_long(argc, argv, "husfoVip", longopts, NULL)) != -1)
++		getopt_long(argc, argv, "husnfoVip", longopts, NULL)) != -1)
  		switch (ch) {
  		case 'h':
  			header = 0;
-@@ -546,6 +555,10 @@ int main(int argc, char **argv)
+@@ -711,6 +726,10 @@ int main(int argc, char **argv)
  		case 's':
  			longform = 0;
  			break;
diff --git a/procps-ng-3.3.9-watch.patch b/procps-ng-3.3.9-watch.patch
deleted file mode 100644
index b3ea05d..0000000
--- a/procps-ng-3.3.9-watch.patch
+++ /dev/null
@@ -1,14 +0,0 @@
----
- proc/libprocps.sym |    1 +
- 1 file changed, 1 insertion(+)
-
---- proc/libprocps.sym
-+++ proc/libprocps.sym	2016-07-11 12:45:32.463107052 +0000
-@@ -13,6 +13,7 @@ global:
- 	get_ns_id;
- 	get_ns_name;
- 	get_pid_digits;
-+	get_proc_stats;
- 	get_slabinfo;
- 	getbtime;
- 	getdiskstat;
diff --git a/procps-ng-4.0.0-floats.dif b/procps-ng-4.0.0-floats.dif
new file mode 100644
index 0000000..9cf2352
--- /dev/null
+++ b/procps-ng-4.0.0-floats.dif
@@ -0,0 +1,65 @@
+---
+ local/strutils.c |   22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+--- local/strutils.c
++++ local/strutils.c	2021-02-09 10:11:25.000000000 +0000
+@@ -20,6 +20,8 @@
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+  */
+ 
++#include <float.h>
++#include <math.h>
+ #include <stdlib.h>
+ #include <ctype.h>
+ 
+@@ -71,9 +73,9 @@ double strtod_or_err(const char *str, co
+  */
+ double strtod_nol_or_err(char *str, const char *errmesg)
+ {
+-    double num;
++    long double num;
+     const char *cp, *radix;
+-    double mult;
++    long double mult;
+     int negative = 0;
+ 
+     if (str != NULL && *str != '\0') {
+@@ -95,29 +97,29 @@ double strtod_nol_or_err(char *str, cons
+         mult=0.1;
+         while(isdigit(*radix)) {
+             radix++;
+-            mult *= 10;
++            mult *= 10.0;
+         }
+         while(isdigit(*cp)) {
+-            num += (*cp - '0') * mult;
+-            mult /= 10;
++            num += (long double)(*cp - '0') * mult;
++            mult /= 10.0;
+             cp++;
+         }
+         /* got the integers */
+         if (*cp == '\0')
+-            return (negative?-num:num);
++            return (double)(negative?-num:num);
+         if (*cp != '.' && *cp != ',')
+             error(EXIT_FAILURE, EINVAL, "%s: '%s'", errmesg, str);
+ 
+         cp++;
+         mult = 0.1;
+         while(isdigit(*cp)) {
+-            num += (*cp - '0') * mult;
+-            mult /= 10;
++            num += (long double)(*cp - '0') * mult;
++            mult /= 10.0;
+             cp++;
+         }
+         if (*cp == '\0')
+-            return (negative?-num:num);
++            return (double)(negative?-num:num);
+     }
+     error(EXIT_FAILURE, errno, "%s: '%s'", errmesg, str);
+-    return 0;
++    return (double)0;
+ }
diff --git a/procps-ng-4.0.0-integer-overflow.patch b/procps-ng-4.0.0-integer-overflow.patch
new file mode 100644
index 0000000..4e575ac
--- /dev/null
+++ b/procps-ng-4.0.0-integer-overflow.patch
@@ -0,0 +1,26 @@
+---
+ library/meminfo.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- library/meminfo.c
++++ library/meminfo.c	2022-03-29 09:50:45.076823155 +0000
+@@ -710,7 +710,9 @@ static int meminfo_read_failed (
+     mHr(derived_mem_used) = (unsigned long)mem_used;
+ 
+     if (mHr(HighFree) < mHr(HighTotal))
+-         mHr(derived_mem_hi_used) = mHr(HighTotal) - mHr(HighFree);
++        mHr(derived_mem_hi_used) = mHr(HighTotal) - mHr(HighFree);
++    else
++        mHr(derived_mem_hi_used) = 0;
+ 
+     if (0 == mHr(LowTotal)) {
+         mHr(LowTotal) = mHr(MemTotal);
+@@ -718,6 +720,8 @@ static int meminfo_read_failed (
+     }
+     if (mHr(LowFree) < mHr(LowTotal))
+         mHr(derived_mem_lo_used) = mHr(LowTotal) - mHr(LowFree);
++    else
++        mHr(derived_mem_lo_used) = 0;
+ 
+     if (mHr(SwapFree) < mHr(SwapTotal))
+         mHr(derived_swap_used) = mHr(SwapTotal) - mHr(SwapFree);
diff --git a/procps-ng-4.0.4-ignore-sysctl_conf.patch b/procps-ng-4.0.4-ignore-sysctl_conf.patch
new file mode 100644
index 0000000..ceb6700
--- /dev/null
+++ b/procps-ng-4.0.4-ignore-sysctl_conf.patch
@@ -0,0 +1,15 @@
+---
+ src/sysctl.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- src/sysctl.c
++++ src/sysctl.c	2023-12-14 13:46:09.181625220 +0000
+@@ -772,6 +772,8 @@ static int Preload(SettingList *setlist,
+ 		fp = (globbuf.gl_pathv[j][0] == '-' && !globbuf.gl_pathv[j][1])
+ 		    ? stdin : fopen(globbuf.gl_pathv[j], "r");
+ 		if (!fp) {
++			if (strcmp ("/usr/lib/sysctl.d/99-sysctl.conf", globbuf.gl_pathv[j]) == 0)
++				continue;
+ 			xwarn(_("cannot open \"%s\""), globbuf.gl_pathv[j]);
+             return EXIT_FAILURE;
+ 		}
diff --git a/procps-ng-4.0.4-pmapX-not-twice-anymore.patch b/procps-ng-4.0.4-pmapX-not-twice-anymore.patch
new file mode 100644
index 0000000..884eb56
--- /dev/null
+++ b/procps-ng-4.0.4-pmapX-not-twice-anymore.patch
@@ -0,0 +1,38 @@
+---
+ testsuite/pmap.test/pmap.exp |   25 -------------------------
+ 1 file changed, 25 deletions(-)
+
+--- testsuite/pmap.test/pmap.exp
++++ testsuite/pmap.test/pmap.exp	2023-11-15 15:34:02.613151770 +0000
+@@ -69,31 +69,6 @@ if  { [ file readable "/proc/self/smaps"
+     expect_pass $test "$pmap_initname\$"
+ }
+ 
+-
+-proc expect_twice_total { test } {
+-    set totkb 0
+-    expect {
+-        -re "\r\n\\s+(\\d+)\[0-9 \]*KB" {
+-            set totkb $expect_out(1,string)
+-            expect {
+-                -re "\r\n\\s+$totkb\[0-9 \]*KB" { pass "$test" }
+-                eof { fail "$test" }
+-                timeout { fail "$test" }
+-            }
+-        }
+-        eof { fail "$test" }
+-        timeout { fail "$test" }
+-    }
+-}
+-
+-set test "pmap X pid pid has same total"
+-spawn $pmap -X $mypid $mypid
+-expect_twice_total "$test"
+-
+-set test "pmap XX pid pid has same total"
+-spawn $pmap -XX $mypid $mypid
+-expect_twice_total "$test"
+-
+ set test "pmap finding shm"
+ make_testshm_proc
+ if { $shmid == "" } {
diff --git a/procps-ng-4.0.4.tar.xz b/procps-ng-4.0.4.tar.xz
new file mode 100644
index 0000000..696c48b
--- /dev/null
+++ b/procps-ng-4.0.4.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22870d6feb2478adb617ce4f09a787addaf2d260c5a8aa7b17d889a962c5e42e
+size 1401540
diff --git a/procps-ng-4.0.4.tar.xz.asc b/procps-ng-4.0.4.tar.xz.asc
new file mode 100644
index 0000000..0013695
--- /dev/null
+++ b/procps-ng-4.0.4.tar.xz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEXT3w9TizJ8CqeneiAiFmwP88hOMFAmTwbLAACgkQAiFmwP88
+hONNRg//a6SXHpenZGCpz6bu6qL6UVGGbanjXOCVzEo0eMwX7/b/Pk3r/wLmtP+a
+zpfjYVxyLHakeN4gThphLp01SnkuOmFoqXZBe8XZUQTbRm1BMBmmAi7E8GamDJbw
+TgpAIW1qKZPgYRMKB1nSxA5a0OCoM1t8ntXrZdau72LoEnGwuEJEeV4F8GmjZnd/
+2XIocwuz3xlm7/ByziZ7GuRqibCs+crhBO3vk120LSCRBCNfoS1uSMrdodO95vpX
+EMYCYYMomxOYxq2p1gHDQ+KtEy61zDJ9LbMvzs+9TpHy5Ihw+wXNYu8CQmJIIlnT
+7gLoAxhl4Ix0QoyUSgvAu7ANYyndFrz7KBPkOCC/2Ig6BJJzf+YEzWSs1QTh2Lld
+vKEDjwqc9UiGW/2yKc0rAmeO1EiQf9dyOe+Sray5OiyLUTtoTUxVLSlXiMwsBWiK
+E6dtebUIfxm5uxN5z6Ysmcx+hlxbSVPZkjdWG1W8LQdECsNR8/pPO14VpBYZjvSC
+MAvzmONM3FSryxw3y5AeuQLS4lrNw+XuG4y8q7zisBtW7RzS9HkM0yFPco5DlnYm
+DlMpnY4PIAltZTO2secnV12CdDljVZ6GjoJqnmLKhM6H4M3H/p3oFiZEIvgd2bKK
+D/PV9XZJF1/wnNMxBUgJ9cQuqlh013UOuwUzxJ11q9uDj63n9do=
+=XLqg
+-----END PGP SIGNATURE-----
diff --git a/procps-rpmlintrc b/procps-rpmlintrc
index 0bb1e23..401199d 100644
--- a/procps-rpmlintrc
+++ b/procps-rpmlintrc
@@ -1 +1,2 @@
-addFilter(".*W:.*shared-lib-calls-exit.*libprocps\.so.*")
+addFilter(".*W:.*shared-lib-calls-exit.*libproc2\.so.*")
+addFilter(".*W:.*macro-in-comment.*%{version}.*")
diff --git a/procps-v3.3.3-columns.dif b/procps-v3.3.3-columns.dif
index a4df3c0..e43759c 100644
--- a/procps-v3.3.3-columns.dif
+++ b/procps-v3.3.3-columns.dif
@@ -2,9 +2,9 @@
  ps/global.c |   13 ++++++++++---
  1 file changed, 10 insertions(+), 3 deletions(-)
 
---- ps/global.c
-+++ ps/global.c	2016-07-11 13:04:59.600533764 +0000
-@@ -147,8 +147,11 @@ static void set_screen_size(void){
+--- src/ps/global.c
++++ src/ps/global.c	2022-03-29 09:31:24.242140877 +0000
+@@ -264,8 +264,11 @@ static void set_screen_size(void){
    screen_cols = ws.ws_col;  // hmmm, NetBSD subtracts 1
    screen_rows = ws.ws_row;
  
@@ -18,7 +18,7 @@
  
    columns = getenv("COLUMNS");
    if(columns && *columns){
-@@ -290,6 +293,7 @@ static const char *set_personality(void)
+@@ -407,6 +410,7 @@ static const char *set_personality(void)
      return NULL;
  
    case_aix:
@@ -26,7 +26,7 @@
      bsd_j_format = "FB_j";
      bsd_l_format = "FB_l";
      /* bsd_s_format not used */
-@@ -317,6 +321,7 @@ static const char *set_personality(void)
+@@ -434,6 +438,7 @@ static const char *set_personality(void)
  
    case_sunos4:
      personality = PER_NO_DEFAULT_g;
@@ -34,7 +34,7 @@
      prefer_bsd_defaults = 1;
      bsd_j_format = "FB_j";
      bsd_l_format = "FB_l";
-@@ -342,12 +347,14 @@ static const char *set_personality(void)
+@@ -459,12 +464,14 @@ static const char *set_personality(void)
    case_hp:
    case_hpux:
      personality = PER_HPUX_x;
@@ -49,10 +49,10 @@
      return NULL;
  
    case_posix:
-@@ -365,8 +372,8 @@ void reset_global(void){
-   double uptime_secs;
-   reset_selection_list();
-   look_up_our_self(&p);
+@@ -505,8 +512,8 @@ void reset_global(void){
+   }
+ // --- <pids> interface --------------------------------------------------
+ 
 -  set_screen_size();
    set_personality();
 +  set_screen_size();
diff --git a/procps-v3.3.3-ia64.diff b/procps-v3.3.3-ia64.diff
index 8d1eb4c..8cd0f3b 100644
--- a/procps-v3.3.3-ia64.diff
+++ b/procps-v3.3.3-ia64.diff
@@ -1,7 +1,7 @@
---- proc/devname.c
-+++ proc/devname.c	2012-06-01 13:35:43.452010553 +0000
-@@ -53,6 +53,10 @@
- #define minor <-- do not use -->
+--- library/devname.c
++++ library/devname.c	2012-06-01 13:35:43.452010553 +0000
+@@ -50,6 +50,10 @@
+ #define minor(d) ( ((unsigned)(d)&0xffu) | (((unsigned)(d)&0xfff00000u)>>12u) )
  #endif
  
 +#ifndef PAGE_SIZE
diff --git a/procps-v3.3.3-pwdx.patch b/procps-v3.3.3-pwdx.patch
index 00b39e8..913fef3 100644
--- a/procps-v3.3.3-pwdx.patch
+++ b/procps-v3.3.3-pwdx.patch
@@ -1,10 +1,10 @@
 ---
- pwdx.c |    1 +
+ src/pwdx.c |    1 +
  1 file changed, 1 insertion(+)
 
---- pwdx.c
-+++ pwdx.c	2016-07-11 13:17:16.154313659 +0000
-@@ -109,6 +109,7 @@ int main(int argc, char *argv[])
+--- src/pwdx.c
++++ src/pwdx.c	2016-07-11 13:17:16.154313659 +0000
+@@ -113,6 +113,7 @@ int main(int argc, char *argv[])
  		buflen = 10 + strlen(argv[i]) + 1;
  		buf = xmalloc(buflen);
  
diff --git a/procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff b/procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff
index b9ef207..d1d712c 100644
--- a/procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff
+++ b/procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff
@@ -1,38 +1,38 @@
 ---
- sysctl.8 |    2 ++
- sysctl.c |   12 ++++++++++++
+ man/sysctl.8 |    2 ++
+ src/sysctl.c |   12 ++++++++++++
  2 files changed, 14 insertions(+)
 
---- sysctl.8
-+++ sysctl.8	2021-02-10 10:05:27.781748090 +0000
-@@ -81,6 +81,8 @@ directories in the following list in giv
- Once a file of a given filename is loaded, any file of the same name
- in subsequent directories is ignored.
- .br
+--- man/sysctl.8
++++ man/sysctl.8	2022-03-29 10:21:47.926686046 +0000
+@@ -123,6 +123,8 @@ will read files from directories in the
+ order from top to bottom. Once a file of a given filename is loaded, any
+ file of the same name in subsequent directories is ignored.
+ 
 +/boot/sysctl.conf-<kernelversion>
 +.br
  /etc/sysctl.d/*.conf
  .br
  /run/sysctl.d/*.conf
---- sysctl.c
-+++ sysctl.c	2021-02-10 10:04:25.290952318 +0000
-@@ -39,6 +39,7 @@
+--- src/sysctl.c
++++ src/sysctl.c	2022-03-29 10:20:51.795708321 +0000
+@@ -45,6 +45,7 @@
  #include <string.h>
  #include <sys/stat.h>
  #include <sys/types.h>
 +#include <sys/utsname.h>
  #include <unistd.h>
+ #include <ctype.h>
  
- #include "c.h"
-@@ -621,6 +622,7 @@ static int sortpairs(const void *A, cons
- static int PreloadSystem(void)
+@@ -808,6 +809,7 @@ static int sortpairs(const void *A, cons
+ static int PreloadSystem(SettingList *setlist)
  {
  	unsigned di, i;
 +	struct utsname uts;
  	const char *dirs[] = {
  		"/etc/sysctl.d",
  		"/run/sysctl.d",
-@@ -685,6 +687,16 @@ static int PreloadSystem(void)
+@@ -872,6 +874,16 @@ static int PreloadSystem(SettingList *se
  	}
  	qsort(cfgs, ncfgs, sizeof(struct cfg *), sortpairs);
  
@@ -42,7 +42,7 @@
 +		if (access(buf, R_OK) == 0) {
 +			if (!Quiet)
 +				printf("* Applying %s ...\n", buf);
-+			Preload(buf);
++			Preload(setlist, buf);
 +		}
 +	}
 +
diff --git a/procps.changes b/procps.changes
index 4f1a738..87fd05e 100644
--- a/procps.changes
+++ b/procps.changes
@@ -1,3 +1,43 @@
+-------------------------------------------------------------------
+Tue Jul 30 07:14:45 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
+
+- Switch to procps 4 branch, absorbing the former procps4 package:
+  + Add provides/obsoletes procps4: make zypper replace procps4
+    with the main package for users that manually switched.
+- Aligning to the existing procps4 package, drop/add/modify
+  patches:
+  A    79042e07.patch
+  A    procps-ng-4.0.0-integer-overflow.patch
+  A    procps-ng-4.0.4-ignore-sysctl_conf.patch
+  A    procps-ng-4.0.4-pmapX-not-twice-anymore.patch
+  A    procps-ng-4.0.0-floats.dif
+  D    CVE-2023-4016.patch
+  D    bsc1195468-23da4f40.patch
+  D    procps-3.3.17-bsc1181976.patch
+  D    procps-3.3.17-ignore-sysctl_conf.patch
+  D    procps-3.3.17-library-bsc1181475.patch
+  D    procps-3.3.17-top-bsc1181475.patch
+  D    procps-ng-3.3.10-integer-overflow.patch
+  D    procps-ng-3.3.10-large_pcpu.patch
+  D    procps-ng-3.3.17-logind.patch
+  D    procps-ng-3.3.8-bnc634840.patch
+  D    procps-ng-3.3.9-watch.patch
+  D    procps-ng-3.3.8-accuracy.dif
+  D    procps-ng-3.3.10-bnc634071_procstat2.diff
+  D    procps-ng-3.3.10-fdleak.dif
+  M    procps-ng-3.3.10-errno.patch
+  M    procps-ng-3.3.10-slab.patch
+  M    procps-ng-3.3.11-pmap4suse.patch
+  M    procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
+  M    procps-ng-3.3.8-petabytes.patch
+  M    procps-ng-3.3.8-readeof.patch
+  M    procps-v3.3.3-pwdx.patch
+
+-------------------------------------------------------------------
+Thu Feb 29 14:34:38 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
+
+- Use %patch -P N instead of deprecated %patchN.
+
 -------------------------------------------------------------------
 Thu Dec 14 13:26:05 UTC 2023 - Thorsten Kukuk <kukuk@suse.com>
 
@@ -14,13 +54,13 @@ Fri Aug 18 09:08:36 UTC 2023 - Dr. Werner Fink <werner@suse.de>
 
 - Modify patches
   * procps-ng-3.3.9-w-notruncate.diff
-  * procps-ng-3.3.17-logind.patch 
+  * procps-ng-3.3.17-logind.patch
   to real to not truncate output of w with option -n
 
 -------------------------------------------------------------------
 Wed Aug 16 13:50:25 UTC 2023 - Thorsten Kukuk <kukuk@suse.com>
 
-- procps-ng-3.3.17-logind.patch: Backport from 4.x git, prefer 
+- procps-ng-3.3.17-logind.patch: Backport from 4.x git, prefer
   logind over utmp (jsc#PED-3144)
 
 -------------------------------------------------------------------
@@ -37,13 +77,13 @@ Tue Dec 27 13:14:52 UTC 2022 - Ludwig Nussel <lnussel@suse.com>
 -------------------------------------------------------------------
 Thu Dec 15 09:45:46 UTC 2022 - Dr. Werner Fink <werner@suse.de>
 
-- Extend patch procps-3.3.17-library-bsc1181475.patch (bsc#1206412) 
+- Extend patch procps-3.3.17-library-bsc1181475.patch (bsc#1206412)
 - Make sure that correct library version is installed (bsc#1206412)
 
 -------------------------------------------------------------------
 Thu Jun 23 11:28:42 UTC 2022 - Dr. Werner Fink <werner@suse.de>
 
-- Some older products do not know about /usr/share/man/uk 
+- Some older products do not know about /usr/share/man/uk
 
 -------------------------------------------------------------------
 Wed Jun 22 12:12:35 UTC 2022 - Dr. Werner Fink <werner@suse.de>
@@ -51,7 +91,7 @@ Wed Jun 22 12:12:35 UTC 2022 - Dr. Werner Fink <werner@suse.de>
 - Add the patches
   * procps-3.3.17-library-bsc1181475.patch
   * procps-3.3.17-top-bsc1181475.patch
-  which are backports of current newlib tree to solve bug bsc#1181475 
+  which are backports of current newlib tree to solve bug bsc#1181475
   * 'free' command reports misleading "used" value
 
 -------------------------------------------------------------------
@@ -63,13 +103,13 @@ Fri Feb  4 09:21:59 UTC 2022 - Dr. Werner Fink <werner@suse.de>
 -------------------------------------------------------------------
 Thu Jan 20 13:17:34 UTC 2022 - Dr. Werner Fink <werner@suse.de>
 
-- Correct used URLs 
+- Correct used URLs
 
 -------------------------------------------------------------------
 Fri Jul  2 13:24:08 UTC 2021 - Dr. Werner Fink <werner@suse.de>
 
 - Skip test suite on emulated riscv64 systems as the qemu process
-  is unexpected on the command lines of processes 
+  is unexpected on the command lines of processes
 
 -------------------------------------------------------------------
 Wed Mar 31 10:18:10 UTC 2021 - Dr. Werner Fink <werner@suse.de>
@@ -93,7 +133,7 @@ Mon Feb 22 18:57:37 UTC 2021 - Antoine Belvire <antoine.belvire@opensuse.org>
 -------------------------------------------------------------------
 Thu Feb 11 08:46:36 UTC 2021 - Dr. Werner Fink <werner@suse.de>
 
-- Add /usr/share/man/uk dir to file list for lang sub package 
+- Add /usr/share/man/uk dir to file list for lang sub package
 
 -------------------------------------------------------------------
 Wed Feb 10 17:32:06 UTC 2021 - Antoine Belvire <antoine.belvire@opensuse.org>
@@ -338,7 +378,7 @@ Tue Jan 30 09:39:14 UTC 2018 - werner@suse.de
    0001-Preload-sysctl-lines-even-if-longer-than-stdio-buffe.patch
    0002-Add-flexible-buffered-I-O-based-on-fopencookie-3.patch
    0003-Use-new-standard-I-O-for-reading-writing-sysctl-valu.patch
-  from my project https://gitlab.com/bitstreamout/procps/tree/procio 
+  from my project https://gitlab.com/bitstreamout/procps/tree/procio
   which implements a flexible buffer for reading and writing values
   below /proc/sys (bsc#1039941)
 
@@ -380,7 +420,7 @@ Mon May 22 08:25:17 UTC 2017 - werner@suse.de
 -------------------------------------------------------------------
 Wed Apr 26 12:45:15 UTC 2017 - werner@suse.de
 
-- Explain option --no-truncate of command w 
+- Explain option --no-truncate of command w
 
 -------------------------------------------------------------------
 Thu Jan 19 12:20:06 UTC 2017 - werner@suse.de
@@ -398,12 +438,12 @@ Mon Dec 12 13:42:04 UTC 2016 - dimstar@opensuse.org
 -------------------------------------------------------------------
 Tue Aug  9 16:08:03 UTC 2016 - werner@suse.de
 
-- Avoid fillup and insserv on modern systems (bsc#992845) 
+- Avoid fillup and insserv on modern systems (bsc#992845)
 
 -------------------------------------------------------------------
 Tue Jul 12 16:01:19 UTC 2016 - werner@suse.de
 
-- Use test suite but avoid the w command due dummy utmp 
+- Use test suite but avoid the w command due dummy utmp
   * This requires dejagnu for the runtest command
   * This requires screen to be able to provide a tty
 - Add patch procps-ng-3.3.12-strtod.patch to fix missed extern
@@ -595,7 +635,7 @@ Fri Jan 23 15:53:29 UTC 2015 - werner@suse.de
 Tue Dec 16 15:32:40 UTC 2014 - werner@suse.de
 
 - Add upstream patch bsc901202-add-better-help-output.patch
-  which includes the commits 
+  which includes the commits
   0f649e2cd2eef94075f1975248953f8c5b85d9f4
   4ba9ff5c0df7e94d03a555ac4cec947f6fac2ba6
   b4951bfea367eef551b053e9f0240d717c353c11
@@ -773,7 +813,7 @@ Tue Mar 25 12:43:12 CET 2014 - tiwai@suse.de
 Tue Dec 17 13:17:36 UTC 2013 - werner@suse.de
 
 - Change patch procps-ng-3.3.8-accuracy.dif to really use finally
-  jiffies to calculate %CPU output (bnc#855861) 
+  jiffies to calculate %CPU output (bnc#855861)
 
 -------------------------------------------------------------------
 Mon Oct  7 13:35:36 UTC 2013 - werner@suse.de
@@ -813,7 +853,7 @@ Wed Jun 26 14:17:34 UTC 2013 - werner@suse.de
 
 - Add tow upstream patches
   0001-top-trade-two-groff_mdoc-macros-for-groff-equivalent.patch
-  0002-library-for-atexit-support-fix-fileutils-for-EPIPE.patch 
+  0002-library-for-atexit-support-fix-fileutils-for-EPIPE.patch
 
 -------------------------------------------------------------------
 Fri Jun 21 11:45:19 UTC 2013 - werner@suse.de
@@ -884,7 +924,7 @@ Sun Feb 10 21:24:36 UTC 2013 - crrodriguez@opensuse.org
 -------------------------------------------------------------------
 Tue Jan 15 11:11:48 UTC 2013 - werner@suse.de
 
-- Make rpmlint happy 
+- Make rpmlint happy
 
 -------------------------------------------------------------------
 Fri Jan 11 16:35:15 UTC 2013 - jengelh@inai.de
@@ -900,7 +940,7 @@ Tue Dec 18 17:47:48 UTC 2012 - werner@suse.de
 -------------------------------------------------------------------
 Tue Oct 30 14:34:52 UTC 2012 - werner@suse.de
 
-- Update to procps-ng-3.3.5 
+- Update to procps-ng-3.3.5
   * Stop SIGFPE on vmstat at times
   * Added debian patch for kfreebsd bug, Debian #674785
   * Bump the soname
@@ -918,7 +958,7 @@ Tue Oct 30 12:35:12 UTC 2012 - werner@suse.de
   * top can display a task's environment
   * top can display major/minor pg fault deltas, Debian #84992
   * top provides additional control over column widths
-  * top offers user controlled left/right justification 
+  * top offers user controlled left/right justification
 
 -------------------------------------------------------------------
 Thu Jul  5 08:13:42 UTC 2012 - werner@suse.de
@@ -930,7 +970,7 @@ Thu Jul  5 08:13:42 UTC 2012 - werner@suse.de
 Wed Jun  6 12:00:54 UTC 2012 - werner@suse.de
 
 - Avoid to be fooled by a former errno due not existing system
-  file as this might cause failing pwdx 
+  file as this might cause failing pwdx
 
 -------------------------------------------------------------------
 Wed Jun  6 11:43:55 UTC 2012 - werner@suse.de
@@ -946,12 +986,12 @@ Wed Jun  6 11:17:37 UTC 2012 - werner@suse.de
 -------------------------------------------------------------------
 Wed Jun  6 10:35:41 UTC 2012 - werner@suse.de
 
-- Make /bin -> /usr/bin a %bcond 
+- Make /bin -> /usr/bin a %bcond
 
 -------------------------------------------------------------------
 Wed Jun  6 09:44:35 UTC 2012 - werner@suse.de
 
-- Allow SUSE specific pmap to list results for more than one pid 
+- Allow SUSE specific pmap to list results for more than one pid
 
 -------------------------------------------------------------------
 Wed Jun  6 09:30:13 UTC 2012 - werner@suse.de
@@ -1114,7 +1154,7 @@ Fri Aug 26 09:36:03 UTC 2011 - lnussel@suse.de
 -------------------------------------------------------------------
 Wed Aug 24 10:09:36 UTC 2011 - werner@suse.de
 
-- Add large (p)cpu patch from Tony Ernst (bnc#713482) 
+- Add large (p)cpu patch from Tony Ernst (bnc#713482)
 - Add petabytes patch from Tony Ernst (bnc#713482)
 
 -------------------------------------------------------------------
@@ -1140,7 +1180,7 @@ Thu May  5 17:49:30 CEST 2011 - jeffm@suse.de
 -------------------------------------------------------------------
 Tue Mar 22 17:31:22 UTC 2011 - idoenmez@novell.com
 
-- Fix procps-3.2.8.dif: use -Wl for linker options 
+- Fix procps-3.2.8.dif: use -Wl for linker options
 
 -------------------------------------------------------------------
 Fri Dec  3 17:56:27 CET 2010 - werner@suse.de
@@ -1449,7 +1489,7 @@ Wed Mar 15 12:15:48 CET 2006 - hvogel@suse.de
 -------------------------------------------------------------------
 Mon Feb 20 11:59:10 CET 2006 - hvogel@suse.de
 
-- dont crash if a CPU is hotplugged [#151285] 
+- dont crash if a CPU is hotplugged [#151285]
 
 -------------------------------------------------------------------
 Wed Feb  8 17:04:55 CET 2006 - hvogel@suse.de
@@ -1583,7 +1623,7 @@ Tue Aug  3 22:45:52 CEST 2004 - garloff@suse.de
 -------------------------------------------------------------------
 Wed Jun  2 14:05:27 CEST 2004 - uli@suse.de
 
-- fixed crash in small terminal (bug #37651) 
+- fixed crash in small terminal (bug #37651)
 
 -------------------------------------------------------------------
 Tue Mar 30 13:19:14 CEST 2004 - stepan@suse.de
@@ -1594,9 +1634,9 @@ Tue Mar 30 13:19:14 CEST 2004 - stepan@suse.de
    * ps: STAT flags for fg process group and session leader
    * ps: STAT flags for swapped out process dropped (was broken)
    * ps: new -M and Z options for security data (SE Linux, etc.)
-   * slabtop: detect broken /proc/slabinfo -- thanks to Fabian 
+   * slabtop: detect broken /proc/slabinfo -- thanks to Fabian
      Frederick
-   * slabtop: ensure that error messages show up on the screen -- 
+   * slabtop: ensure that error messages show up on the screen --
      FF again
 
 -------------------------------------------------------------------
@@ -1732,11 +1772,11 @@ Mon Jul 14 10:15:14 CEST 2003 - stepan@suse.de
   * vmstat: -m displays slabinfo
   * vmstat: -d displays disk stats
 - update psmisc to 21.3 (has our patch included)
-  * SELinux SID selection uses -d instead of -S to stop the 
+  * SELinux SID selection uses -d instead of -S to stop the
     confusion of signal names.
   * Doesnt segfault on long cmdnames, thanks Ben Low
   * More fixes for types, also some GCC 3.2 fixes
-  * Changed a long to a long long in pstree. 
+  * Changed a long to a long long in pstree.
 
 -------------------------------------------------------------------
 Fri Jul  4 13:50:34 CEST 2003 - stepan@suse.de
@@ -1785,7 +1825,7 @@ Fri Mar 21 14:01:41 CET 2003 - stepan@suse.de
 
 - update procps to 3.1.8
 - update xcpustate to 2.6beta
-- fix build on itanium 
+- fix build on itanium
 
 -------------------------------------------------------------------
 Wed Mar  5 17:25:45 CET 2003 - stepan@suse.de
@@ -1857,7 +1897,7 @@ Fri Aug 16 13:54:35 CEST 2002 - werner@suse.de
 -------------------------------------------------------------------
 Thu Aug 15 23:24:08 CEST 2002 - ro@suse.de
 
-- modify required-start in boot.sysctl: boot.setup is gone 
+- modify required-start in boot.sysctl: boot.setup is gone
 
 -------------------------------------------------------------------
 Tue Aug  6 13:49:58 CEST 2002 - werner@suse.de
@@ -1867,14 +1907,14 @@ Tue Aug  6 13:49:58 CEST 2002 - werner@suse.de
 -------------------------------------------------------------------
 Mon Aug  5 09:38:42 CEST 2002 - kukuk@suse.de
 
-- boot.sysclt: rename serial to setserial, setserial and 
+- boot.sysclt: rename serial to setserial, setserial and
   boot.isapnp are "should-start".
 
 -------------------------------------------------------------------
 Wed Mar 20 14:57:38 CET 2002 - ro@suse.de
 
 - boot.sysctl: don't write out sysctl.conf if it doesn't exist
-  sysctl can't read the file of a complete dump 
+  sysctl can't read the file of a complete dump
 
 -------------------------------------------------------------------
 Fri Feb 22 17:03:16 CET 2002 - werner@suse.de
@@ -1886,17 +1926,17 @@ Fri Feb 22 17:03:16 CET 2002 - werner@suse.de
 -------------------------------------------------------------------
 Fri Feb  1 12:50:25 CET 2002 - ro@suse.de
 
-- added stop/status for sysctl boot script 
+- added stop/status for sysctl boot script
 
 -------------------------------------------------------------------
 Mon Jan 21 17:47:45 CET 2002 - ro@suse.de
 
-- added boot-script for sysctl (inactive by default) 
+- added boot-script for sysctl (inactive by default)
 
 -------------------------------------------------------------------
 Mon Jan  7 17:11:39 CET 2002 - ro@suse.de
 
-- fixed segfault (thanks to andreas) 
+- fixed segfault (thanks to andreas)
 
 -------------------------------------------------------------------
 Thu Dec 20 16:41:52 CET 2001 - werner@suse.de
@@ -1947,7 +1987,7 @@ Fri Apr 20 18:37:14 CEST 2001 - werner@suse.de
 -------------------------------------------------------------------
 Thu Mar 29 18:47:33 CEST 2001 - ro@suse.de
 
-- initialize page_size before first use 
+- initialize page_size before first use
 
 -------------------------------------------------------------------
 Wed Mar 28 11:40:36 CEST 2001 - schwab@suse.de
@@ -2017,7 +2057,7 @@ Wed Dec 13 15:58:47 CET 2000 - werner@suse.de
 -------------------------------------------------------------------
 Mon Dec  4 09:11:51 CET 2000 - ro@suse.de
 
-- don't try to strip man-pages 
+- don't try to strip man-pages
 
 -------------------------------------------------------------------
 Wed Nov 22 18:50:56 CET 2000 - uli@suse.de
@@ -2033,12 +2073,12 @@ Fri Nov 17 09:44:00 CET 2000 - ro@suse.de
 Sat May 27 11:56:10 CEST 2000 - kukuk@suse.de
 
 - Add Group tag
-- Use docdir macro 
+- Use docdir macro
 
 -------------------------------------------------------------------
 Mon May  8 15:16:39 CEST 2000 - ro@suse.de
 
-- procinfo fixed for smp/alpha 
+- procinfo fixed for smp/alpha
 
 -------------------------------------------------------------------
 Mon Feb 28 18:44:11 CET 2000 - werner@suse.de
@@ -2064,7 +2104,7 @@ Fri Feb  4 14:53:50 CET 2000 - kasal@suse.cz
 -------------------------------------------------------------------
 Wed Jan 19 15:06:13 MET 2000 - ro@suse.de
 
-- usr/man -> usr/share/man 
+- usr/man -> usr/share/man
 
 -------------------------------------------------------------------
 Wed Jan 19 12:52:12 CET 2000 - kasal@suse.de
@@ -2089,7 +2129,7 @@ Fri Dec  3 18:52:38 CET 1999 - kasal@suse.de
 -------------------------------------------------------------------
 Wed Nov 24 17:09:50 CET 1999 - kettner@suse.de
 
-- fixed bug in procinfo on AXP 
+- fixed bug in procinfo on AXP
 
 -------------------------------------------------------------------
 Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
@@ -2139,7 +2179,7 @@ Fri Oct 30 16:03:32 MET 1998 - ro@suse.de
 
 - update to procinfo-15 and procps-1.2.9
 - extra source for xcpustate-2.5 (no more in procps)
-- patched xcpustate to display mem,swap,net for linux 
+- patched xcpustate to display mem,swap,net for linux
 
 -------------------------------------------------------------------
 Thu May  7 09:52:22 MEST 1998 - florian@suse.de
@@ -2163,7 +2203,7 @@ Mon Mar  2 16:26:13 MET 1998 - florian@suse.de
 -------------------------------------------------------------------
 Fri Oct 17 12:57:28 MEST 1997 - ro@suse.de
 
-- ready for autobuild 
+- ready for autobuild
 
 -------------------------------------------------------------------
 Sat Jul  5 10:08:27 MEST 1997 - florian@suse.de
diff --git a/procps.keyring b/procps.keyring
new file mode 100644
index 0000000..02a47c0
--- /dev/null
+++ b/procps.keyring
@@ -0,0 +1,170 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=enAj
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/procps.spec b/procps.spec
index 71fc07f..eac3417 100644
--- a/procps.spec
+++ b/procps.spec
@@ -1,7 +1,7 @@
 #
 # spec file for package procps
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,8 +16,8 @@
 #
 
 
-%define somajor 8
-%define libname libprocps%{somajor}
+%define somajor 0
+%define libname libproc2-%{somajor}
 %if 0%{?suse_version} < 1550
 %bcond_with     bin2usr
 %else
@@ -26,30 +26,28 @@
 %bcond_without  pidof
 %bcond_without  nls
 Name:           procps
-Version:        3.3.17
+Version:        4.0.4
 Release:        0
 Summary:        The ps utilities for /proc
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later
 Group:          System/Monitoring
 URL:            https://sf.net/projects/procps-ng/
 Source:         https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-%{version}.tar.xz
+Source1:        https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-%{version}.tar.xz.asc
 #Alternate:     https://gitlab.com/procps-ng/procps/-/archive/v%{version}/procps-v%{version}.tar.gz
-Source1:        procps-rpmlintrc
-Patch0:         procps-ng-3.3.9-watch.patch
+Source2:        procps-rpmlintrc
+Source3:        procps.keyring
+# PATCH-FIX-USTREAM -- w: Don't crash when using short option
+Patch0:         79042e07.patch
 Patch1:         procps-v3.3.3-ia64.diff
 Patch3:         procps-ng-3.3.9-w-notruncate.diff
 Patch7:         procps-ng-3.3.8-readeof.patch
 Patch8:         procps-ng-3.3.10-slab.patch
-Patch10:        procps-ng-3.3.8-accuracy.dif
 Patch11:        procps-ng-3.3.10-xen.dif
-Patch12:        procps-ng-3.3.10-fdleak.dif
 Patch13:        procps-v3.3.3-columns.dif
-Patch14:        procps-ng-3.3.10-integer-overflow.patch
-Patch15:        procps-ng-3.3.10-bnc634071_procstat2.diff
-Patch16:        procps-ng-3.3.8-bnc634840.patch
+Patch14:        procps-ng-4.0.0-integer-overflow.patch
 Patch17:        procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff
 Patch18:        procps-ng-3.3.8-petabytes.patch
-Patch19:        procps-ng-3.3.10-large_pcpu.patch
 Patch20:        procps-ng-3.3.8-tinfo.dif
 Patch21:        procps-v3.3.3-pwdx.patch
 # PATCH-FIX-OPENSUSE -- trifle rest of the old terabyte patch
@@ -60,20 +58,16 @@ Patch31:        procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
 Patch32:        procps-ng-3.3.10-errno.patch
 # PATCH-FEATURE-SUSE -- Let upstream pmap behave similar to old suse pmap
 Patch33:        procps-ng-3.3.11-pmap4suse.patch
-# PATCH-FIX-UPSTREAM -- bsc#1181976
-Patch34:        procps-3.3.17-bsc1181976.patch
-# PATCH-FIX-UPSTREAM -- bsc#1195468
-Patch35:        bsc1195468-23da4f40.patch
-# PATCH-FIX-UPSTREAM -- bsc#1214290
-Patch36:        CVE-2023-4016.patch
-# PATCH-BACKPORT-FROM-UPSTREAM -- bsc#1181475: 'free' command reports misleading "used" value
-Patch42:        procps-3.3.17-library-bsc1181475.patch
-Patch43:        procps-3.3.17-top-bsc1181475.patch
-Patch44:        procps-ng-3.3.17-logind.patch
-Patch45:        procps-3.3.17-ignore-sysctl_conf.patch
+# PATCH-FIX-SUSE -- Avoid float errors on 32bit architectures
+Patch37:        procps-ng-4.0.0-floats.dif
+# PATCH-FIX-SUSE -- with 4.0.4 the totals on -X option are always reset for each pid
+Patch38:        procps-ng-4.0.4-pmapX-not-twice-anymore.patch
+# PATCH-FIX-SUSE -- ignore dangling symlink to missing /etc/sysctl.conf file
+Patch39:        procps-ng-4.0.4-ignore-sysctl_conf.patch
 BuildRequires:  automake
 BuildRequires:  dejagnu
 BuildRequires:  diffutils
+BuildRequires:  libnuma-devel
 BuildRequires:  libselinux-devel
 BuildRequires:  libtool
 BuildRequires:  ncurses-devel
@@ -81,13 +75,10 @@ BuildRequires:  pkgconfig
 BuildRequires:  screen
 BuildRequires:  xz
 BuildRequires:  pkgconfig(libsystemd)
+Provides:       procps4 = %{version}
+Obsoletes:      procps4 <= 4.0.4
 Provides:       ps = %{version}-%{release}
 Obsoletes:      ps < %{version}-%{release}
-Requires:       %{libname} = %{version}-%{release}
-%ifarch ia64 x86_64 ppc64 ppc %{sparc}
-BuildRequires:  libnuma-devel
-%endif
-%lang_package
 
 %description
 The procps package contains a set of system utilities that provide
@@ -107,11 +98,23 @@ logged on and what they are running. The watch program watches a
 running program. The vmstat command displays virtual memory statistics
 about processes, memory, paging, block I/O, traps, and CPU activity.
 
+%package lang
+Summary:        Translations for package %{name}
+Group:          System/Localization
+Requires:       %{name} = %{version}
+Provides:       %{name}-lang-all = %{version}
+Obsoletes:      procps4-lang <= 4.0.4
+BuildArch:      noarch
+
+%description lang
+Provides translations for the "%{name}" package.
+
 %package devel
 Summary:        Development files for procps
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later
 Group:          Development/Libraries/C and C++
 Requires:       %{libname} = %{version}
+Obsoletes:      procps4-devel <= 4.0.4
 
 %description devel
 The procps library can be used to read informations out from /proc
@@ -129,40 +132,35 @@ The procps library can be used to read informations out from /proc
 the process information pseudo-file system.
 
 %prep
-%setup -q
-%patch0
-%patch1
-%patch3 -b .trcate
-%patch7 -b .rof
-%patch8 -b .cache
-%patch10 -b .acc
-%patch11
-%patch12
-%patch13 -b .column
-%patch14 -b .ovrflw
-%patch15
-%patch16
-%patch17 -b .sysctl
-%patch18
-%patch19
-%patch20
-%patch21
-%patch28
-%patch31 -p1
-%patch32
-%patch33 -b .pmap4us
-%patch34
-%patch35 -p1
-%patch36 -p0
-%patch42
-%patch43
-%patch44 -p1
-%patch45 -p1
+%setup -q -n procps-ng-%{version}
+%patch -P0 -p1
+%patch -P1
+%patch -P3 -p1 -b .trcate
+%patch -P7 -b .rof
+%patch -P8 -b .cache
+%patch -P11
+%patch -P13 -b .column
+%patch -P14 -b .ovrflw
+%patch -P17 -b .sysctl
+%patch -P18
+%patch -P20 -b .p20
+%patch -P21
+%patch -P28
+%patch -P31 -p1
+%patch -P32 -b .p32
+%patch -P33 -b .pmap4us
+%patch -P37
+%patch -P38
+%patch -P39
 
 %build
 test -s .tarball-version || echo %{version} > .tarball-version
-#./autogen.sh
-autoreconf -fiv
+if test -f po/Makefile.in.in
+then
+    autoreconf -fiv
+else
+    sh ./autogen.sh
+fi
 major=$(sed -rn 's/^#define\s+NCURSES_VERSION_MAJOR\s+([0-9]+)/\1/p' %{_includedir}/ncurses.h)
 export NCURSESW_CFLAGS="$(ncursesw${major}-config --cflags)"
 export NCURSESW_LIBS="$(ncursesw${major}-config --libs)"
@@ -194,7 +192,7 @@ export LFS_CFLAGS="$(getconf LFS_CFLAGS)"
 %make_build
 
 LD_LIBRARY_PATH=$PWD/proc/.libs \
-./pmap $$ || {
+./src/pmap $$ || {
     uname -a
     echo /proc/$$/maps
     cat  /proc/$$/maps
@@ -218,11 +216,11 @@ rm -f %{buildroot}%{_mandir}/*/man1/uptime.1
 find %{buildroot} -type f -name "*.la" -delete -print
 rm -rf %{buildroot}%{_datadir}/doc/procps-ng
 
-if cmp -s %{buildroot}%{_mandir}/man1/procps.1 %{buildroot}%{_mandir}/man1/ps.1
+if cmp -s %{buildroot}%{_mandir}/man1/pidwait.1 %{buildroot}%{_mandir}/man1/pkill.1
 then
-    rm -vf %{buildroot}%{_mandir}/man1/procps.1
-    (cat > %{buildroot}%{_mandir}/man1/procps.1)<<-'EOF'
-	.so man1/ps.1
+    rm -vf %{buildroot}%{_mandir}/man1/pidwait.1
+    (cat > %{buildroot}%{_mandir}/man1/pidwait.1)<<-'EOF'
+	.so man1/pkill.1
 	EOF
 fi
 
@@ -284,6 +282,10 @@ ln -s /sbin/sysctl %{buildroot}%{_sbindir}/sysctl
 %postun -n %{libname} -p /sbin/ldconfig
 
 %check
+set +x
+ls -ld /proc/[a-z]*
+cat /proc/stat
+set -x
 #
 # Skip w test as there is no valid utmp
 #
@@ -294,11 +296,13 @@ rm -rvf testsuite/w.test
 LANG=POSIX
 LC_ALL=$LANG
 unset LC_CTYPE
+TMPDIR=$(mktemp -d /tmp/bash.XXXXXXXXXX) || exit 1
 SCREENDIR=$(mktemp -d ${PWD}/screen.XXXXXX) || exit 1
 SCREENRC=${SCREENDIR}/bash
 export SCREENRC SCREENDIR
 exec 0< /dev/null
 SCREENLOG=${SCREENDIR}/log
+> $SCREENLOG
 cat > $SCREENRC<<-EOF
 	deflogin off
 	deflog on
@@ -311,17 +315,17 @@ cat > $SCREENRC<<-EOF
 	silence on
 	utf8 on
 	EOF
-TMPDIR=$(mktemp -d /tmp/bash.XXXXXXXXXX) || exit 1
-> $SCREENLOG
 tail -q -s 0.5 -f $SCREENLOG & pid=$!
 env HOME=$PWD TERM=$TERM TMPDIR=$TMPDIR SCREENRC=$SCREENRC SCREENDIR=$SCREENDIR \
   screen -D -m make check
+sleep 1
 kill -TERM $pid
 error=no
-for log in test-suite.log testsuite/*.log
+for log in testsuite/*.log test-suite.log
 do
     if grep -E '^(XFAIL|FAIL|ERROR):' $log
     then
+        echo Check $log
 	cat $log
 	error=yes
     fi
@@ -338,7 +342,7 @@ test $error = no || exit 1
 %files
 %defattr (-,root,root,755)
 %license COPYING COPYING.LIB
-%doc NEWS Documentation/bugs.md Documentation/FAQ
+%doc NEWS doc/bugs.md doc/FAQ
 %if %{with bin2usr}
 %if 0%{?suse_version} < 1550
 %verify(link) /bin/ps
@@ -365,7 +369,7 @@ test $error = no || exit 1
 %{_bindir}/pidof
 %endif
 %{_bindir}/pmap
-%{_bindir}/pwait
+%{_bindir}/pidwait
 %{_bindir}/pwdx
 %{_bindir}/skill
 %{_bindir}/slabtop
@@ -382,9 +386,8 @@ test $error = no || exit 1
 %endif
 %{_mandir}/man1/pkill.1%{?ext_man}
 %{_mandir}/man1/pmap.1%{?ext_man}
-%{_mandir}/man1/procps.1%{?ext_man}
 %{_mandir}/man1/ps.1%{?ext_man}
-%{_mandir}/man1/pwait.1%{?ext_man}
+%{_mandir}/man1/pidwait.1%{?ext_man}
 %{_mandir}/man1/pwdx.1%{?ext_man}
 %{_mandir}/man1/skill.1%{?ext_man}
 %{_mandir}/man1/slabtop.1%{?ext_man}
@@ -399,33 +402,18 @@ test $error = no || exit 1
 
 %files devel
 %defattr (-,root,root,755)
-%dir %{_includedir}/proc
-%{_includedir}/proc/alloc.h
-%{_includedir}/proc/devname.h
-%{_includedir}/proc/escape.h
-%{_includedir}/proc/numa.h
-%{_includedir}/proc/procps.h
-%{_includedir}/proc/pwcache.h
-%{_includedir}/proc/readproc.h
-%{_includedir}/proc/sig.h
-%{_includedir}/proc/slab.h
-%{_includedir}/proc/sysinfo.h
-%{_includedir}/proc/version.h
-%{_includedir}/proc/wchan.h
-%{_includedir}/proc/whattime.h
-%{_libdir}/libprocps.so
-%{_libdir}/pkgconfig/libprocps.pc
-%{_mandir}/man3/openproc.3%{?ext_man}
-%{_mandir}/man3/readproc.3%{?ext_man}
-%{_mandir}/man3/readproctab.3%{?ext_man}
+%dir %{_includedir}/libproc2/
+%{_includedir}/libproc2/*.h
+%{_libdir}/libproc2.so
+%{_libdir}/pkgconfig/libproc2.pc
+%{_mandir}/man3/procps.3%{?ext_man}
+%{_mandir}/man3/procps_misc.3%{?ext_man}
+%{_mandir}/man3/procps_pids.3%{?ext_man}
 
 %files -n %{libname}
 %defattr (-,root,root,755)
-%{_libdir}/libprocps.so.%{somajor}*
+%{_libdir}/libproc2.so.%{somajor}*
 
 %files lang -f procps-ng.lang
-%if 0%{?suse_version} < 1550
-%dir %{_mandir}/uk/
-%endif
 
 %changelog