Print this page
    
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/cmd/ptools/pwdx/pwdx.c
          +++ new/usr/src/cmd/ptools/pwdx/pwdx.c
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License, Version 1.0 only
   6    6   * (the "License").  You may not use this file except in compliance
   7    7   * with the License.
   8    8   *
   9    9   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10   10   * or http://www.opensolaris.org/os/licensing.
  11   11   * See the License for the specific language governing permissions
  12   12   * and limitations under the License.
  13   13   *
  14   14   * When distributing Covered Code, include this CDDL HEADER in each
  15   15   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16   16   * If applicable, add the following below this CDDL HEADER, with the
  17   17   * fields enclosed by brackets "[]" replaced with your own identifying
  18   18   * information: Portions Copyright [yyyy] [name of copyright owner]
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  /*
  23   23   * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   * Copyright (c) 2014, Joyent, Inc.  All rights reserved.
  26   26   */
  27   27  
  28   28  #include <stdio.h>
  29   29  #include <unistd.h>
  30   30  #include <string.h>
  31   31  #include <errno.h>
  32   32  #include <libproc.h>
  33   33  #include <sys/param.h>
  34   34  
  35   35  #include "ptools_common.h"
  36   36  
  37   37  static char *command;
  38   38  
  39   39  static int
  40   40  show_cwd(const char *arg)
  41   41  {
  42   42          char cwd[MAXPATHLEN], proc[128];
  43   43          psinfo_t p;
  44   44          int gcode;
  45   45          int ret;
  46   46  
  47   47          if (proc_arg_psinfo(arg, PR_ARG_PIDS, &p, &gcode) == -1) {
  48   48                  (void) fprintf(stderr, "%s: cannot examine %s: %s\n",
  49   49                      command, arg, Pgrab_error(gcode));
  50   50                  return (1);
  51   51          }
  52   52  
  53   53          (void) proc_snprintf(proc, sizeof (proc), "/proc/%d/path/cwd",
  54   54              (int)p.pr_pid);
  55   55  
  56   56          if ((ret = readlink(proc, cwd, sizeof (cwd) - 1)) <= 0) {
  57   57                  (void) fprintf(stderr, "%s: cannot resolve cwd for %s: %s\n",
  58   58                      command, arg, strerror(errno));
  59   59                  return (1);
  60   60          }
  61   61  
  62   62          cwd[ret] = '\0';
  63   63  
  64   64          (void) printf("%d:\t%s\n", (int)p.pr_pid, cwd);
  65   65          return (0);
  66   66  }
  67   67  
  68   68  int
  69   69  main(int argc, char **argv)
  70   70  {
  71   71          int retc = 0;
  72   72  
  73   73          if ((command = strrchr(argv[0], '/')) != NULL)
  74   74                  command++;
  75   75          else
  76   76                  command = argv[0];
  77   77  
  78   78          if (argc <= 1) {
  79   79                  (void) fprintf(stderr, "usage:\t%s pid ...\n", command);
  80   80                  (void) fprintf(stderr, "  (show process working directory)\n");
  81   81          }
  82   82  
  83   83          while (--argc >= 1)
  84   84                  retc += show_cwd(*++argv);
  85   85  
  86   86          return (retc);
  87   87  }
  
    | 
      ↓ open down ↓ | 
    87 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX