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; }