]> granicus.if.org Git - file/commitdiff
print > 16 char file names in core files.
authorChristos Zoulas <christos@zoulas.com>
Wed, 7 Nov 2007 21:26:32 +0000 (21:26 +0000)
committerChristos Zoulas <christos@zoulas.com>
Wed, 7 Nov 2007 21:26:32 +0000 (21:26 +0000)
src/readelf.c

index 69c551498e394479ec53fce5c842d9df42b8cc22..fe362fab7e72bd7d60f10bfcfded351cbda942c3 100644 (file)
@@ -37,7 +37,7 @@
 #include "readelf.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.65 2007/10/23 19:54:35 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.66 2007/11/07 21:26:32 christos Exp $")
 #endif
 
 #ifdef ELFCORE
@@ -637,6 +637,7 @@ core:
                         * reject it.
                         */
                        for (i = 0; i < NOFFSETS; i++) {
+                               unsigned char *cname, *cp;
                                size_t reloffset = prpsoffsets(i);
                                size_t noffset = doff + reloffset;
                                for (j = 0; j < 16; j++, noffset++,
@@ -684,8 +685,12 @@ core:
                                /*
                                 * Well, that worked.
                                 */
-                               if (file_printf(ms, ", from '%.16s'",
-                                   &nbuf[doff + prpsoffsets(i)]) == -1)
+                               cname = (unsigned char *)
+                                   &nbuf[doff + prpsoffsets(i)];
+                               for (cp = cname; *cp && isprint(*cp); cp++)
+                                       continue;
+                               if (file_printf(ms, ", from '%.*s'",
+                                   (int)(cp - cname), cp) == -1)
                                        return size;
                                *flags |= FLAGS_DID_CORE;
                                return size;