Print this page
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

@@ -21,12 +21,10 @@
 /*
  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident   "%Z%%M% %I%     %E% SMI"
-
 #include <stdio.h>
 #include <stdio_ext.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <unistd.h>

@@ -37,10 +35,12 @@
 #include <sys/types.h>
 #include <stropts.h>
 #include <poll.h>
 #include <procfs.h>
 #include <sys/resource.h>
+#include <limits.h>
+#include "ptools_common.h"
 
 static int count_my_files();
 static char *command;
 
 /* slop to account for extra file descriptors opened by libraries we call */

@@ -47,10 +47,11 @@
 #define SLOP    5
 
 int
 main(int argc, char **argv)
 {
+        char buf[PATH_MAX];
         unsigned long remain = 0;
         struct pollfd *pollfd;
         struct pollfd *pfd;
         struct rlimit rlim;
         char *arg;

@@ -77,10 +78,12 @@
                 (void) fprintf(stderr,
                         "  -v: verbose; report terminations to standard out\n");
                 return (2);
         }
 
+        (void) proc_snprintf(buf, sizeof (buf), "/proc/");
+
         /* make sure we have enough file descriptors */
         if (getrlimit(RLIMIT_NOFILE, &rlim) == 0) {
                 int nfiles = count_my_files();
 
                 if (rlim.rlim_cur < argc + nfiles + SLOP) {

@@ -106,11 +109,11 @@
 
                 arg = argv[i];
                 if (strchr(arg, '/') != NULL)
                         (void) strncpy(psinfofile, arg, sizeof (psinfofile));
                 else {
-                        (void) strcpy(psinfofile, "/proc/");
+                        (void) strcpy(psinfofile, buf);
                         (void) strncat(psinfofile, arg, sizeof (psinfofile)-6);
                 }
                 (void) strncat(psinfofile, "/psinfo",
                         sizeof (psinfofile)-strlen(psinfofile));
 

@@ -158,12 +161,12 @@
                                         psinfo_t psinfo;
 
                                         if (pread(pfd->fd, &psinfo,
                                             sizeof (psinfo), (off_t)0)
                                             == sizeof (psinfo)) {
-                                                (void) printf(
-                                        "%s: terminated, wait status 0x%.4x\n",
+                                                (void) printf("%s: terminated, "
+                                                    "wait status 0x%.4x\n",
                                                         arg, psinfo.pr_wstat);
                                         } else {
                                                 (void) printf(
                                                     "%s: terminated\n", arg);
                                         }