Jacek Caban : mshtml: Store function buffer size in dispex_data_t.

Alexandre Julliard julliard at winehq.org
Wed Jul 6 09:57:30 CDT 2016


Module: wine
Branch: master
Commit: 392a41060c4e195009666395766bdb4b168bb7d9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=392a41060c4e195009666395766bdb4b168bb7d9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul  5 22:46:11 2016 +0200

mshtml: Store function buffer size in dispex_data_t.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/dispex.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 7c40d47..09f0250 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -62,6 +62,7 @@ typedef struct {
 
 struct dispex_data_t {
     DWORD func_cnt;
+    DWORD func_size;
     func_info_t *funcs;
     func_info_t **name_table;
     DWORD func_disp_cnt;
@@ -225,7 +226,7 @@ static BOOL is_arg_type_supported(VARTYPE vt)
     return FALSE;
 }
 
-static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti)
+static void add_func_info(dispex_data_t *data, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti)
 {
     func_info_t *info;
     HRESULT hres;
@@ -239,8 +240,8 @@ static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUN
     }
 
     if(info == data->funcs+data->func_cnt) {
-        if(data->func_cnt == *size)
-            data->funcs = heap_realloc_zero(data->funcs, (*size <<= 1)*sizeof(func_info_t));
+        if(data->func_cnt == data->func_size)
+            data->funcs = heap_realloc_zero(data->funcs, (data->func_size <<= 1)*sizeof(func_info_t));
         info = data->funcs+data->func_cnt;
 
         hres = ITypeInfo_GetDocumentation(dti, desc->memid, &info->name, NULL, NULL, NULL);
@@ -315,7 +316,7 @@ static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUN
     }
 }
 
-static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp_typeinfo, DWORD *size)
+static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp_typeinfo)
 {
     unsigned i = 7; /* skip IDispatch functions */
     ITypeInfo *typeinfo;
@@ -333,7 +334,7 @@ static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp
 
         TRACE("adding...\n");
 
-        add_func_info(data, size, tid, funcdesc, disp_typeinfo ? disp_typeinfo : typeinfo);
+        add_func_info(data, tid, funcdesc, disp_typeinfo ? disp_typeinfo : typeinfo);
         ITypeInfo_ReleaseFuncDesc(typeinfo, funcdesc);
     }
 
@@ -354,7 +355,7 @@ static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
 {
     const tid_t *tid;
     dispex_data_t *data;
-    DWORD size = 16, i;
+    DWORD i;
     ITypeInfo *dti;
     HRESULT hres;
 
@@ -375,7 +376,8 @@ static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
     }
     data->func_cnt = 0;
     data->func_disp_cnt = 0;
-    data->funcs = heap_alloc_zero(size*sizeof(func_info_t));
+    data->func_size = 16;
+    data->funcs = heap_alloc_zero(data->func_size*sizeof(func_info_t));
     if (!data->funcs) {
         heap_free (data);
         ERR("Out of memory\n");
@@ -384,18 +386,19 @@ static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
     list_add_tail(&dispex_data_list, &data->entry);
 
     for(tid = This->data->iface_tids; *tid; tid++) {
-        hres = process_interface(data, *tid, dti, &size);
+        hres = process_interface(data, *tid, dti);
         if(FAILED(hres))
             break;
     }
 
     if(This->data->additional_tid)
-        process_interface(data, This->data->additional_tid, NULL, &size);
+        process_interface(data, This->data->additional_tid, NULL);
 
     if(!data->func_cnt) {
         heap_free(data->funcs);
         data->name_table = NULL;
         data->funcs = NULL;
+        data->func_size = 0;
         return data;
     }
 




More information about the wine-cvs mailing list