Print this page
libconv
*** 23,32 ****
--- 23,33 ----
* Copyright (c) 1988 AT&T
* Copyright (c) 1989 AT&T
* All Rights Reserved
*
* Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2018 Jason King
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
*** 803,822 ****
buf->indx = i;
/* allow to work on machines where NULL-derefs dump core */
if (sym.st_name == 0)
buf->name = "";
else if (C_flag) {
! const char *dn;
char *name = (char *)elf_strptr(elf, link, sym.st_name);
dn = conv_demangle_name(name);
! if (strcmp(dn, name) == 0) { /* Not demangled */
! if (exotic(name)) {
name = FormatName(name, d_buf);
}
- } else { /* name demangled */
- name = FormatName(name, dn);
- }
buf->name = name;
}
else
buf->name = (char *)elf_strptr(elf, link, sym.st_name);
--- 804,823 ----
buf->indx = i;
/* allow to work on machines where NULL-derefs dump core */
if (sym.st_name == 0)
buf->name = "";
else if (C_flag) {
! const char *dn = NULL;
char *name = (char *)elf_strptr(elf, link, sym.st_name);
+
dn = conv_demangle_name(name);
! if (dn != name) {
! name = FormatName(name, dn);
! free((void *)dn);
! } else if (exotic(name)) {
name = FormatName(name, d_buf);
}
buf->name = name;
}
else
buf->name = (char *)elf_strptr(elf, link, sym.st_name);