reduce size of HashEntry so that the assertion won't be triggered (bug 168301, r=sfraser, sr=brendan)

This commit is contained in:
brade%netscape.com 2002-09-12 22:09:45 +00:00
Родитель 9f01d42522
Коммит c66477dc07
2 изменённых файлов: 17 добавлений и 20 удалений

Просмотреть файл

@ -154,8 +154,8 @@ NS_IMETHODIMP nsCommandParams::GetStringValue(const char *name, nsAString & _ret
HashEntry* foundEntry = GetNamedEntry(name);
if (foundEntry && foundEntry->mEntryType == eWStringType)
{
NS_ASSERTION(foundEntry->mString, "Null string");
_retval.Assign(*foundEntry->mString);
NS_ASSERTION(foundEntry->mData.mString, "Null string");
_retval.Assign(*foundEntry->mData.mString);
return NS_OK;
}
@ -168,8 +168,8 @@ NS_IMETHODIMP nsCommandParams::GetCStringValue(const char * name, char **_retval
HashEntry* foundEntry = GetNamedEntry(name);
if (foundEntry && foundEntry->mEntryType == eStringType)
{
NS_ASSERTION(foundEntry->mCString, "Null string");
*_retval= nsCRT::strdup((*foundEntry->mCString).get());
NS_ASSERTION(foundEntry->mData.mCString, "Null string");
*_retval= nsCRT::strdup((*foundEntry->mData.mCString).get());
return NS_OK;
}
@ -237,7 +237,7 @@ NS_IMETHODIMP nsCommandParams::SetStringValue(const char * name, const nsAString
GetOrMakeEntry(name, eWStringType, foundEntry);
if (!foundEntry) return NS_ERROR_OUT_OF_MEMORY;
foundEntry->mString = new nsString(value);
foundEntry->mData.mString = new nsString(value);
return NS_OK;
}
@ -248,7 +248,7 @@ NS_IMETHODIMP nsCommandParams::SetCStringValue(const char * name, const char * v
GetOrMakeEntry(name, eStringType, foundEntry);
if (!foundEntry)
return NS_ERROR_OUT_OF_MEMORY;
foundEntry->mCString = new nsCString(value);
foundEntry->mData.mCString = new nsCString(value);
return NS_OK;
}

Просмотреть файл

@ -76,20 +76,17 @@ protected:
PRBool mBoolean;
PRInt32 mLong;
double mDouble;
nsString* mString;
nsCString* mCString;
} mData;
// put these outside the union to avoid clobbering other fields
nsString* mString;
nsCString* mCString;
nsCOMPtr<nsISupports> mISupports;
HashEntry(PRUint8 inType, const char * inEntryName)
: mEntryType(inType)
, mEntryName(inEntryName)
, mString(nsnull)
{
mData.mDouble = 0.0;
memset(&mData, 0, sizeof(mData));
Reset(mEntryType);
}
@ -103,12 +100,12 @@ protected:
case eLongType: mData.mLong = inRHS.mData.mLong; break;
case eDoubleType: mData.mDouble = inRHS.mData.mDouble; break;
case eWStringType:
NS_ASSERTION(inRHS.mString, "Source entry has no string");
mString = new nsString(*inRHS.mString);
NS_ASSERTION(inRHS.mData.mString, "Source entry has no string");
mData.mString = new nsString(*inRHS.mData.mString);
break;
case eStringType:
NS_ASSERTION(inRHS.mCString, "Source entry has no string");
mCString = new nsCString(*inRHS.mCString);
NS_ASSERTION(inRHS.mData.mCString, "Source entry has no string");
mData.mCString = new nsCString(*inRHS.mData.mCString);
break;
case eISupportsType:
mISupports = inRHS.mISupports.get(); // additional addref
@ -121,9 +118,9 @@ protected:
~HashEntry()
{
if (mEntryType == eWStringType)
delete mString;
delete mData.mString;
else if (mEntryType == eStringType)
delete mCString;
delete mData.mCString;
}
void Reset(PRUint8 inNewType)
@ -134,9 +131,9 @@ protected:
case eBooleanType: mData.mBoolean = PR_FALSE; break;
case eLongType: mData.mLong = 0; break;
case eDoubleType: mData.mDouble = 0.0; break;
case eWStringType: delete mString; mString = nsnull; break;
case eWStringType: delete mData.mString; mData.mString = nsnull; break;
case eISupportsType: mISupports = nsnull; break; // clear the nsCOMPtr
case eStringType: delete mCString; mCString = nsnull; break;
case eStringType: delete mData.mCString; mData.mCString = nsnull; break;
default:
NS_ASSERTION(0, "Unknown type");
}