Jacek Caban : mshtml: Added better error handling to nscolor_to_str.

Alexandre Julliard julliard at winehq.org
Mon Dec 28 09:16:04 CST 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Dec 27 00:49:10 2009 +0100

mshtml: Added better error handling to nscolor_to_str.

---

 dlls/mshtml/htmlbody.c |   37 ++++++++++++++++++++++---------------
 1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c
index 427444e..cf62cb9 100644
--- a/dlls/mshtml/htmlbody.c
+++ b/dlls/mshtml/htmlbody.c
@@ -83,20 +83,25 @@ static const struct {
     {yellowW,   {'#','f','f','f','f','0','0',0}}
 };
 
-static BSTR nscolor_to_str(LPCWSTR color)
+static HRESULT nscolor_to_str(LPCWSTR color, BSTR *ret)
 {
     int i;
 
-    if(!color || *color == '#')
-        return SysAllocString(color);
+    if(!color || *color == '#') {
+        *ret = SysAllocString(color);
+        return *ret ? S_OK : E_OUTOFMEMORY;
+    }
 
     for(i=0; i < sizeof(keyword_table)/sizeof(keyword_table[0]); i++) {
-        if(!strcmpiW(color, keyword_table[i].keyword))
-            return SysAllocString(keyword_table[i].hexstr);
+        if(!strcmpiW(color, keyword_table[i].keyword)) {
+            *ret = SysAllocString(keyword_table[i].hexstr);
+            return *ret ? S_OK : E_OUTOFMEMORY;
+        }
     }
 
     WARN("unknown color %s\n", debugstr_w(color));
-    return SysAllocString(color);
+    *ret = SysAllocString(color);
+    return *ret ? S_OK : E_OUTOFMEMORY;
 }
 
 static BOOL variant_to_nscolor(const VARIANT *v, nsAString *nsstr)
@@ -348,23 +353,25 @@ static HRESULT WINAPI HTMLBodyElement_get_bgColor(IHTMLBodyElement *iface, VARIA
     HTMLBodyElement *This = HTMLBODY_THIS(iface);
     nsAString strColor;
     nsresult nsres;
-    const PRUnichar *color;
+    HRESULT hres;
 
     TRACE("(%p)->(%p)\n", This, p);
 
     nsAString_Init(&strColor, NULL);
     nsres = nsIDOMHTMLBodyElement_GetBgColor(This->nsbody, &strColor);
-    if(NS_FAILED(nsres))
-        ERR("SetBgColor failed: %08x\n", nsres);
-
-    nsAString_GetData(&strColor, &color);
+    if(NS_SUCCEEDED(nsres)) {
+        const PRUnichar *color;
 
-    V_VT(p) = VT_BSTR;
-    V_BSTR(p) = nscolor_to_str(color);
+        nsAString_GetData(&strColor, &color);
+        V_VT(p) = VT_BSTR;
+        hres = nscolor_to_str(color, &V_BSTR(p));
+    }else {
+        ERR("SetBgColor failed: %08x\n", nsres);
+        hres = E_FAIL;
+    }
 
     nsAString_Finish(&strColor);
-
-    return S_OK;
+    return hres;
 }
 
 static HRESULT WINAPI HTMLBodyElement_put_text(IHTMLBodyElement *iface, VARIANT v)




More information about the wine-cvs mailing list