Hans Leidekker : wininet: Option INTERNET_OPTION_CALLBACK is not settable.

Alexandre Julliard julliard at winehq.org
Tue Oct 7 08:53:44 CDT 2008


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Oct  6 15:48:04 2008 +0200

wininet: Option INTERNET_OPTION_CALLBACK is not settable.

---

 dlls/wininet/internet.c   |   22 +++++++++++++++-------
 dlls/wininet/tests/http.c |   13 ++++++++++++-
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 4b33ca6..b027c1a 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -2259,9 +2259,14 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption,
     {
     case INTERNET_OPTION_CALLBACK:
       {
-        INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer;
-        ret = (set_status_callback(lpwhh, callback, TRUE) != INTERNET_INVALID_STATUS_CALLBACK);
-        break;
+        if (!lpwhh)
+        {
+            INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
+            return FALSE;
+        }
+        WININET_Release(lpwhh);
+        INTERNET_SetLastError(ERROR_INTERNET_OPTION_NOT_SETTABLE);
+        return FALSE;
       }
     case INTERNET_OPTION_HTTP_VERSION:
       {
@@ -2384,12 +2389,15 @@ BOOL WINAPI InternetSetOptionA(HINTERNET hInternet, DWORD dwOption,
     case INTERNET_OPTION_CALLBACK:
         {
         LPWININETHANDLEHEADER lpwh;
-        INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer;
 
-        if (!(lpwh = WININET_GetObject(hInternet))) return FALSE;
-        r = (set_status_callback(lpwh, callback, FALSE) != INTERNET_INVALID_STATUS_CALLBACK);
+        if (!(lpwh = WININET_GetObject(hInternet)))
+        {
+            INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
+            return FALSE;
+        }
         WININET_Release(lpwh);
-        return r;
+        INTERNET_SetLastError(ERROR_INTERNET_OPTION_NOT_SETTABLE);
+        return FALSE;
         }
     case INTERNET_OPTION_PROXY:
         {
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index b6677b6..c9d1d6f 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -1984,7 +1984,7 @@ static void test_open_url_async(void)
 {
     BOOL ret;
     HINTERNET ses, req;
-    DWORD size;
+    DWORD size, error;
     struct context ctx;
     ULONG type;
 
@@ -1994,6 +1994,17 @@ static void test_open_url_async(void)
     ses = InternetOpen("AdvancedInstaller", 0, NULL, NULL, INTERNET_FLAG_ASYNC);
     ok(ses != NULL, "InternetOpen failed\n");
 
+    SetLastError(0xdeadbeef);
+    ret = InternetSetOptionA(NULL, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR));
+    error = GetLastError();
+    ok(!ret, "InternetSetOptionA succeeded\n");
+    ok(error == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "got %u expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE\n", error);
+
+    ret = InternetSetOptionA(ses, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR));
+    error = GetLastError();
+    ok(!ret, "InternetSetOptionA failed\n");
+    ok(error == ERROR_INTERNET_OPTION_NOT_SETTABLE, "got %u expected ERROR_INTERNET_OPTION_NOT_SETTABLE\n", error);
+
     pInternetSetStatusCallbackA(ses, cb);
     ResetEvent(ctx.event);
 




More information about the wine-cvs mailing list