summaryrefslogtreecommitdiffstats
path: root/abs/core/udev/usb_id-fix.patch
blob: 35fb2e12733ff3376823d0ed3af06af25d9cbc44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
From: Kay Sievers <kay.sievers@vrfy.org>
Date: Mon, 15 Oct 2007 18:38:20 +0000 (+0200)
Subject: usb_id: fail if vendor/product can not be retrieved
X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=963033472f8d2aab0bf77147b916de8f3b0b5450

usb_id: fail if vendor/product can not be retrieved

Thanks to Daniel Drake for identifying the bug.
---

diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
index d36a27b..5fb030d 100644
--- a/extras/usb_id/usb_id.c
+++ b/extras/usb_id/usb_id.c
@@ -1,7 +1,5 @@
 /*
- * usb_id.c
- *
- * Identify an USB (block) device
+ * usb_id - identify an USB device
  *
  * Copyright (c) 2005 SUSE Linux Products GmbH, Germany
  *
@@ -224,8 +222,6 @@ static int usb_id(const char *devpath)
 	struct sysfs_device *dev;
 	struct sysfs_device *dev_interface;
 	struct sysfs_device *dev_usb;
-	const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
-	const char *usb_model = NULL, *usb_vendor = NULL, *usb_rev, *usb_serial;
 	const char *if_class, *if_subclass;
 	int if_class_num;
 	int protocol = 0;
@@ -271,6 +267,7 @@ static int usb_id(const char *devpath)
 	/* mass storage */
 	if (protocol == 6 && !use_usb_info) {
 		struct sysfs_device *dev_scsi;
+		const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
 		int host, bus, target, lun;
 
 		/* get scsi device */
@@ -321,40 +318,50 @@ static int usb_id(const char *devpath)
 	}
 
 fallback:
-	/* Fallback to USB vendor & device */
+	/* fallback to USB vendor & device */
 	if (vendor_str[0] == '\0') {
+		const char *usb_vendor = NULL;
+
 		if (!use_num_info)
-			if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer")))
-				dbg("No USB vendor string found, using idVendor");
+			usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer");
+
+		if (!usb_vendor)
+			usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor");
 
 		if (!usb_vendor) {
-			if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"))) {
-				dbg("No USB vendor information available\n");
-				sprintf(vendor_str,"0000");
-			}
+			info("No USB vendor information available");
+			return 1;
 		}
-		set_str(vendor_str,usb_vendor, sizeof(vendor_str) - 1);
+		set_str(vendor_str, usb_vendor, sizeof(vendor_str)-1);
 	}
-	
+
 	if (model_str[0] == '\0') {
+		const char *usb_model = NULL;
+
 		if (!use_num_info)
-			if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "product")))
-				dbg("No USB model string found, using idProduct");
-		
+			usb_model = sysfs_attr_get_value(dev_usb->devpath, "product");
+
+		if (!usb_model)
+			usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct");
+
 		if (!usb_model) {
-			if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct")))
-				dbg("No USB model information available\n"); sprintf(model_str,"0000");
+			dbg("No USB model information available");
+			return 1;
 		}
-		set_str(model_str, usb_model, sizeof(model_str) - 1);
+		set_str(model_str, usb_model, sizeof(model_str)-1);
 	}
 
 	if (revision_str[0] == '\0') {
+		const char *usb_rev;
+
 		usb_rev = sysfs_attr_get_value(dev_usb->devpath, "bcdDevice");
 		if (usb_rev)
 			set_str(revision_str, usb_rev, sizeof(revision_str)-1);
 	}
 
 	if (serial_str[0] == '\0') {
+		const char *usb_serial;
+
 		usb_serial = sysfs_attr_get_value(dev_usb->devpath, "serial");
 		if (usb_serial)
 			set_str(serial_str, usb_serial, sizeof(serial_str)-1);