Annotation of wikisrc/examples/drvctlio.mdwn, revision 1.2

1.1       wiki        1: This and other code examples really want the [[wiki/todo/highlight_plugin]]. --[[schmonz]]
                      2: 
                      3: -----
                      4: 
1.2     ! wiki        5:     #include <sys/ioctl.h>
        !             6:     #include <sys/drvctlio.h>
        !             7:     
        !             8:     #include <err.h>
        !             9:     #include <string.h>
        !            10:     #include <stdlib.h>
        !            11:     #include <fcntl.h>
        !            12:     
        !            13:     int
        !            14:     main(int argc, char *argv[])
        !            15:     {
        !            16:             struct devlistargs l;
        !            17:             unsigned int i, children;
        !            18:             int drvfd;
        !            19:     
        !            20:             if (argc != 2)
        !            21:                     err(1, "args");
        !            22:     
        !            23:             if ((drvfd = open(DRVCTLDEV, O_RDONLY, 0)) < 0)
        !            24:                     err(1, "can't open " DRVCTLDEV);
        !            25:     
        !            26:             strlcpy(l.l_devname, argv[1], sizeof(l.l_devname));
        !            27:             l.l_childname = NULL;
        !            28:             l.l_children = 0;
        !            29:     
        !            30:             if (ioctl(drvfd, DRVLISTDEV, &l) == -1)
        !            31:                     err(1, "DRVLISTDEV");
        !            32:     
        !            33:             children = l.l_children;
        !            34:             l.l_childname = malloc(sizeof(l.l_childname[0]) * children);
        !            35:     
        !            36:             if (ioctl(drvfd, DRVLISTDEV, &l) == -1)
        !            37:                     err(1, "DRVLISTDEV");
        !            38:     
        !            39:             if (l.l_children != children)
        !            40:                     err(1, "number of children changed between ioctls");
        !            41:     
        !            42:             if (l.l_childname == NULL) {
        !            43:                     puts("No children.");
        !            44:                     return 0;
        !            45:             }
        !            46:     
        !            47:             for (i = 0; i < l.l_children; i++) {
        !            48:                     puts(l.l_childname[i]);
        !            49:             }
        !            50:     
        !            51:             close(drvfd);
        !            52:     
        !            53:             return 0;
        !            54:     }

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