Index: uspace/lib/usb/src/recognise.c
===================================================================
--- uspace/lib/usb/src/recognise.c	(revision 18cb870c5021a54901fd39c798fb3b9183310e5a)
+++ uspace/lib/usb/src/recognise.c	(revision 6e6dc7db242d5df4c7f11040dc1c66e387f7d504)
@@ -112,4 +112,13 @@
 }
 
+#define ADD_MATCHID_OR_RETURN(match_ids, score, format, ...) \
+	do { \
+		int __rc = usb_add_match_id((match_ids), (score), \
+		    format, ##__VA_ARGS__); \
+		if (__rc != EOK) { \
+			return __rc; \
+		} \
+	} while (0)
+
 /** Create device match ids based on its interface.
  *
@@ -131,6 +140,4 @@
 	}
 
-	int rc;
-
 	if (descriptor->interface_class == USB_CLASS_USE_INTERFACE) {
 		return ENOENT;
@@ -140,24 +147,16 @@
 	assert(classname != NULL);
 
-	rc = usb_add_match_id(matches, 50,
+	ADD_MATCHID_OR_RETURN(matches, 50,
 	    "usb&interface&class=%s",
 	    classname);
-	if (rc != EOK) {
-		return rc;
-	}
-
-	rc = usb_add_match_id(matches, 70,
+	ADD_MATCHID_OR_RETURN(matches, 70,
 	    "usb&interface&class=%s&subclass=0x%02x",
 	    classname, descriptor->interface_subclass);
-	if (rc != EOK) {
-		return rc;
-	}
-
-	rc = usb_add_match_id(matches, 100,
+	ADD_MATCHID_OR_RETURN(matches, 100,
 	    "usb&interface&class=%s&subclass=0x%02x&protocol=0x%02x",
 	    classname, descriptor->interface_subclass,
 	    descriptor->interface_protocol);
 
-	return rc;
+	return EOK;
 }
 
@@ -172,6 +171,4 @@
     const usb_standard_device_descriptor_t *device_descriptor)
 {
-	int rc;
-	
 	/*
 	 * Unless the vendor id is 0, the pair idVendor-idProduct
@@ -180,21 +177,15 @@
 	if (device_descriptor->vendor_id != 0) {
 		/* First, with release number. */
-		rc = usb_add_match_id(matches, 100,
+		ADD_MATCHID_OR_RETURN(matches, 100,
 		    "usb&vendor=0x%04x&product=0x%04x&release=" BCD_FMT,
 		    (int) device_descriptor->vendor_id,
 		    (int) device_descriptor->product_id,
 		    BCD_ARGS(device_descriptor->device_version));
-		if (rc != EOK) {
-			return rc;
-		}
 		
 		/* Next, without release number. */
-		rc = usb_add_match_id(matches, 90,
+		ADD_MATCHID_OR_RETURN(matches, 90,
 		    "usb&vendor=0x%04x&product=0x%04x",
 		    (int) device_descriptor->vendor_id,
 		    (int) device_descriptor->product_id);
-		if (rc != EOK) {
-			return rc;
-		}
 	}	
 
@@ -204,14 +195,8 @@
 	 */
 	if (device_descriptor->device_class != USB_CLASS_USE_INTERFACE) {
-		rc = usb_add_match_id(matches, 50, "usb&class=%s",
+		ADD_MATCHID_OR_RETURN(matches, 50, "usb&class=%s",
 		    usb_str_class(device_descriptor->device_class));
-		if (rc != EOK) {
-			return rc;
-		}
 	} else {
-		rc = usb_add_match_id(matches, 50, "usb&mid");
-		if (rc != EOK) {
-			return rc;
-		}
+		ADD_MATCHID_OR_RETURN(matches, 50, "usb&mid");
 	}
 	
@@ -260,10 +245,7 @@
 		    current_descriptor;
 		
-		int rc = usb_add_match_id(matches, 50,
+		ADD_MATCHID_OR_RETURN(matches, 50,
 		    "usb&interface&class=%s",
 		    usb_str_class(interface->interface_class));
-		if (rc != EOK) {
-			return rc;
-		}
 	}
 	
@@ -367,8 +349,5 @@
 	 * As a fallback, provide the simplest match id possible.
 	 */
-	rc = usb_add_match_id(matches, 1, "usb&fallback");
-	if (rc != EOK) {
-		return rc;
-	}
+	ADD_MATCHID_OR_RETURN(matches, 1, "usb&fallback");
 
 	return EOK;
