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.
*
* Portions Copyright 2009 Chad Mynhier
*/
@@ -104,11 +106,11 @@
void
Usage()
{
(void) fprintf(stderr, gettext(
- "Usage:\tprstat [-acHJLmrRtTvZ] [-u euidlist] [-U uidlist]\n"
+ "Usage:\tprstat [-acHJLmrRtTvWZ] [-u euidlist] [-U uidlist]\n"
"\t[-p pidlist] [-P cpulist] [-C psrsetlist] [-h lgrouplist]\n"
"\t[-j projidlist] [-k taskidlist] [-z zoneidlist]\n"
"\t[-s key | -S key] [-n nprocs[,nusers]] [-d d|u]\n"
"\t[interval [counter]]\n"));
exit(1);
@@ -276,30 +278,49 @@
if (priocntl(P_PID, getpid(), PC_SETPARMS, (caddr_t)&pcparms) == -1)
Warn(gettext("cannot enter the real time class"));
}
void
-getprojname(projid_t projid, char *str, int len, int noresolve)
+getprojname(projid_t projid, char *str, size_t len, int noresolve,
+ int trunc, size_t width)
{
struct project proj;
+ size_t n;
if (noresolve || getprojbyid(projid, &proj, projbuf, PROJECT_BUFSZ) ==
- NULL)
+ NULL) {
(void) snprintf(str, len, "%-6d", (int)projid);
+ } else {
+ n = mbstowcs(NULL, proj.pj_name, 0);
+ if (n == (size_t)-1)
+ (void) snprintf(str, len, "%-28s", "ERROR");
+ else if (trunc && n > width)
+ (void) snprintf(str, len, "%.*s%c", width - 1,
+ proj.pj_name, '*');
else
(void) snprintf(str, len, "%-28s", proj.pj_name);
+ }
}
void
-getzonename(zoneid_t zoneid, char *str, int len)
+getzonename(zoneid_t zoneid, char *str, size_t len, int trunc, size_t width)
{
char zone_name[ZONENAME_MAX];
+ size_t n;
- if (getzonenamebyid(zoneid, zone_name, sizeof (zone_name)) < 0)
+ if (getzonenamebyid(zoneid, zone_name, sizeof (zone_name)) < 0) {
(void) snprintf(str, len, "%-6d", (int)zoneid);
+ } else {
+ n = mbstowcs(NULL, zone_name, 0);
+ if (n == (size_t)-1)
+ (void) snprintf(str, len, "%-28s", "ERROR");
+ else if (trunc && n > width)
+ (void) snprintf(str, len, "%.*s%c", width - 1,
+ zone_name, '*');
else
(void) snprintf(str, len, "%-28s", zone_name);
+ }
}
/*
* Remove all unprintable characters from process name
*/