Print this page
6992 devprop(1M) should work also with logical names

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/devprop/devprop.c
          +++ new/usr/src/cmd/devprop/devprop.c
↓ open down ↓ 15 lines elided ↑ open up ↑
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  
  26      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  27   26  
  28   27  #include <stdio.h>
  29   28  #include <unistd.h>
  30   29  #include <strings.h>
  31   30  #include <libdevinfo.h>
  32   31  
  33   32  static void
  34   33  usage(void)
  35   34  {
  36   35          (void) fprintf(stderr,
↓ open down ↓ 6 lines elided ↑ open up ↑
  43   42  {
  44   43          int c;
  45   44          boolean_t verbose = B_FALSE, quote = B_FALSE,
  46   45              error = B_FALSE;
  47   46          int type = DI_PROP_TYPE_UNKNOWN;
  48   47          char *path = "/";
  49   48          di_node_t dn;
  50   49          uchar_t *val_b;
  51   50          int *val_i;
  52   51          int64_t *val_l;
  53      -        char *val_s;
       52 +        char *val_s, *ptr;
  54   53          int n;
  55   54  
  56   55          extern char *optarg;
  57   56          extern int optind;
  58   57  
  59   58  #define BOOL(ch, var)                           \
  60   59  case ch:                                        \
  61   60          var = B_TRUE;                           \
  62   61          break
  63   62  
↓ open down ↓ 2 lines elided ↑ open up ↑
  66   65          if (type != DI_PROP_TYPE_UNKNOWN) {     \
  67   66                  usage();                        \
  68   67                  return (1);                     \
  69   68          }                                       \
  70   69          type = (typ);                           \
  71   70          break
  72   71  
  73   72          while ((c = getopt(argc, argv, ":n:vqbils")) != -1) {
  74   73                  switch (c) {
  75   74                  case 'n':
  76      -                        path = optarg;
       75 +                        if ((path = realpath(optarg, NULL)) == NULL)
       76 +                                path = optarg;
  77   77                          break;
  78   78                  case ':':
  79   79                          usage();
  80   80                          return (1);
  81   81  
  82   82                  BOOL('v', verbose);
  83   83                  BOOL('q', quote);
  84   84                  BOOL('?', error);
  85   85  
  86   86                  PER_OPT('b', DI_PROP_TYPE_BYTE);
↓ open down ↓ 14 lines elided ↑ open up ↑
 101  101          /* default to strings */
 102  102          if (type == DI_PROP_TYPE_UNKNOWN)
 103  103                  type = DI_PROP_TYPE_STRING;
 104  104  
 105  105          /*
 106  106           * It's convenient to use the filesystem as a source of device
 107  107           * node paths.  In that case, the path will be prefixed with
 108  108           * "/devices", which we strip off here as di_init() expects
 109  109           * just the path to the node.
 110  110           */
 111      -        if (strncmp("/devices/", path, strlen("/devices/")) == 0)
      111 +        if (strncmp("/devices/", path, strlen("/devices/")) == 0) {
 112  112                  path += strlen("/devices");
 113  113  
      114 +                /* cut off minor name */
      115 +                if ((ptr = strrchr(path, ':')) != NULL)
      116 +                        *ptr = '\0';
      117 +        }
      118 +
 114  119          if ((dn = di_init(path, DINFOPROP)) == DI_NODE_NIL) {
 115  120                  perror("di_init");
 116  121                  return (1);
 117  122          }
 118  123  
 119  124          /* Careful with that axe, Eugene... */
 120  125  #define PER_TYPE(typ, func, val, incr, form, pv, sep)   \
 121  126  case (typ):                                             \
 122  127          n = func(DDI_DEV_T_ANY,                         \
 123  128              dn, argv[optind], &(val));                  \
↓ open down ↓ 35 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX