From ffe9cc87c0e759dffe2a19a96a1e5c7746c7ad62 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 17 Sep 2010 18:33:45 +0200 Subject: [PATCH] mshtml: Added nsIURL::GetQuery implementation. --- dlls/mshtml/nsio.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index d5a32e443df..35a35f0e4fe 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -2105,14 +2105,41 @@ static nsresult NSAPI nsURL_SetParam(nsIURL *iface, const nsACString *aParam) static nsresult NSAPI nsURL_GetQuery(nsIURL *iface, nsACString *aQuery) { nsWineURI *This = NSURI_THIS(iface); + URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; + WCHAR *ptr_end, *ptr; + char *query; + int len; TRACE("(%p)->(%p)\n", This, aQuery); if(This->nsurl) return nsIURL_GetQuery(This->nsurl, aQuery); - FIXME("default action not implemented\n"); - return NS_ERROR_NOT_IMPLEMENTED; + url.dwExtraInfoLength = 1; + if(!InternetCrackUrlW(This->wine_url, 0, 0, &url)) { + WARN("InternetCrackUrlW failed: 0x%08x\n", GetLastError()); + nsACString_SetData(aQuery, ""); + return NS_OK; + } + + ptr_end = url.lpszExtraInfo+url.dwExtraInfoLength; + for(ptr = url.lpszExtraInfo; ptr < ptr_end; ptr++) { + if(*ptr == '#') + break; + } + + ptr = url.lpszExtraInfo; + len = WideCharToMultiByte(CP_ACP, 0, ptr, ptr_end-ptr, NULL, 0, NULL, NULL); + query = heap_alloc(len+1); + if(!query) + return NS_ERROR_OUT_OF_MEMORY; + WideCharToMultiByte(CP_ACP, 0, ptr, ptr_end-ptr, query, len, NULL, NULL); + query[len] = 0; + nsACString_SetData(aQuery, query); + + TRACE("ret %s\n", debugstr_a(query)); + heap_free(query); + return NS_OK; } static nsresult NSAPI nsURL_SetQuery(nsIURL *iface, const nsACString *aQuery)