[PATCH resend 09/13] msscript.ocx: Move ScriptControl_AddObject implementation into a helper.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Tue May 26 07:42:03 CDT 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/msscript.ocx/msscript.c | 59 +++++++++++++++++++++---------------
1 file changed, 35 insertions(+), 24 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index d5fdca7..0745e09 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -255,6 +255,40 @@ static HRESULT start_script(struct ScriptControl *control)
return hr;
}
+static HRESULT add_script_object(ScriptHost *host, BSTR name, IDispatch *object, DWORD flags)
+{
+ struct named_item *item;
+ HRESULT hr;
+
+ if (host_get_named_item(host, name))
+ return E_INVALIDARG;
+
+ item = heap_alloc(sizeof(*item));
+ if (!item)
+ return E_OUTOFMEMORY;
+
+ item->name = SysAllocString(name);
+ if (!item->name)
+ {
+ heap_free(item);
+ return E_OUTOFMEMORY;
+ }
+ IDispatch_AddRef(item->disp = object);
+ list_add_tail(&host->named_items, &item->entry);
+
+ hr = IActiveScript_AddNamedItem(host->script, name, flags);
+ if (FAILED(hr))
+ {
+ list_remove(&item->entry);
+ IDispatch_Release(item->disp);
+ SysFreeString(item->name);
+ heap_free(item);
+ return hr;
+ }
+
+ return hr;
+}
+
static HRESULT parse_script_text(ScriptModule *module, BSTR script_text, DWORD flag, VARIANT *res)
{
EXCEPINFO excepinfo;
@@ -1473,8 +1507,6 @@ static HRESULT WINAPI ScriptControl_AddObject(IScriptControl *iface, BSTR name,
{
ScriptControl *This = impl_from_IScriptControl(iface);
DWORD flags = SCRIPTITEM_ISVISIBLE | SCRIPTITEM_ISSOURCE;
- struct named_item *item;
- HRESULT hr;
TRACE("(%p)->(%s %p %x)\n", This, debugstr_w(name), object, add_members);
@@ -1484,30 +1516,9 @@ static HRESULT WINAPI ScriptControl_AddObject(IScriptControl *iface, BSTR name,
if (!This->host)
return E_FAIL;
- if (host_get_named_item(This->host, name))
- return E_INVALIDARG;
-
- item = heap_alloc(sizeof(*item));
- if (!item)
- return E_OUTOFMEMORY;
-
- item->name = SysAllocString(name);
- IDispatch_AddRef(item->disp = object);
- list_add_tail(&This->host->named_items, &item->entry);
-
if (add_members)
flags |= SCRIPTITEM_GLOBALMEMBERS;
- hr = IActiveScript_AddNamedItem(This->host->script, name, flags);
- if (FAILED(hr)) {
- list_remove(&item->entry);
- IDispatch_Release(item->disp);
- SysFreeString(item->name);
- heap_free(item);
- return hr;
- }
-
-
- return hr;
+ return add_script_object(This->host, name, object, flags);
}
static HRESULT WINAPI ScriptControl_Reset(IScriptControl *iface)
--
2.21.0
More information about the wine-devel
mailing list