Jacek Caban : vbscipt: Added IActiveScript::Close implementation.

Alexandre Julliard julliard at winehq.org
Wed Aug 31 13:19:21 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug 31 11:22:15 2011 +0200

vbscipt: Added IActiveScript::Close implementation.

---

 dlls/vbscript/vbscript.c |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index b5cc9bf..6160f3b 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -19,6 +19,7 @@
 #include "config.h"
 
 #include <stdarg.h>
+#include <assert.h>
 
 #define COBJMACROS
 
@@ -85,6 +86,37 @@ static void destroy_script(script_ctx_t *ctx)
     heap_free(ctx);
 }
 
+static void decrease_state(VBScript *This, SCRIPTSTATE state)
+{
+    switch(This->state) {
+    case SCRIPTSTATE_CONNECTED:
+    case SCRIPTSTATE_STARTED:
+    case SCRIPTSTATE_DISCONNECTED:
+        FIXME("unimplemented state %d\n", This->state);
+        if(state == SCRIPTSTATE_INITIALIZED)
+            break;
+        /* FALLTHROUGH */
+    case SCRIPTSTATE_INITIALIZED:
+        destroy_script(This->ctx);
+        This->ctx = NULL;
+        This->thread_id = 0;
+
+        change_state(This, state);
+        if(state == SCRIPTSTATE_UNINITIALIZED)
+            break;
+        /* FALLTHROUGH */
+    case SCRIPTSTATE_UNINITIALIZED:
+        if(This->site) {
+            IActiveScriptSite_Release(This->site);
+            This->site = NULL;
+        }
+
+        break;
+    default:
+        assert(0);
+    }
+}
+
 static inline VBScript *impl_from_IActiveScript(IActiveScript *iface)
 {
     return CONTAINING_RECORD(iface, VBScript, IActiveScript_iface);
@@ -191,8 +223,14 @@ static HRESULT WINAPI VBScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE
 static HRESULT WINAPI VBScript_Close(IActiveScript *iface)
 {
     VBScript *This = impl_from_IActiveScript(iface);
-    FIXME("(%p)->()\n", This);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->()\n", This);
+
+    if(This->thread_id && This->thread_id != GetCurrentThreadId())
+        return E_UNEXPECTED;
+
+    decrease_state(This, SCRIPTSTATE_CLOSED);
+    return S_OK;
 }
 
 static HRESULT WINAPI VBScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)




More information about the wine-cvs mailing list