Bug 1409227 (part 4) - Replace nsMemory::Clone(id, sizeof(nsID)) with nsID::Clone(id). r=mccr8.

This change requires introducing nsID::Clone(). Because it's infallible, the
patch also removes some redundant failure-handling code. (nsMemory::Clone() is
also infallible, so this code was redundant even before this change.)

--HG--
extra : rebase_source : ef22757d3fa814320490bf7e19e822b8f0c4bdc3
This commit is contained in:
Nicholas Nethercote 2017-10-18 10:39:20 +11:00
Родитель 1fdf1c46d3
Коммит 7f098bdb9c
14 изменённых файлов: 78 добавлений и 321 удалений

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

@ -4126,7 +4126,7 @@ nsDocShell::GetChildOffset(int32_t* aChildOffset)
NS_IMETHODIMP
nsDocShell::GetHistoryID(nsID** aID)
{
*aID = static_cast<nsID*>(nsMemory::Clone(&mHistoryID, sizeof(nsID)));
*aID = mHistoryID.Clone();
return NS_OK;
}

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

@ -959,7 +959,7 @@ nsSHEntry::HasDynamicallyAddedChild(bool* aAdded)
NS_IMETHODIMP
nsSHEntry::GetDocshellID(nsID** aID)
{
*aID = static_cast<nsID*>(nsMemory::Clone(&mShared->mDocShellID, sizeof(nsID)));
*aID = mShared->mDocShellID.Clone();
return NS_OK;
}

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

@ -544,20 +544,10 @@ nsDOMClassInfo::GetInterfaces(uint32_t *aCount, nsIID ***aArray)
}
*aArray = static_cast<nsIID **>(moz_xmalloc(count * sizeof(nsIID *)));
NS_ENSURE_TRUE(*aArray, NS_ERROR_OUT_OF_MEMORY);
uint32_t i;
for (i = 0; i < count; i++) {
nsIID *iid = static_cast<nsIID *>(nsMemory::Clone(mData->mInterfaces[i],
sizeof(nsIID)));
if (!iid) {
NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, *aArray);
return NS_ERROR_OUT_OF_MEMORY;
}
*((*aArray) + i) = iid;
*((*aArray) + i) = mData->mInterfaces[i]->Clone();
}
return NS_OK;

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

@ -123,33 +123,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_Interfaces::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_Interfaces)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_Interfaces).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -347,33 +327,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_InterfacesByID::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_InterfacesByID)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_InterfacesByID).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -573,33 +533,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_Classes::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_Classes)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_Classes).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -787,33 +727,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_ClassesByID::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_ClassesByID)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_ClassesByID).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -1016,33 +936,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_Results::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_Results)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_Results).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -1205,33 +1105,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_ID::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_ID)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_ID).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -1401,33 +1281,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_Exception::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_Exception)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_Exception).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -1764,33 +1624,13 @@ private:
NS_IMETHODIMP
nsXPCConstructor::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCConstructor)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCConstructor).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
@ -1985,33 +1825,13 @@ private:
NS_IMETHODIMP
nsXPCComponents_Constructor::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCComponents_Constructor)
PUSH_IID(nsIXPCScriptable)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCComponents_Constructor).Clone();
array[1] = NS_GET_IID(nsIXPCScriptable).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP

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

@ -481,11 +481,10 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
}
if (!s.isObject() ||
(!(pid = xpc_JSObjectToID(cx, &s.toObject()))) ||
(!(pid = (const nsID*) nsMemory::Clone(pid, sizeof(nsID))))) {
!(pid = xpc_JSObjectToID(cx, &s.toObject()))) {
return false;
}
*((const nsID**)d) = pid;
*((const nsID**)d) = pid->Clone();
return true;
}

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

@ -80,33 +80,13 @@ BackstagePass::Enumerate(nsIXPConnectWrappedNative* wrapper, JSContext* cx,
NS_IMETHODIMP
BackstagePass::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
{
const uint32_t count = 2;
*aCount = count;
nsIID** array;
*aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
if (!array)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t index = 0;
nsIID* clone;
#define PUSH_IID(id) \
clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ), \
sizeof(nsIID))); \
if (!clone) \
goto oom; \
array[index++] = clone;
PUSH_IID(nsIXPCScriptable)
PUSH_IID(nsIScriptObjectPrincipal)
#undef PUSH_IID
*aCount = 2;
nsIID** array = static_cast<nsIID**>(moz_xmalloc(2 * sizeof(nsIID*)));
*aArray = array;
array[0] = NS_GET_IID(nsIXPCScriptable).Clone();
array[1] = NS_GET_IID(nsIScriptObjectPrincipal).Clone();
return NS_OK;
oom:
while (index)
free(array[--index]);
free(array);
*aArray = nullptr;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP

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

@ -620,8 +620,8 @@ nsXPCWrappedJS::GetInterfaceIID(nsIID** iid)
{
NS_PRECONDITION(iid, "bad param");
*iid = (nsIID*) nsMemory::Clone(&(GetIID()), sizeof(nsIID));
return *iid ? NS_OK : NS_ERROR_UNEXPECTED;
*iid = GetIID().Clone();
return NS_OK;
}
void

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

@ -147,8 +147,7 @@ NS_CI_INTERFACE_GETTER_NAME(_class)(uint32_t *count, nsIID ***array) \
uint32_t i = 0;
#define NS_CLASSINFO_HELPER_ENTRY(_interface) \
(*array)[i++] = (nsIID*)nsMemory::Clone(&NS_GET_IID(_interface), \
sizeof(nsIID));
(*array)[i++] = NS_GET_IID(_interface).Clone(); \
#define NS_CLASSINFO_HELPER_END \
MOZ_ASSERT(i == *count, "Incorrent number of entries"); \

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

@ -129,3 +129,11 @@ nsID::ToProvidedString(char (&aDest)[NSID_LENGTH]) const
}
#endif // XPCOM_GLUE_AVOID_NSPR
nsID*
nsID::Clone() const
{
auto id = static_cast<nsID*>(moz_xmalloc(sizeof(nsID)));
*id = *this;
return id;
}

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

@ -83,6 +83,9 @@ struct nsID
#endif // XPCOM_GLUE_AVOID_NSPR
// Infallibly duplicate an nsID. Must be freed with free().
nsID* Clone() const;
//@}
};

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

@ -45,12 +45,7 @@ nsSupportsID::GetData(nsID** aData)
{
NS_ASSERTION(aData, "Bad pointer");
if (mData) {
*aData = static_cast<nsID*>(nsMemory::Clone(mData, sizeof(nsID)));
} else {
*aData = nullptr;
}
*aData = mData ? mData->Clone() : nullptr;
return NS_OK;
}
@ -61,12 +56,7 @@ nsSupportsID::SetData(const nsID* aData)
free(mData);
}
if (aData) {
mData = static_cast<nsID*>(nsMemory::Clone(aData, sizeof(nsID)));
} else {
mData = nullptr;
}
mData = aData ? aData->Clone() : nullptr;
return NS_OK;
}
@ -715,12 +705,7 @@ nsSupportsInterfacePointer::GetDataIID(nsID** aIID)
{
NS_ASSERTION(aIID, "Bad pointer");
if (mIID) {
*aIID = static_cast<nsID*>(nsMemory::Clone(mIID, sizeof(nsID)));
} else {
*aIID = nullptr;
}
*aIID = mIID ? mIID->Clone() : nullptr;
return NS_OK;
}
@ -731,12 +716,7 @@ nsSupportsInterfacePointer::SetDataIID(const nsID* aIID)
free(mIID);
}
if (aIID) {
mIID = static_cast<nsID*>(nsMemory::Clone(aIID, sizeof(nsID)));
} else {
mIID = nullptr;
}
mIID = aIID ? aIID->Clone() : nullptr;
return NS_OK;
}

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

@ -251,8 +251,6 @@ CloneArray(uint16_t aInType, const nsIID* aInIID,
NS_ASSERTION(aOutCount, "bad param");
NS_ASSERTION(aOutValue, "bad param");
uint32_t allocatedValueCount = 0;
nsresult rv = NS_OK;
uint32_t i;
// First we figure out the size of the elements for the new u.array.
@ -378,13 +376,10 @@ CloneArray(uint16_t aInType, const nsIID* aInIID,
for (i = aInCount; i > 0; --i) {
nsID* idp = *(inp++);
if (idp) {
if (!(*(outp++) = (nsID*)nsMemory::Clone((char*)idp, sizeof(nsID)))) {
goto bad;
}
*(outp++) = idp->Clone();
} else {
*(outp++) = nullptr;
}
allocatedValueCount++;
}
break;
}
@ -399,7 +394,6 @@ CloneArray(uint16_t aInType, const nsIID* aInIID,
} else {
*(outp++) = nullptr;
}
allocatedValueCount++;
}
break;
}
@ -414,7 +408,6 @@ CloneArray(uint16_t aInType, const nsIID* aInIID,
} else {
*(outp++) = nullptr;
}
allocatedValueCount++;
}
break;
}
@ -438,18 +431,6 @@ CloneArray(uint16_t aInType, const nsIID* aInIID,
*aOutType = aInType;
*aOutCount = aInCount;
return NS_OK;
bad:
if (*aOutValue) {
char** p = (char**)*aOutValue;
for (i = allocatedValueCount; i > 0; ++p, --i)
if (*p) {
free(*p);
}
free((char*)*aOutValue);
*aOutValue = nullptr;
}
return rv;
}
/***************************************************************************/
@ -1162,10 +1143,7 @@ nsDiscriminatedUnion::ConvertToInterface(nsIID** aIID,
return NS_ERROR_CANNOT_CONVERT_DATA;
}
*aIID = (nsIID*)nsMemory::Clone(piid, sizeof(nsIID));
if (!*aIID) {
return NS_ERROR_OUT_OF_MEMORY;
}
*aIID = piid->Clone();
if (u.iface.mInterfaceValue) {
return u.iface.mInterfaceValue->QueryInterface(*piid, aInterface);

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

@ -412,7 +412,7 @@ ShimInterfaceInfo::GetName(char** aName)
NS_IMETHODIMP
ShimInterfaceInfo::GetInterfaceIID(nsIID** aIID)
{
*aIID = static_cast<nsIID*> (nsMemory::Clone(&mIID, sizeof(mIID)));
*aIID = mIID.Clone();
return NS_OK;
}

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

@ -127,8 +127,8 @@ nsresult
xptiInterfaceEntry::GetIID(nsIID **iid)
{
// It is not necessary to Resolve because this info is read from manifest.
*iid = (nsIID*) nsMemory::Clone(&mIID, sizeof(nsIID));
return *iid ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
*iid = mIID.Clone();
return NS_OK;
}
nsresult