Add barebones lsusb(8)

This commit is contained in:
sin 2013-09-03 13:52:47 +01:00
parent fc7c1c0a88
commit ac2c8e1495
2 changed files with 56 additions and 0 deletions

View File

@ -25,6 +25,7 @@ SRC = \
halt.c \ halt.c \
insmod.c \ insmod.c \
lsmod.c \ lsmod.c \
lsusb.c \
mkswap.c \ mkswap.c \
mount.c \ mount.c \
mountpoint.c \ mountpoint.c \

55
lsusb.c Normal file
View File

@ -0,0 +1,55 @@
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include "util.h"
static void lsusb(const char *file);
static void
usage(void)
{
eprintf("usage: %s\n", argv0);
}
int
main(int argc, char *argv[])
{
ARGBEGIN {
default:
usage();
} ARGEND;
recurse("/sys/bus/usb/devices", lsusb);
return 0;
}
static void
lsusb(const char *file)
{
FILE *fp;
char *cwd;
char path[PATH_MAX];
char buf[BUFSIZ];
int busnum, devnum, pid, vid;
int i = 0;
cwd = agetcwd();
snprintf(path, sizeof(path), "%s/%s/uevent", cwd, file);
free(cwd);
if (!(fp = fopen(path, "r")))
return;
while (fgets(buf, sizeof(buf), fp)) {
if (sscanf(buf, "BUSNUM=%u\n", &busnum) ||
sscanf(buf, "DEVNUM=%u\n", &devnum) ||
sscanf(buf, "PRODUCT=%x/%x/", &pid, &vid))
i++;
if (i == 3) {
printf("Bus %03d Device %03d: ID %04x:%04x\n", busnum, devnum,
pid, vid);
break;
}
}
fclose(fp);
}