]> mj.ucw.cz Git - pciutils.git/commitdiff
Truncate names which are too long
authorMartin Mares <mj@ucw.cz>
Sun, 2 Oct 2011 10:41:07 +0000 (12:41 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 2 Oct 2011 10:41:07 +0000 (12:41 +0200)
When any name turned out too long, we returned "<pci_lookup_name: buffer too small>",
which wasn't very useful. Instead of that, we truncate the name and
we add "..." at the end.

Please note that for simplicity, the truncation happens only on systems with proper
C99 snprintf(). Ancient systems where snprintf() returns a negative number and
promises nothing about the state of the buffer still use the error message.

lib/names.c

index 26de128318aae067a27257eb0687deb80b3d8034..bda8c908fd6cee2fe89ef74a15da1d0c67deba41 100644 (file)
@@ -69,10 +69,11 @@ format_name(char *buf, int size, int flags, char *name, char *num, char *unknown
     res = snprintf(buf, size, "%s", name);
   else
     res = snprintf(buf, size, "%s [%s]", name, num);
-  if (res < 0 || res >= size)
+  if (res >= size && size >= 4)
+    buf[size-2] = buf[size-3] = buf[size-4] = '.';
+  else if (res < 0 || res >= size)
     return "<pci_lookup_name: buffer too small>";
-  else
-    return buf;
+  return buf;
 }
 
 static char *
@@ -101,10 +102,11 @@ format_name_pair(char *buf, int size, int flags, char *v, char *d, char *num)
       else /* v && !d */
        res = snprintf(buf, size, "%s Device %s", v, num+5);
     }
-  if (res < 0 || res >= size)
+  if (res >= size && size >= 4)
+    buf[size-2] = buf[size-3] = buf[size-4] = '.';
+  else if (res < 0 || res >= size)
     return "<pci_lookup_name: buffer too small>";
-  else
-    return buf;
+  return buf;
 }
 
 char *