Module: wine Branch: master Commit: b1c6f41da9db7e7b832ce2246378403b367883bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=b1c6f41da9db7e7b832ce22463...
Author: Jacek Caban jacek@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,