Bug 1442363, part 8 - Constify XPTMethodDescriptor::params. r=njn
MozReview-Commit-ID: 3PvMeJW2P50
--- a/xpcom/typelib/xpt/xpt_struct.cpp
+++ b/xpcom/typelib/xpt/xpt_struct.cpp
@@ -348,28 +348,32 @@ DoMethodDescriptor(XPTArena *arena, NotN
{
int i;
if (!XPT_Do8(cursor, &md->flags) ||
!XPT_DoCString(arena, cursor, &md->name) ||
!XPT_Do8(cursor, &md->num_args))
return false;
+ XPTParamDescriptor* params = nullptr;
+
if (md->num_args) {
size_t n = md->num_args * sizeof(XPTParamDescriptor);
- md->params = static_cast<XPTParamDescriptor*>(XPT_CALLOC8(arena, n));
- if (!md->params)
+ params = static_cast<XPTParamDescriptor*>(XPT_CALLOC8(arena, n));
+ if (!params)
return false;
}
for(i = 0; i < md->num_args; i++) {
- if (!DoParamDescriptor(arena, cursor, &md->params[i], id))
+ if (!DoParamDescriptor(arena, cursor, ¶ms[i], id))
return false;
}
+ md->params = params;
+
// |result| appears in the on-disk format but it isn't used,
// because a method is either notxpcom, in which case it can't be
// called from script so the XPT information is irrelevant, or the
// result type is nsresult.
XPTParamDescriptor result;
if (!DoParamDescriptor(arena, cursor, &result, id))
return false;
--- a/xpcom/typelib/xpt/xpt_struct.h
+++ b/xpcom/typelib/xpt/xpt_struct.h
@@ -262,15 +262,15 @@ struct XPTParamDescriptor {
};
/*
* A MethodDescriptor is a variable-size record used to describe a single
* interface method.
*/
struct XPTMethodDescriptor {
const char* name;
- XPTParamDescriptor* params;
+ const XPTParamDescriptor* params;
//XPTParamDescriptor result; // Present on disk, omitted here.
uint8_t flags;
uint8_t num_args;
};
#endif /* xpt_struct_h */