Jacek Caban : wininet: Added correct InternetQueryOption( INTERNET_OPTION_DATAFILE_NAME) implementation.

Alexandre Julliard julliard at winehq.org
Fri Feb 15 05:35:56 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 13 13:33:24 2008 +0100

wininet: Added correct InternetQueryOption(INTERNET_OPTION_DATAFILE_NAME) implementation.

---

 dlls/wininet/internet.c |   49 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 7f422da..c5b6a9f 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -2049,8 +2049,9 @@ static BOOL INET_QueryOptionHelper(BOOL bIsUnicode, HINTERNET hInternet, DWORD d
         }
 
         case INTERNET_OPTION_URL:
-        case INTERNET_OPTION_DATAFILE_NAME:
         {
+            TRACE("INTERNET_OPTION_URL\n");
+
             if (!lpwhh)
             {
                 WARN("Invalid hInternet handle\n");
@@ -2094,6 +2095,52 @@ static BOOL INET_QueryOptionHelper(BOOL bIsUnicode, HINTERNET hInternet, DWORD d
             }
             break;
         }
+
+        case INTERNET_OPTION_DATAFILE_NAME:
+        {
+            TRACE("INTERNET_OPTION_DATAFILE_NAME\n");
+            if (!lpwhh)
+            {
+                WARN("Invalid hInternet handle\n");
+                INTERNET_SetLastError(ERROR_INVALID_HANDLE);
+                return FALSE;
+            }
+            if (lpwhh->htype == WH_HHTTPREQ)
+            {
+                LPWININETHTTPREQW lpreq = (LPWININETHTTPREQW) lpwhh;
+                DWORD size;
+
+                if(!lpreq->lpszCacheFile) {
+                    *lpdwBufferLength = 0;
+                    INTERNET_SetLastError(ERROR_INTERNET_ITEM_NOT_FOUND);
+                }
+                else if(bIsUnicode)
+                {
+                    size = (lstrlenW(lpreq->lpszCacheFile)+1) * sizeof(WCHAR);
+                    if (*lpdwBufferLength < size)
+                        INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER);
+                    else
+                    {
+                        memcpy(lpBuffer, lpreq->lpszCacheFile, size);
+                        bSuccess = TRUE;
+                    }
+                    *lpdwBufferLength = size;
+                }
+                else
+                {
+                    size = WideCharToMultiByte(CP_ACP, 0, lpreq->lpszCacheFile, -1, NULL, 0, NULL, NULL);
+                    if (size > *lpdwBufferLength) {
+                        INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER);
+                    }else {
+                        *lpdwBufferLength = WideCharToMultiByte(CP_ACP, 0, lpreq->lpszCacheFile,
+                                -1, lpBuffer, *lpdwBufferLength, NULL, NULL);
+                        bSuccess = TRUE;
+                    }
+                }
+            }
+            break;
+        }
+
         case INTERNET_OPTION_HTTP_VERSION:
         {
             if (*lpdwBufferLength < sizeof(HTTP_VERSION_INFO))




More information about the wine-cvs mailing list