]> 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 a05cb319e2e58463fdf565e0e082f3efb9cd6854..793ead677d4790c0d0d46d4c27020ddcb7a9d4a5 100644 (file)
@@ -37,7 +37,7 @@
 #include "readelf.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.64 2007/09/26 20:42:55 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.65 2007/10/23 19:54:35 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;