Jacek Caban : mshtml: Support returning VT_NULL from return_nsstr_variant.

Alexandre Julliard julliard at winehq.org
Thu Jul 20 16:20:35 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul 20 18:11:22 2017 +0200

mshtml: Support returning VT_NULL from return_nsstr_variant.

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

---

 dlls/mshtml/mshtml_private.h |  7 +------
 dlls/mshtml/nsembed.c        | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 9bdb0844..f95adc0 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -926,12 +926,7 @@ UINT32 nsAString_GetData(const nsAString*,const PRUnichar**) DECLSPEC_HIDDEN;
 void nsAString_Finish(nsAString*) DECLSPEC_HIDDEN;
 
 HRESULT return_nsstr(nsresult,nsAString*,BSTR*) DECLSPEC_HIDDEN;
-
-static inline HRESULT return_nsstr_variant(nsresult nsres, nsAString *nsstr, VARIANT *p)
-{
-    V_VT(p) = VT_BSTR;
-    return return_nsstr(nsres, nsstr, &V_BSTR(p));
-}
+HRESULT return_nsstr_variant(nsresult nsres, nsAString *nsstr, VARIANT *p) DECLSPEC_HIDDEN;
 
 nsICommandParams *create_nscommand_params(void) DECLSPEC_HIDDEN;
 HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index aee00e6..a32f8f1 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -69,6 +69,7 @@ static nsresult (CDECL *NS_CStringSetData)(nsACString*,const char*,PRUint32);
 static nsresult (CDECL *NS_NewLocalFile)(const nsAString*,cpp_bool,nsIFile**);
 static PRUint32 (CDECL *NS_StringGetData)(const nsAString*,const PRUnichar **,cpp_bool*);
 static PRUint32 (CDECL *NS_CStringGetData)(const nsACString*,const char**,cpp_bool*);
+static cpp_bool (CDECL *NS_StringGetIsVoid)(const nsAString*);
 static void* (CDECL *NS_Alloc)(SIZE_T);
 static void (CDECL *NS_Free)(void*);
 
@@ -518,6 +519,7 @@ static BOOL load_xul(const PRUnichar *gre_path)
     NS_DLSYM(NS_NewLocalFile);
     NS_DLSYM(NS_StringGetData);
     NS_DLSYM(NS_CStringGetData);
+    NS_DLSYM(NS_StringGetIsVoid);
     NS_DLSYM(NS_Alloc);
     NS_DLSYM(NS_Free);
     NS_DLSYM(ccref_incr);
@@ -870,6 +872,38 @@ HRESULT return_nsstr(nsresult nsres, nsAString *nsstr, BSTR *p)
     return S_OK;
 }
 
+HRESULT return_nsstr_variant(nsresult nsres, nsAString *nsstr, VARIANT *p)
+{
+    const PRUnichar *str;
+
+    if(NS_FAILED(nsres)) {
+        ERR("failed: %08x\n", nsres);
+        nsAString_Finish(nsstr);
+        return E_FAIL;
+    }
+
+    if(NS_StringGetIsVoid(nsstr)) {
+        TRACE("ret null\n");
+        V_VT(p) = VT_NULL;
+    }else {
+        nsAString_GetData(nsstr, &str);
+        TRACE("ret %s\n", debugstr_w(str));
+        if(*str) {
+            V_BSTR(p) = SysAllocString(str);
+            if(!V_BSTR(p)) {
+                nsAString_Finish(nsstr);
+                return E_OUTOFMEMORY;
+            }
+        }else {
+            V_BSTR(p) = NULL;
+        }
+        V_VT(p) = VT_BSTR;
+    }
+
+    nsAString_Finish(nsstr);
+    return S_OK;
+}
+
 nsICommandParams *create_nscommand_params(void)
 {
     nsICommandParams *ret = NULL;




More information about the wine-cvs mailing list