diff --git a/library/uptime.c b/library/uptime.c index 16f1b05d..bb9344a2 100644 --- a/library/uptime.c +++ b/library/uptime.c @@ -31,6 +31,12 @@ #include #include #include +#ifdef WITH_SYSTEMD +#include +#endif +#ifdef WITH_ELOGIND +#include +#endif #include "misc.h" #include "procps-private.h" @@ -45,6 +51,13 @@ static int count_users(void) int numuser = 0; struct utmp *ut; +#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) + numuser = sd_get_sessions(NULL); + + if (numuser >= 0 || numuser != ENOENT) + return numuser; +#endif + setutent(); while ((ut = getutent())) { if ((ut->ut_type == USER_PROCESS) && (ut->ut_name[0] != '\0')) @@ -136,8 +149,13 @@ PROCPS_EXPORT char *procps_uptime_sprint(void) users = count_users(); procps_loadavg(&av1, &av5, &av15); - pos += sprintf(upbuf + pos, "%2d %s, load average: %.2f, %.2f, %.2f", - users, users > 1 ? "users" : "user", + if (users < 0) + pos += sprintf(upbuf + pos, " ? "); + else + pos += sprintf(upbuf + pos, "%2d ", users); + + pos += sprintf(upbuf + pos, "%s, load average: %.2f, %.2f, %.2f", + users > 1 ? "users" : "user", av1, av5, av15); return upbuf; @@ -248,4 +266,3 @@ PROCPS_EXPORT char *procps_uptime_sprint_short(void) } return shortbuf; } -