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));
         }