Bruno Jesus : ws2_32: Invert SIOCATMARK logic.

Alexandre Julliard julliard at winehq.org
Mon Nov 21 11:10:15 CST 2011


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

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Sat Nov 19 23:20:30 2011 -0200

ws2_32: Invert SIOCATMARK logic.

---

 dlls/ws2_32/socket.c     |    9 ++++++++-
 dlls/ws2_32/tests/sock.c |   12 ++++++------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index e345e87..72e2a5f 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -3133,7 +3133,14 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
            || (!oob && ioctl(fd, SIOCATMARK, &atmark ) == -1))
             status = (errno == EBADF) ? WSAENOTSOCK : wsaErrno();
         else
-            (*(WS_u_long *) out_buff) = oob | atmark;
+        {
+            /* The SIOCATMARK value read from ioctl() is reversed
+             * because BSD returns TRUE if it's in the OOB mark
+             * while Windows returns TRUE if there are NO OOB bytes.
+             */
+            (*(WS_u_long *) out_buff) = oob | !atmark;
+        }
+
         release_sock_fd( s, fd );
         break;
     }
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 7b5dde8..11e7b3c 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -506,7 +506,7 @@ static VOID WINAPI oob_server ( server_params *par )
 
     /* check atmark state */
     ioctlsocket ( mem->sock[0].s, SIOCATMARK, &atmark );
-    todo_wine ok ( atmark == 1, "oob_server (%x): unexpectedly at the OOB mark: %i\n", id, atmark );
+    ok ( atmark == 1, "oob_server (%x): unexpectedly at the OOB mark: %i\n", id, atmark );
 
     /* Receive normal data and check atmark state */
     n_recvd = do_synchronous_recv ( mem->sock[0].s, mem->sock[0].buf, n_expected, par->buflen );
@@ -516,7 +516,7 @@ static VOID WINAPI oob_server ( server_params *par )
     ok ( pos == -1, "simple_server (%x): test pattern error: %d\n", id, pos);
 
     ioctlsocket ( mem->sock[0].s, SIOCATMARK, &atmark );
-    todo_wine ok ( atmark == 1, "oob_server (%x): unexpectedly at the OOB mark: %i\n", id, atmark );
+    ok ( atmark == 1, "oob_server (%x): unexpectedly at the OOB mark: %i\n", id, atmark );
 
     /* Receive a part of the out-of-band data and check atmark state */
     n_recvd = do_synchronous_recv ( mem->sock[0].s, mem->sock[0].buf, 8, par->buflen );
@@ -525,13 +525,13 @@ static VOID WINAPI oob_server ( server_params *par )
     n_expected -= 8;
 
     ioctlsocket ( mem->sock[0].s, SIOCATMARK, &atmark );
-    ok ( atmark == 0, "oob_server (%x): not at the OOB mark: %i\n", id, atmark );
+    todo_wine ok ( atmark == 0, "oob_server (%x): not at the OOB mark: %i\n", id, atmark );
 
     /* Receive the rest of the out-of-band data and check atmark state */
     do_synchronous_recv ( mem->sock[0].s, mem->sock[0].buf, n_expected, par->buflen );
 
     ioctlsocket ( mem->sock[0].s, SIOCATMARK, &atmark );
-    ok ( atmark == 0, "oob_server (%x): not at the OOB mark: %i\n", id, atmark );
+    todo_wine ok ( atmark == 0, "oob_server (%x): not at the OOB mark: %i\n", id, atmark );
 
     /* cleanup */
     wsa_ok ( closesocket ( mem->sock[0].s ),  0 ==, "oob_server (%x): closesocket error: %d\n" );
@@ -2970,7 +2970,7 @@ static void test_ioctlsocket(void)
 
     ret = ioctlsocket(sock, SIOCATMARK, &arg);
     ok(ret != SOCKET_ERROR, "ioctlsocket failed unexpectedly\n");
-    todo_wine ok(arg, "SIOCATMARK expected a non-zero value\n");
+    ok(arg, "SIOCATMARK expected a non-zero value\n");
 
     /* when SO_OOBINLINE is set SIOCATMARK must always return TRUE */
     optval = 1;
@@ -2987,7 +2987,7 @@ static void test_ioctlsocket(void)
     ok(ret != SOCKET_ERROR, "setsockopt failed unexpectedly\n");
     arg = 0;
     ret = ioctlsocket(sock, SIOCATMARK, &arg);
-    todo_wine ok(arg, "SIOCATMARK expected a non-zero value\n");
+    ok(arg, "SIOCATMARK expected a non-zero value\n");
 
     ret = WSAIoctl(sock, SIO_KEEPALIVE_VALS, &arg, 0, NULL, 0, &arg, NULL, NULL);
     ok(ret == SOCKET_ERROR, "WSAIoctl succeeded unexpectedly\n");




More information about the wine-cvs mailing list