Print this page
cleanup

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mdb/common/mdb/mdb_demangle.c
          +++ new/usr/src/cmd/mdb/common/mdb/mdb_demangle.c
↓ open down ↓ 221 lines elided ↑ open up ↑
 222  222                  dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
 223  223                  if (dmp->dm_buf == NULL) {
 224  224                          dmp->dm_len = 0;
 225  225                          mdb_warn("Unable to allocate memory for demangling");
 226  226                          return (-1);
 227  227                  }
 228  228                  dmp->dm_len = reslen;
 229  229          }
 230  230  
 231  231          if (prefixlen > 0)
 232      -                (void) strlcpy(dmp->dm_buf, name, prefixlen);
      232 +                (void) strlcpy(dmp->dm_buf, name, prefixlen + 1);
      233 +        else
      234 +                *dmp->dm_buf = '\0';
 233  235  
 234  236          if (res != NULL) {
 235  237                  (void) strlcat(dmp->dm_buf, res, dmp->dm_len);
 236  238                  mdb_dem_free(res, strlen(res) + 1);
 237  239          }
 238  240  
 239  241          /*
 240  242           * Save the position of the demangled string for mdb_dem_filter()
 241  243           */
 242  244          dmp->dm_dem = dmp->dm_buf + prefixlen;
↓ open down ↓ 77 lines elided ↑ open up ↑
 320  322          return (DCMD_OK);
 321  323  }
 322  324  
 323  325  /*ARGSUSED*/
 324  326  int
 325  327  cmd_demstr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
 326  328  {
 327  329          if ((flags & DCMD_ADDRSPEC) || argc == 0)
 328  330                  return (DCMD_USAGE);
 329  331  
      332 +        if (mdb.m_demangler == NULL && (mdb.m_demangler =
      333 +            mdb_dem_load()) == NULL) {
      334 +                mdb_warn("failed to load demangler");
      335 +                return (DCMD_ERR);
      336 +        }
      337 +
 330  338          for (; argc != 0; argc--, argv++) {
 331  339                  mdb_printf("%s == %s\n", argv->a_un.a_str,
 332  340                      mdb_dem_convert(mdb.m_demangler, argv->a_un.a_str));
 333  341          }
 334  342  
 335  343          return (DCMD_OK);
 336  344  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX