Diff for /wikisrc/examples/drvctlio.mdwn between versions 1.1 and 1.2

version 1.1, 2010/04/17 17:04:07 version 1.2, 2010/04/25 21:21:05
Line 2  This and other code examples really want Line 2  This and other code examples really want
   
 -----  -----
   
 #include <sys/ioctl.h>      #include <sys/ioctl.h>
 #include <sys/drvctlio.h>      #include <sys/drvctlio.h>
       
 #include <err.h>      #include <err.h>
 #include <string.h>      #include <string.h>
 #include <stdlib.h>      #include <stdlib.h>
 #include <fcntl.h>      #include <fcntl.h>
       
 int      int
 main(int argc, char *argv[])      main(int argc, char *argv[])
 {      {
         struct devlistargs l;              struct devlistargs l;
         unsigned int i, children;              unsigned int i, children;
         int drvfd;              int drvfd;
       
         if (argc != 2)              if (argc != 2)
                 err(1, "args");                      err(1, "args");
       
         if ((drvfd = open(DRVCTLDEV, O_RDONLY, 0)) < 0)              if ((drvfd = open(DRVCTLDEV, O_RDONLY, 0)) < 0)
                 err(1, "can't open " DRVCTLDEV);                      err(1, "can't open " DRVCTLDEV);
       
         strlcpy(l.l_devname, argv[1], sizeof(l.l_devname));              strlcpy(l.l_devname, argv[1], sizeof(l.l_devname));
         l.l_childname = NULL;              l.l_childname = NULL;
         l.l_children = 0;              l.l_children = 0;
       
         if (ioctl(drvfd, DRVLISTDEV, &l) == -1)              if (ioctl(drvfd, DRVLISTDEV, &l) == -1)
                 err(1, "DRVLISTDEV");                      err(1, "DRVLISTDEV");
       
         children = l.l_children;              children = l.l_children;
         l.l_childname = malloc(sizeof(l.l_childname[0]) * children);              l.l_childname = malloc(sizeof(l.l_childname[0]) * children);
       
         if (ioctl(drvfd, DRVLISTDEV, &l) == -1)              if (ioctl(drvfd, DRVLISTDEV, &l) == -1)
                 err(1, "DRVLISTDEV");                      err(1, "DRVLISTDEV");
       
         if (l.l_children != children)              if (l.l_children != children)
                 err(1, "number of children changed between ioctls");                      err(1, "number of children changed between ioctls");
       
         if (l.l_childname == NULL) {              if (l.l_childname == NULL) {
                 puts("No children.");                      puts("No children.");
                 return 0;                      return 0;
         }              }
       
         for (i = 0; i < l.l_children; i++) {              for (i = 0; i < l.l_children; i++) {
                 puts(l.l_childname[i]);                      puts(l.l_childname[i]);
         }              }
       
         close(drvfd);              close(drvfd);
       
         return 0;              return 0;
 }      }

Removed from v.1.1  
changed lines
  Added in v.1.2


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb