Print this page
2989 Eliminate use of LOGNAME_MAX in ON
1166 useradd have warning with name more 8 chars
@@ -17,10 +17,12 @@
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
+ * Copyright (c) 2013 Gary Mills
+ *
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -66,24 +68,19 @@
#include <unistd.h>
#include <limits.h>
#include <priv_utils.h>
/*
- * utmpx defines wider fields for user and line. For compatibility of output,
- * we are limiting these to the old maximums in utmp. Define UTMPX_NAMELEN
- * to use the full lengths.
+ * Use the full lengths from utmpx for user and line.
*/
-#ifndef UTMPX_NAMELEN
-/* XXX - utmp - fix name length */
-#define NMAX (_POSIX_LOGIN_NAME_MAX - 1)
-#define LMAX 12
-#else /* UTMPX_NAMELEN */
-static struct utmpx dummy;
-#define NMAX (sizeof (dummy.ut_user))
-#define LMAX (sizeof (dummy.ut_line))
-#endif /* UTMPX_NAMELEN */
+#define NMAX (sizeof (((struct utmpx *)0)->ut_user))
+#define LMAX (sizeof (((struct utmpx *)0)->ut_line))
+/* Print minimum field widths. */
+#define LOGIN_WIDTH 8
+#define LINE_WIDTH 12
+
#define DIV60(t) ((t+30)/60) /* x/60 rounded */
#ifdef ERR
#undef ERR
#endif
@@ -471,14 +468,16 @@
continue;
if (sel_user && strncmp(ut->ut_name, sel_user, NMAX) != 0)
continue; /* we're looking for somebody else */
if (lflag) { /* -l flag format (w command) */
/* print login name of the user */
- (void) printf("%-*.*s ", NMAX, NMAX, ut->ut_name);
+ (void) printf("%-*.*s ", LOGIN_WIDTH, (int)NMAX,
+ ut->ut_name);
/* print tty user is on */
- (void) printf("%-*.*s", LMAX, LMAX, ut->ut_line);
+ (void) printf("%-*.*s", LINE_WIDTH, (int)LMAX,
+ ut->ut_line);
/* print when the user logged in */
tim = ut->ut_xtime;
(void) prtat(&tim);
@@ -492,12 +491,13 @@
showtotals(findhash((pid_t)ut->ut_pid));
} else { /* standard whodo format */
tim = ut->ut_xtime;
tm = localtime(&tim);
(void) printf("\n%-*.*s %-*.*s %2.1d:%2.2d\n",
- LMAX, LMAX, ut->ut_line,
- NMAX, NMAX, ut->ut_name, tm->tm_hour, tm->tm_min);
+ LINE_WIDTH, (int)LMAX, ut->ut_line,
+ LOGIN_WIDTH, (int)NMAX, ut->ut_name, tm->tm_hour,
+ tm->tm_min);
showproc(findhash((pid_t)ut->ut_pid));
}
}
return (0);
@@ -518,14 +518,15 @@
if (up->p_state == VISITED) /* we already been here */
return;
/* print the data for this process */
if (up->p_state == ZOMBIE)
(void) printf(" %-*.*s %5d %4.1ld:%2.2ld %s\n",
- LMAX, LMAX, " ?", (int)up->p_upid, 0L, 0L, "<defunct>");
+ LINE_WIDTH, (int)LMAX, " ?", (int)up->p_upid, 0L, 0L,
+ "<defunct>");
else if (up->p_state != NONE) {
(void) printf(" %-*.*s %5d %4.1ld:%2.2ld %s\n",
- LMAX, LMAX, getty(up->p_ttyd), (int)up->p_upid,
+ LINE_WIDTH, (int)LMAX, getty(up->p_ttyd), (int)up->p_upid,
up->p_time / 60L, up->p_time % 60L,
up->p_comm);
}
up->p_state = VISITED;