Bug 1442363, part 8 - Constify XPTMethodDescriptor::params. draft
authorAndrew McCreight <continuation@gmail.com>
Tue, 27 Feb 2018 15:54:17 -0800
changeset 762235 83525428fb47bf0abb76c9547fa738d7181f5225
parent 762234 fd427dcf84dfd98f6f1675c1e1403cc84207e5d2
child 762236 ce06dda5db7c8f2a8d5493ccb810e068f2131bba
push id101107
push userbmo:continuation@gmail.com
push dateThu, 01 Mar 2018 22:22:59 +0000
bugs1442363
milestone60.0a1
Bug 1442363, part 8 - Constify XPTMethodDescriptor::params. MozReview-Commit-ID: 3PvMeJW2P50
xpcom/typelib/xpt/xpt_struct.cpp
xpcom/typelib/xpt/xpt_struct.h
--- 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, &params[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 */