[[!format c """ #include #include #include #include #include #include int main(int argc, char *argv[]) { struct devlistargs l; unsigned int i, children; int drvfd; if (argc != 2) err(1, "args"); if ((drvfd = open(DRVCTLDEV, O_RDONLY, 0)) < 0) err(1, "can't open " DRVCTLDEV); strlcpy(l.l_devname, argv[1], sizeof(l.l_devname)); l.l_childname = NULL; l.l_children = 0; if (ioctl(drvfd, DRVLISTDEV, &l) == -1) err(1, "DRVLISTDEV"); children = l.l_children; l.l_childname = malloc(sizeof(l.l_childname[0]) * children); if (ioctl(drvfd, DRVLISTDEV, &l) == -1) err(1, "DRVLISTDEV"); if (l.l_children != children) err(1, "number of children changed between ioctls"); if (l.l_childname == NULL) { puts("No children."); return 0; } for (i = 0; i < l.l_children; i++) { puts(l.l_childname[i]); } close(drvfd); return 0; } """]]