summaryrefslogtreecommitdiff
path: root/system/procps/use-utmpx.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/procps/use-utmpx.patch')
-rw-r--r--system/procps/use-utmpx.patch132
1 files changed, 132 insertions, 0 deletions
diff --git a/system/procps/use-utmpx.patch b/system/procps/use-utmpx.patch
new file mode 100644
index 000000000..83047cf22
--- /dev/null
+++ b/system/procps/use-utmpx.patch
@@ -0,0 +1,132 @@
+diff --git a/configure.ac b/configure.ac
+index bc84a0d..da2916e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -44,7 +44,7 @@ AC_PROG_MAKE_SET
+
+ # Checks for header files.
+ AC_HEADER_MAJOR
+-AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h langinfo.h libintl.h limits.h locale.h netinet/in.h stdint.h stdio_ext.h stdlib.h string.h sys/file.h sys/ioctl.h sys/param.h sys/time.h termios.h unistd.h utmp.h values.h wchar.h wctype.h])
++AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h langinfo.h libintl.h limits.h locale.h netinet/in.h stdint.h stdio_ext.h stdlib.h string.h sys/file.h sys/ioctl.h sys/param.h sys/time.h termios.h unistd.h utmp.h utmpx.h values.h wchar.h wctype.h])
+
+ # Checks for typedefs, structures, and compiler characteristics.
+ AC_CHECK_HEADER_STDBOOL
+diff --git a/proc/whattime.c b/proc/whattime.c
+index c223cad..d55fd22 100644
+--- a/proc/whattime.c
++++ b/proc/whattime.c
+@@ -33,7 +33,7 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <time.h>
+-#include <utmp.h>
++#include <utmpx.h>
+ #include <sys/ioctl.h>
+ #include "whattime.h"
+ #include "sysinfo.h"
+@@ -42,7 +42,7 @@ static char buf[256];
+ static double av[3];
+
+ char *sprint_uptime(int human_readable) {
+- struct utmp *utmpstruct;
++ struct utmpx *utmpstruct;
+ int upminutes, uphours, updays, upweeks, upyears, updecades;
+ int pos;
+ int comma;
+@@ -98,13 +98,13 @@ char *sprint_uptime(int human_readable) {
+ /* count the number of users */
+
+ numuser = 0;
+- setutent();
+- while ((utmpstruct = getutent())) {
++ setutxent();
++ while ((utmpstruct = getutxent())) {
+ if ((utmpstruct->ut_type == USER_PROCESS) &&
+ (utmpstruct->ut_name[0] != '\0'))
+ numuser++;
+ }
+- endutent();
++ endutxent();
+
+ pos += sprintf(buf + pos, "%2d user%s, ", numuser, numuser == 1 ? "" : "s");
+
+diff --git a/w.c b/w.c
+index 35710a3..6caa8a6 100644
+--- a/w.c
++++ b/w.c
+@@ -23,6 +23,7 @@
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#include "config.h"
+ #include "c.h"
+ #include "fileutils.h"
+ #include "nls.h"
+@@ -54,14 +55,22 @@
+ #include <termios.h>
+ #include <time.h>
+ #include <unistd.h>
+-#include <utmp.h>
++#ifdef HAVE_UTMPX_H
++# include <utmpx.h>
++#else
++# include <utmp.h>
++#endif
+ #include <arpa/inet.h>
+
+ static int ignoreuser = 0; /* for '-u' */
+ static int oldstyle = 0; /* for '-o' */
+ static proc_t **procs; /* our snapshot of the process table */
+
++#ifdef HAVE_UTMPX_H
++typedef struct utmpx utmp_t;
++#else
+ typedef struct utmp utmp_t;
++#endif
+
+ #ifdef W_SHOWFROM
+ # define FROM_STRING "on"
+@@ -604,11 +613,19 @@ int main(int argc, char **argv)
+ printf(_(" IDLE WHAT\n"));
+ }
+
++#ifdef HAVE_UTMPX_H
++ setutxent();
++#else
+ utmpname(UTMP_FILE);
+ setutent();
++#endif
+ if (user) {
+ for (;;) {
++#ifdef HAVE_UTMPX_H
++ u = getutxent();
++#else
+ u = getutent();
++#endif
+ if (unlikely(!u))
+ break;
+ if (u->ut_type != USER_PROCESS)
+@@ -619,7 +636,11 @@ int main(int argc, char **argv)
+ }
+ } else {
+ for (;;) {
++#ifdef HAVE_UTMPX_H
++ u = getutxent();
++#else
+ u = getutent();
++#endif
+ if (unlikely(!u))
+ break;
+ if (u->ut_type != USER_PROCESS)
+@@ -629,7 +650,11 @@ int main(int argc, char **argv)
+ fromlen, ip_addresses);
+ }
+ }
++#ifdef HAVE_UTMPX_H
++ endutxent();
++#else
+ endutent();
++#endif
+
+ return EXIT_SUCCESS;
+ }