lsusb.c - ubase - suckless linux base utils
 (HTM) git clone git://git.suckless.org/ubase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       lsusb.c (1132B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <limits.h>
            3 #include <stdio.h>
            4 #include <stdlib.h>
            5 
            6 #include "text.h"
            7 #include "util.h"
            8 
            9 static void
           10 lsusb(const char *file)
           11 {
           12         FILE *fp;
           13         char path[PATH_MAX];
           14         char *buf = NULL;
           15         size_t size = 0;
           16         unsigned int i = 0, busnum = 0, devnum = 0, pid = 0, vid = 0;
           17 
           18         if (strlcpy(path, file, sizeof(path)) >= sizeof(path))
           19                 eprintf("path too long\n");
           20         if (strlcat(path, "/uevent", sizeof(path)) >= sizeof(path))
           21                 eprintf("path too long\n");
           22 
           23         if (!(fp = fopen(path, "r")))
           24                 return;
           25         while (agetline(&buf, &size, fp) != -1) {
           26                 if (sscanf(buf, "BUSNUM=%u\n", &busnum) ||
           27                     sscanf(buf, "DEVNUM=%u\n", &devnum) ||
           28                     sscanf(buf, "PRODUCT=%x/%x/", &pid, &vid))
           29                         i++;
           30                 if (i == 3) {
           31                         printf("Bus %03d Device %03d: ID %04x:%04x\n", busnum, devnum,
           32                                pid, vid);
           33                         break;
           34                 }
           35         }
           36         if (ferror(fp))
           37                 eprintf("%s: read error:", path);
           38         free(buf);
           39         fclose(fp);
           40 }
           41 
           42 static void
           43 usage(void)
           44 {
           45         eprintf("usage: %s\n", argv0);
           46 }
           47 
           48 int
           49 main(int argc, char *argv[])
           50 {
           51         ARGBEGIN {
           52         default:
           53                 usage();
           54         } ARGEND;
           55 
           56         recurse("/sys/bus/usb/devices", lsusb);
           57         return 0;
           58 }