fix for bug 33250. fixes memory leaks by freeing strings in dtor. also switching to using nsCRT::strdup. r/a=brendan.

git-svn-id: svn://10.0.0.236/trunk@71134 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pinkerton%netscape.com
2000-05-31 02:30:07 +00:00
parent 85ceb4d8bc
commit 1e2737b3fa
2 changed files with 48 additions and 18 deletions

View File

@@ -52,8 +52,8 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
//Insert the program name
if (aArgv[0])
{
mArgList.AppendElement((void *)PL_strdup("-progname"));
mArgValueList.AppendElement((void *)PL_strdup(aArgv[0]));
mArgList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup("-progname")));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup(aArgv[0])));
mArgCount++;
i++;
}
@@ -64,7 +64,7 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
/* An option that starts with -. May or many not
* have a value after it.
*/
mArgList.AppendElement((void *)PL_strdup(aArgv[i]));
mArgList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup(aArgv[i])));
//Increment the index to look ahead at the next option.
i++;
@@ -75,7 +75,7 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
/* All args have been parsed. Append a PR_TRUE for the
* previous option in the mArgValueList
*/
mArgValueList.AppendElement((void *)PL_strdup("1"));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup("1")));
mArgCount++;
break;
}
@@ -85,7 +85,7 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
* mArgValue array and retract the index so that this option
* will get stored in the next iteration
*/
mArgValueList.AppendElement((void *)PL_strdup("1"));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup("1")));
mArgCount++;
i--;
continue;
@@ -103,7 +103,7 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
// Append the url to the arrays
//mArgList.AppendElement((void *)PL_strdup("-url"));
mArgValueList.AppendElement((void *) PL_strdup(aArgv[i]));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup(aArgv[i])));
mArgCount++;
continue;
}
@@ -111,7 +111,7 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
/* This is a value to the previous option.
* Store it in the mArgValue array
*/
mArgValueList.AppendElement((void *)PL_strdup(aArgv[i]));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup(aArgv[i])));
mArgCount++;
}
}
@@ -121,8 +121,8 @@ nsCmdLineService::Initialize(int aArgc, char ** aArgv)
/* This must be the URL at the end
* Append the url to the arrays
*/
mArgList.AppendElement((void *)PL_strdup("-url"));
mArgValueList.AppendElement((void *) PL_strdup(aArgv[i]));
mArgList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup("-url")));
mArgValueList.AppendElement(NS_REINTERPRET_CAST(void*, nsCRT::strdup(aArgv[i])));
mArgCount++;
}
else {
@@ -237,6 +237,21 @@ nsCmdLineService::GetArgv(char *** aResult)
nsCmdLineService::~nsCmdLineService()
{
PRInt32 curr = mArgList.Count();
while ( curr ) {
char* str = NS_REINTERPRET_CAST(char*, mArgList[curr-1]);
if ( str )
nsAllocator::Free(str);
--curr;
}
curr = mArgValueList.Count();
while ( curr ) {
char* str = NS_REINTERPRET_CAST(char*, mArgValueList[curr-1]);
if ( str )
nsAllocator::Free(str);
--curr;
}
}