Print this page
cleanup
@@ -227,11 +227,13 @@
}
dmp->dm_len = reslen;
}
if (prefixlen > 0)
- (void) strlcpy(dmp->dm_buf, name, prefixlen);
+ (void) strlcpy(dmp->dm_buf, name, prefixlen + 1);
+ else
+ *dmp->dm_buf = '\0';
if (res != NULL) {
(void) strlcat(dmp->dm_buf, res, dmp->dm_len);
mdb_dem_free(res, strlen(res) + 1);
}
@@ -325,10 +327,16 @@
cmd_demstr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
if ((flags & DCMD_ADDRSPEC) || argc == 0)
return (DCMD_USAGE);
+ if (mdb.m_demangler == NULL && (mdb.m_demangler =
+ mdb_dem_load()) == NULL) {
+ mdb_warn("failed to load demangler");
+ return (DCMD_ERR);
+ }
+
for (; argc != 0; argc--, argv++) {
mdb_printf("%s == %s\n", argv->a_un.a_str,
mdb_dem_convert(mdb.m_demangler, argv->a_un.a_str));
}