Print this page
2989 Eliminate use of LOGNAME_MAX in ON
1166 useradd have warning with name more 8 chars


   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*


  22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  *
  25  * Portions Copyright 2009 Chad Mynhier
  26  */
  27 
  28 #include <sys/types.h>
  29 #include <sys/param.h>
  30 #include <sys/resource.h>
  31 #include <sys/priocntl.h>
  32 #include <sys/rtpriocntl.h>
  33 #include <sys/tspriocntl.h>
  34 #include <zone.h>
  35 
  36 #include <libintl.h>
  37 #include <limits.h>
  38 #include <wchar.h>
  39 #include <unistd.h>
  40 #include <string.h>
  41 #include <stdlib.h>


  89         if (strchr(format, '\n') == NULL)
  90                 (void) fprintf(stderr, gettext(ERR_FMT), strerror(err));
  91         exit(1);
  92 }
  93 
  94 void
  95 Progname(char *arg0)
  96 {
  97         char *p = strrchr(arg0, '/');
  98         if (p == NULL)
  99                 p = arg0;
 100         else
 101                 p++;
 102         progname = p;
 103 }
 104 
 105 void
 106 Usage()
 107 {
 108         (void) fprintf(stderr, gettext(
 109             "Usage:\tprstat [-acHJLmrRtTvZ] [-u euidlist] [-U uidlist]\n"
 110             "\t[-p pidlist] [-P cpulist] [-C psrsetlist] [-h lgrouplist]\n"
 111             "\t[-j projidlist] [-k taskidlist] [-z zoneidlist]\n"
 112             "\t[-s key | -S key] [-n nprocs[,nusers]] [-d d|u]\n"
 113             "\t[interval [counter]]\n"));
 114         exit(1);
 115 }
 116 
 117 int
 118 Atoi(char *p)
 119 {
 120         int i;
 121         char *q;
 122         errno = 0;
 123         i = (int)strtol(p, &q, 10);
 124         if (errno != 0 || q == p || i < 0 || *q != '\0')
 125                 Die(gettext("illegal argument -- %s\n"), p);
 126                 /*NOTREACHED*/
 127         else
 128                 return (i);
 129         return (0);     /* keep gcc happy */


 261 
 262 void
 263 Priocntl(char *class)
 264 {
 265         pcinfo_t pcinfo;
 266         pcparms_t pcparms;
 267         (void) strcpy(pcinfo.pc_clname, class);
 268         if (priocntl(0, 0, PC_GETCID, (caddr_t)&pcinfo) == -1) {
 269                 Warn(gettext("cannot get real time class parameters"));
 270                 return;
 271         }
 272         pcparms.pc_cid = pcinfo.pc_cid;
 273         ((rtparms_t *)pcparms.pc_clparms)->rt_pri = 0;
 274         ((rtparms_t *)pcparms.pc_clparms)->rt_tqsecs = 0;
 275         ((rtparms_t *)pcparms.pc_clparms)->rt_tqnsecs = RT_NOCHANGE;
 276         if (priocntl(P_PID, getpid(), PC_SETPARMS, (caddr_t)&pcparms) == -1)
 277                 Warn(gettext("cannot enter the real time class"));
 278 }
 279 
 280 void
 281 getprojname(projid_t projid, char *str, int len, int noresolve)

 282 {
 283         struct project proj;

 284 
 285         if (noresolve || getprojbyid(projid, &proj, projbuf, PROJECT_BUFSZ) ==
 286             NULL)
 287                 (void) snprintf(str, len, "%-6d", (int)projid);







 288         else
 289                 (void) snprintf(str, len, "%-28s", proj.pj_name);

 290 }
 291 
 292 void
 293 getzonename(zoneid_t zoneid, char *str, int len)
 294 {
 295         char zone_name[ZONENAME_MAX];

 296 
 297         if (getzonenamebyid(zoneid, zone_name, sizeof (zone_name)) < 0)
 298                 (void) snprintf(str, len, "%-6d", (int)zoneid);







 299         else
 300                 (void) snprintf(str, len, "%-28s", zone_name);

 301 }
 302 
 303 /*
 304  * Remove all unprintable characters from process name
 305  */
 306 void
 307 stripfname(char *buf)
 308 {
 309         int bytesleft = PRFNSZ;
 310         wchar_t wchar;
 311         int length;
 312         char *cp;
 313 
 314         buf[bytesleft - 1] = '\0';
 315 
 316         for (cp = buf; *cp != '\0'; cp += length) {
 317                 length = mbtowc(&wchar, cp, MB_LEN_MAX);
 318                 if (length <= 0) {
 319                         *cp = '\0';
 320                         break;


   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2013 Gary Mills
  23  *
  24  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  25  * Use is subject to license terms.
  26  *
  27  * Portions Copyright 2009 Chad Mynhier
  28  */
  29 
  30 #include <sys/types.h>
  31 #include <sys/param.h>
  32 #include <sys/resource.h>
  33 #include <sys/priocntl.h>
  34 #include <sys/rtpriocntl.h>
  35 #include <sys/tspriocntl.h>
  36 #include <zone.h>
  37 
  38 #include <libintl.h>
  39 #include <limits.h>
  40 #include <wchar.h>
  41 #include <unistd.h>
  42 #include <string.h>
  43 #include <stdlib.h>


  91         if (strchr(format, '\n') == NULL)
  92                 (void) fprintf(stderr, gettext(ERR_FMT), strerror(err));
  93         exit(1);
  94 }
  95 
  96 void
  97 Progname(char *arg0)
  98 {
  99         char *p = strrchr(arg0, '/');
 100         if (p == NULL)
 101                 p = arg0;
 102         else
 103                 p++;
 104         progname = p;
 105 }
 106 
 107 void
 108 Usage()
 109 {
 110         (void) fprintf(stderr, gettext(
 111             "Usage:\tprstat [-acHJLmrRtTvWZ] [-u euidlist] [-U uidlist]\n"
 112             "\t[-p pidlist] [-P cpulist] [-C psrsetlist] [-h lgrouplist]\n"
 113             "\t[-j projidlist] [-k taskidlist] [-z zoneidlist]\n"
 114             "\t[-s key | -S key] [-n nprocs[,nusers]] [-d d|u]\n"
 115             "\t[interval [counter]]\n"));
 116         exit(1);
 117 }
 118 
 119 int
 120 Atoi(char *p)
 121 {
 122         int i;
 123         char *q;
 124         errno = 0;
 125         i = (int)strtol(p, &q, 10);
 126         if (errno != 0 || q == p || i < 0 || *q != '\0')
 127                 Die(gettext("illegal argument -- %s\n"), p);
 128                 /*NOTREACHED*/
 129         else
 130                 return (i);
 131         return (0);     /* keep gcc happy */


 263 
 264 void
 265 Priocntl(char *class)
 266 {
 267         pcinfo_t pcinfo;
 268         pcparms_t pcparms;
 269         (void) strcpy(pcinfo.pc_clname, class);
 270         if (priocntl(0, 0, PC_GETCID, (caddr_t)&pcinfo) == -1) {
 271                 Warn(gettext("cannot get real time class parameters"));
 272                 return;
 273         }
 274         pcparms.pc_cid = pcinfo.pc_cid;
 275         ((rtparms_t *)pcparms.pc_clparms)->rt_pri = 0;
 276         ((rtparms_t *)pcparms.pc_clparms)->rt_tqsecs = 0;
 277         ((rtparms_t *)pcparms.pc_clparms)->rt_tqnsecs = RT_NOCHANGE;
 278         if (priocntl(P_PID, getpid(), PC_SETPARMS, (caddr_t)&pcparms) == -1)
 279                 Warn(gettext("cannot enter the real time class"));
 280 }
 281 
 282 void
 283 getprojname(projid_t projid, char *str, size_t len, int noresolve,
 284     int trunc, size_t width)
 285 {
 286         struct project proj;
 287         size_t n;
 288 
 289         if (noresolve || getprojbyid(projid, &proj, projbuf, PROJECT_BUFSZ) ==
 290             NULL) {
 291                 (void) snprintf(str, len, "%-6d", (int)projid);
 292         } else {
 293                 n = mbstowcs(NULL, proj.pj_name, 0);
 294                 if (n == (size_t)-1)
 295                         (void) snprintf(str, len, "%-28s", "ERROR");
 296                 else if (trunc && n > width)
 297                         (void) snprintf(str, len, "%.*s%c", width - 1,
 298                             proj.pj_name, '*');
 299                 else
 300                         (void) snprintf(str, len, "%-28s", proj.pj_name);
 301         }
 302 }
 303 
 304 void
 305 getzonename(zoneid_t zoneid, char *str, size_t len, int trunc, size_t width)
 306 {
 307         char zone_name[ZONENAME_MAX];
 308         size_t n;
 309 
 310         if (getzonenamebyid(zoneid, zone_name, sizeof (zone_name)) < 0) {
 311                 (void) snprintf(str, len, "%-6d", (int)zoneid);
 312         } else {
 313                 n = mbstowcs(NULL, zone_name, 0);
 314                 if (n == (size_t)-1)
 315                         (void) snprintf(str, len, "%-28s", "ERROR");
 316                 else if (trunc && n > width)
 317                         (void) snprintf(str, len, "%.*s%c", width - 1,
 318                             zone_name, '*');
 319                 else
 320                         (void) snprintf(str, len, "%-28s", zone_name);
 321         }
 322 }
 323 
 324 /*
 325  * Remove all unprintable characters from process name
 326  */
 327 void
 328 stripfname(char *buf)
 329 {
 330         int bytesleft = PRFNSZ;
 331         wchar_t wchar;
 332         int length;
 333         char *cp;
 334 
 335         buf[bytesleft - 1] = '\0';
 336 
 337         for (cp = buf; *cp != '\0'; cp += length) {
 338                 length = mbtowc(&wchar, cp, MB_LEN_MAX);
 339                 if (length <= 0) {
 340                         *cp = '\0';
 341                         break;