Sophie

Sophie

distrib > Mandriva > mes5 > x86_64 > by-pkgid > 2d1da4037a0a9c3f8555173362d56747 > files > 2

ldetect-0.7.26-3.1mdv2009.0.src.rpm

Index: usb.c
===================================================================
--- usb.c	(révision 256038)
+++ usb.c	(copie de travail)
@@ -57,13 +57,17 @@
 			} else fprintf(stderr, "%s %d: unknown ``P'' line\n", proc_usb_path, line);
 			break;
 		}
-		case 'I': if (e->class_id == 0) {
+		case 'I': if (e->class_id == 0 || e->module == NULL) {
 			char driver[50];
 			int class_id, sub, prot = 0;
-			if (sscanf(buf, "I:%*1c  If#=%*2d Alt=%*2d #EPs=%*2d Cls=%02x(%*5c) Sub=%02x Prot=%02x Driver=%s", &class_id, &sub, &prot, driver) == 4) {
-				e->class_id = (class_id * 0x100 + sub) * 0x100 + prot;
+			if (sscanf(buf, "I:* If#=%*2d Alt=%*2d #EPs=%*2d Cls=%02x(%*5c) Sub=%02x Prot=%02x Driver=%s", &class_id, &sub, &prot, driver) == 4) {
+				unsigned long cid = (class_id * 0x100 + sub) * 0x100 + prot;
+				if (e->class_id == 0)
+					e->class_id = cid;
 				if (strncmp(driver, "(none)", 6)) {
 					char *p;
+					/* Get current class if we are on the first one having used by a driver */
+					e->class_id = cid;
 					e->module = strdup(driver);
 					/* replace '-' characters with '_' to be compliant with modnames from modaliases */
 					p = e->module;
@@ -76,8 +80,8 @@
 				if (e->class_id == (0x1*0x100+ 0x01)) /* USB_AUDIO_CLASS*0x100 + USB_SUBCLASS_AUDIO_CONTROL*/
 					e->module = strdup("snd_usb_audio");
 
-			} else if (sscanf(buf, "I:%*1c If#=%*2d Alt=%*2d #EPs=%*2d Cls=%02x(%*5c) Sub=%02x Prot=%02x Driver=", &class_id, &sub, &prot) == 3) {
-                    /* prevent spurious warnings for strange USB interfaces */
+			} else if (sscanf(buf, "I:  If#=%*2d Alt=%*2d #EPs=%*2d Cls=%02x(%*5c) Sub=%02x Prot=%02x Driver=%s", &class_id, &sub, &prot, driver) == 4) {
+				/* Ignore interfaces not active */
 			} else fprintf(stderr, "%s %d: unknown ``I'' line\n", proc_usb_path, line);
 			break;
 		}