summaryrefslogtreecommitdiff
path: root/extras
diff options
context:
space:
mode:
Diffstat (limited to 'extras')
-rw-r--r--extras/usb-db/.gitignore2
-rw-r--r--extras/usb-db/usb-db.c264
2 files changed, 0 insertions, 266 deletions
diff --git a/extras/usb-db/.gitignore b/extras/usb-db/.gitignore
deleted file mode 100644
index 861a8382a6..0000000000
--- a/extras/usb-db/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-usb-db
-pci-db
diff --git a/extras/usb-db/usb-db.c b/extras/usb-db/usb-db.c
deleted file mode 100644
index fe563c2e75..0000000000
--- a/extras/usb-db/usb-db.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (C) 2009 Lennart Poettering <lennart@poettering.net>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details:
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <inttypes.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-#include <libudev.h>
-
-#if defined(BUILD_FOR_USB)
-# define DATABASE USB_DATABASE
-# define SUBSYSTEM "usb"
-# define DEVTYPE "usb_device"
-# define VENDOR_ATTR "idVendor"
-# define PRODUCT_ATTR "idProduct"
-#elif defined(BUILD_FOR_PCI)
-# define DATABASE PCI_DATABASE
-# define SUBSYSTEM "pci"
-# define DEVTYPE NULL
-# define VENDOR_ATTR "vendor"
-# define PRODUCT_ATTR "device"
-#else
-# error "Are you havin' a laugh?"
-#endif
-
-static int get_id_attr(
- struct udev_device *parent,
- const char *name,
- uint16_t *value) {
-
- const char *t;
- unsigned u;
-
- if (!(t = udev_device_get_sysattr_value(parent, name))) {
- fprintf(stderr, "%s lacks %s.\n", udev_device_get_syspath(parent), name);
- return -1;
- }
-
- if (!strncmp(t, "0x", 2))
- t += 2;
-
- if (sscanf(t, "%04x", &u) != 1 || u > 0xFFFFU) {
- fprintf(stderr, "Failed to parse %s on %s.\n", name, udev_device_get_syspath(parent));
- return -1;
- }
-
- *value = (uint16_t) u;
- return 0;
-}
-
-static int get_vid_pid(
- struct udev_device *parent,
- uint16_t *vid,
- uint16_t *pid) {
-
- if (get_id_attr(parent, VENDOR_ATTR, vid) < 0)
- return -1;
- else if (*vid <= 0) {
- fprintf(stderr, "Invalid vendor id.\n");
- return -1;
- }
-
- if (get_id_attr(parent, PRODUCT_ATTR, pid) < 0)
- return -1;
-
- return 0;
-}
-
-static void rstrip(char *n) {
- size_t i;
-
- for (i = strlen(n); i > 0 && isspace(n[i-1]); i--)
- n[i-1] = 0;
-}
-
-#define HEXCHARS "0123456789abcdefABCDEF"
-#define WHITESPACE " \t\n\r"
-
-static int lookup_vid_pid(
- uint16_t vid,
- uint16_t pid,
- char **vendor,
- char **product) {
-
- FILE *f;
- int ret = -1;
- int found_vendor = 0;
- char *line = NULL;
-
- *vendor = *product = NULL;
-
- if (!(f = fopen(DATABASE, "r"))) {
- fprintf(stderr, "Failed to open database file "DATABASE": %s\n", strerror(errno));
- return -1;
- }
-
- for (;;) {
- size_t n;
-
- if (line) {
- free(line);
- line = NULL;
- }
-
- if (getline(&line, &n, f) < 0)
- break;
-
- rstrip(line);
-
- if (line[0] == '#' || line[0] == 0)
- continue;
-
- if (strspn(line, HEXCHARS) == 4) {
- unsigned u;
-
- if (found_vendor)
- break;
-
- if (sscanf(line, "%04x", &u) == 1 && u == vid) {
- char *t;
-
- t = line+4;
- t += strspn(t, WHITESPACE);
-
- if (!(*vendor = strdup(t))) {
- fprintf(stderr, "Out of memory.\n");
- goto finish;
- }
-
- found_vendor = 1;
- }
-
- continue;
- }
-
- if (found_vendor && line[0] == '\t' && strspn(line+1, HEXCHARS) == 4) {
- unsigned u;
-
- if (sscanf(line+1, "%04x", &u) == 1 && u == pid) {
- char *t;
-
- t = line+5;
- t += strspn(t, WHITESPACE);
-
- if (!(*product = strdup(t))) {
- fprintf(stderr, "Out of memory.\n");
- goto finish;
- }
-
- break;
- }
- }
- }
-
- ret = 0;
-
-finish:
- free(line);
- fclose(f);
-
- if (ret < 0) {
- free(*product);
- free(*vendor);
-
- *product = *vendor = NULL;
- }
-
- return ret;
-}
-
-static struct udev_device *find_device(struct udev_device *dev, const char *subsys, const char *devtype)
-{
- const char *str;
-
- str = udev_device_get_subsystem(dev);
- if (str == NULL)
- goto try_parent;
- if (strcmp(str, subsys) != 0)
- goto try_parent;
-
- if (devtype != NULL) {
- str = udev_device_get_devtype(dev);
- if (str == NULL)
- goto try_parent;
- if (strcmp(str, devtype) != 0)
- goto try_parent;
- }
- return dev;
-try_parent:
- return udev_device_get_parent_with_subsystem_devtype(dev, SUBSYSTEM, DEVTYPE);
-}
-
-int main(int argc, char*argv[]) {
-
- struct udev *udev = NULL;
- int ret = 1;
- char *sp;
- struct udev_device *dev = NULL, *parent = NULL;
- uint16_t vid = 0, pid = 0;
- char *vendor = NULL, *product = NULL;
-
- if (argc < 2) {
- fprintf(stderr, "Need to pass sysfs path.\n");
- goto finish;
- }
-
- if (!(udev = udev_new()))
- goto finish;
-
- if (asprintf(&sp, "%s%s", udev_get_sys_path(udev), argv[1]) < 0) {
- fprintf(stderr, "Failed to allocate sysfs path.\n");
- goto finish;
- }
-
- dev = udev_device_new_from_syspath(udev, sp);
- free(sp);
-
- if (!dev) {
- fprintf(stderr, "Failed to access %s.\n", argv[1]);
- goto finish;
- }
-
- parent = find_device(dev, SUBSYSTEM, DEVTYPE);
- if (!parent) {
- fprintf(stderr, "Failed to find device.\n");
- goto finish;
- }
-
- if (get_vid_pid(parent, &vid, &pid) < 0)
- goto finish;
-
- if (lookup_vid_pid(vid, pid, &vendor, &product) < 0)
- goto finish;
-
- if (vendor)
- printf("ID_VENDOR_FROM_DATABASE=%s\n", vendor);
-
- if (product)
- printf("ID_MODEL_FROM_DATABASE=%s\n", product);
-
- ret = 0;
-
-finish:
- udev_device_unref(dev);
- udev_unref(udev);
- free(vendor);
- free(product);
-
- return ret;
-}