Jacek Caban : mshtml: Moved getting HTTP header to separated function.

Alexandre Julliard julliard at winehq.org
Wed Aug 4 12:27:21 CDT 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Aug  3 21:38:11 2010 +0200

mshtml: Moved getting HTTP header to separated function.

---

 dlls/mshtml/mshtml_private.h |   13 ++++++++
 dlls/mshtml/nsio.c           |   65 +++++++++++++++++++++++++----------------
 2 files changed, 53 insertions(+), 25 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 4f0df7d..5067b66 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -943,6 +943,19 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
     return ret;
 }
 
+static inline LPWSTR heap_strndupW(LPCWSTR str, unsigned len)
+{
+    LPWSTR ret = NULL;
+
+    if(str) {
+        ret = heap_alloc((len+1)*sizeof(WCHAR));
+        memcpy(ret, str, len*sizeof(WCHAR));
+        ret[len] = 0;
+    }
+
+    return ret;
+}
+
 static inline char *heap_strdupA(const char *str)
 {
     char *ret = NULL;
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 8d4fe0a..fa0aa8d 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -311,6 +311,45 @@ static inline BOOL is_http_channel(nsChannel *This)
     return This->url_scheme == URL_SCHEME_HTTP || This->url_scheme == URL_SCHEME_HTTPS;
 }
 
+static http_header_t *find_http_header(struct list *headers, const WCHAR *name, int len)
+{
+    http_header_t *iter;
+
+    LIST_FOR_EACH_ENTRY(iter, headers, http_header_t, entry) {
+        if(!strcmpiW(iter->header, name))
+            return iter;
+    }
+
+    return NULL;
+}
+
+static nsresult get_channel_http_header(struct list *headers, const nsACString *header_name_str,
+        nsACString *_retval)
+{
+    const char *header_namea;
+    http_header_t *header;
+    WCHAR *header_name;
+    char *data;
+
+    nsACString_GetData(header_name_str, &header_namea);
+    header_name = heap_strdupAtoW(header_namea);
+    if(!header_name)
+        return NS_ERROR_UNEXPECTED;
+
+    header = find_http_header(headers, header_name, strlenW(header_name));
+    heap_free(header_name);
+    if(!header)
+        return NS_ERROR_NOT_AVAILABLE;
+
+    data = heap_strdupWtoA(header->data);
+    if(!data)
+        return NS_ERROR_UNEXPECTED;
+
+    nsACString_SetData(_retval, data);
+    heap_free(data);
+    return NS_OK;
+}
+
 static void free_http_headers(struct list *list)
 {
     http_header_t *iter, *iter_next;
@@ -1079,34 +1118,10 @@ static nsresult NSAPI nsChannel_GetResponseHeader(nsIHttpChannel *iface,
          const nsACString *header, nsACString *_retval)
 {
     nsChannel *This = NSCHANNEL_THIS(iface);
-    const char *header_str;
-    WCHAR *header_wstr;
-    struct ResponseHeader *this_header;
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_nsacstr(header), _retval);
 
-    nsACString_GetData(header, &header_str);
-    header_wstr = heap_strdupAtoW(header_str);
-    if(!header_wstr)
-        return NS_ERROR_UNEXPECTED;
-
-    LIST_FOR_EACH_ENTRY(this_header, &This->response_headers, struct ResponseHeader, entry) {
-        if(!strcmpW(this_header->header, header_wstr)) {
-            char *data = heap_strdupWtoA(this_header->data);
-            if(!data) {
-                heap_free(header_wstr);
-                return NS_ERROR_UNEXPECTED;
-            }
-            nsACString_SetData(_retval, data);
-            heap_free(data);
-            heap_free(header_wstr);
-            return NS_OK;
-        }
-    }
-
-    heap_free(header_wstr);
-
-    return NS_ERROR_NOT_AVAILABLE;
+    return get_channel_http_header(&This->response_headers, header, _retval);
 }
 
 static nsresult NSAPI nsChannel_SetResponseHeader(nsIHttpChannel *iface,




More information about the wine-cvs mailing list