Print this page
7215 usba logging through cmn_err (via usba_bus_ctl) output erroneously includes tab
7216 usba logging through cmn_err (via usba_bus_ctl) output truncates (leading) some device names

@@ -21,10 +21,11 @@
 /*
  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  *
  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
+ * Copyright 2016 James S. Blachly, MD <james.blachly@gmail.com>
  */
 
 
 /*
  * USBA: Solaris USB Architecture support

@@ -33,12 +34,10 @@
 #include <sys/usb/usba/usba_impl.h>
 #include <sys/usb/usba/hcdi_impl.h>
 #include <sys/usb/hubd/hub.h>
 #include <sys/fs/dv_node.h>
 
-static int usba_str_startcmp(char *, char *);
-
 /*
  * USBA private variables and tunables
  */
 static kmutex_t usba_mutex;
 

@@ -265,11 +264,11 @@
                             ddi_get_instance(rdip), usba_device->usb_addr);
 
                         name = kmem_alloc(MAXNAMELEN, KM_SLEEP);
                         (void) usba_get_mfg_prod_sn_str(rdip, name, MAXNAMELEN);
                         if (name[0] != '\0') {
-                                cmn_err(CE_CONT, "?\t%s\n", name);
+                                cmn_err(CE_CONT, "?%s\n", name);
                         }
                         kmem_free(name, MAXNAMELEN);
 
                 } else { /* harden USBA against this case; if it happens */
 

@@ -2828,32 +2827,10 @@
         kmem_free(tmpbuf, USB_MAXSTRINGLEN);
 }
 
 
 /*
- * usba_str_startcmp:
- *      Return the number of characters duplicated from the beginning of the
- *      string.  Return -1 if a complete duplicate.
- *
- * Arguments:
- *      Two strings to compare.
- */
-static int usba_str_startcmp(char *first, char *second)
-{
-        int num_same_chars = 0;
-        while (*first == *second++) {
-                if (*first++ == '\0') {
-                        return (-1);
-                }
-                num_same_chars++;
-        }
-
-        return (num_same_chars);
-}
-
-
-/*
  * usba_get_mfg_prod_sn_str:
  *      Return a string containing mfg, product, serial number strings.
  *      Remove duplicates if some strings are the same.
  *
  * Arguments:

@@ -2871,43 +2848,33 @@
     int         buflen)
 {
         usba_device_t *usba_device = usba_get_usba_device(dip);
         int return_len = 0;
         int len = 0;
-        int duplen;
 
         buffer[0] = '\0';
         buffer[buflen-1] = '\0';
 
+        /* Manufacturer string exists. */
         if ((usba_device->usb_mfg_str) &&
             ((len = strlen(usba_device->usb_mfg_str)) != 0)) {
                 (void) strncpy(buffer, usba_device->usb_mfg_str, buflen - 1);
                 return_len = min(buflen - 1, len);
         }
 
         /* Product string exists to append. */
         if ((usba_device->usb_product_str) &&
             ((len = strlen(usba_device->usb_product_str)) != 0)) {
-
-                /* Append only parts of string that don't match mfg string. */
-                duplen = usba_str_startcmp(buffer,
-                    usba_device->usb_product_str);
-
-                if (duplen != -1) {             /* Not a complete match. */
                         if (return_len > 0) {
                                 buffer[return_len++] = ' ';
                         }
-
-                        /* Skip over the dup part of the concat'ed string. */
-                        len -= duplen;
                         (void) strncpy(&buffer[return_len],
-                            &usba_device->usb_product_str[duplen],
-                            buflen - return_len - 1);
+                    usba_device->usb_product_str, buflen - return_len - 1);
                         return_len = min(buflen - 1, return_len + len);
                 }
-        }
 
+        /* Serial number string exists to append. */
         if ((usba_device->usb_serialno_str) &&
             ((len = strlen(usba_device->usb_serialno_str)) != 0)) {
                 if (return_len > 0) {
                         buffer[return_len++] = ' ';
                 }