forked from OSchip/llvm-project
Fixed memory management issues introduced by revision 157507.
A local std::string was being filled in and then the function would return "s.c_str()". A local StreamString (which contains a std::string) was being filled in, and essentially also returning the c string from the std::string, though it was in a the StreamString class. The fix was to not do this by passing a stream object into StringList::Join() and fix the "arch_helper()" function to do what it should: cache the result in a global. llvm-svn: 157519
This commit is contained in:
parent
3c05cd3ea8
commit
d70b14ea9d
|
@ -51,8 +51,8 @@ public:
|
|||
const char *
|
||||
GetStringAtIndex (size_t idx) const;
|
||||
|
||||
const char *
|
||||
Join (const char *seperator);
|
||||
void
|
||||
Join (const char *separator, Stream &strm);
|
||||
|
||||
void
|
||||
Clear ();
|
||||
|
|
|
@ -95,23 +95,20 @@ StringList::GetStringAtIndex (size_t idx) const
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
StringList::Join (const char *separator)
|
||||
void
|
||||
StringList::Join (const char *separator, Stream &strm)
|
||||
{
|
||||
uint32_t size = GetSize();
|
||||
|
||||
if (size == 0)
|
||||
return "";
|
||||
if (size == 1)
|
||||
return GetStringAtIndex(0);
|
||||
|
||||
std::string buf;
|
||||
return;
|
||||
|
||||
for (uint32_t i = 0; i < size; ++i)
|
||||
{
|
||||
if (i > 0)
|
||||
buf.append(separator);
|
||||
buf.append(GetStringAtIndex(i));
|
||||
strm.PutCString(separator);
|
||||
strm.PutCString(GetStringAtIndex(i));
|
||||
}
|
||||
return buf.c_str();;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -849,12 +849,15 @@ CommandObject::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType
|
|||
static
|
||||
const char *arch_helper()
|
||||
{
|
||||
StringList archs;
|
||||
ArchSpec::AutoComplete(NULL, archs);
|
||||
StreamString ss;
|
||||
ss.Printf("These are the supported architecture names:\n");
|
||||
ss.Printf("%s\n", archs.Join("\n"));
|
||||
return ss.GetData();
|
||||
static StreamString g_archs_help;
|
||||
if (g_archs_help.GetData() == NULL)
|
||||
{
|
||||
StringList archs;
|
||||
ArchSpec::AutoComplete(NULL, archs);
|
||||
g_archs_help.Printf("These are the supported architecture names:\n");
|
||||
archs.Join("%s\n", g_archs_help);
|
||||
}
|
||||
return g_archs_help.GetData();
|
||||
}
|
||||
|
||||
CommandObject::ArgumentTableEntry
|
||||
|
|
Loading…
Reference in New Issue