[ros-diffs] [dchapyshev] 42102: - Implement WSAHtons, WSANtohs - Add some cases to MsafdReturnWithErrno, SockAsyncSelectCompletionRoutine Opera loads pages now, but the keyboard does not work. Patch by Mikhail Denisenko (denisenkom at gmail.com) See issue #4151 for more details.

dchapyshev at svn.reactos.org dchapyshev at svn.reactos.org
Mon Jul 20 20:30:30 CEST 2009


Author: dchapyshev
Date: Mon Jul 20 20:30:30 2009
New Revision: 42102

URL: http://svn.reactos.org/svn/reactos?rev=42102&view=rev
Log:
- Implement WSAHtons, WSANtohs
- Add some cases to MsafdReturnWithErrno, SockAsyncSelectCompletionRoutine
Opera loads pages now, but the keyboard does not work.
Patch by Mikhail Denisenko (denisenkom at gmail.com)
See issue #4151 for more details.

Modified:
    trunk/reactos/dll/win32/msafd/misc/dllmain.c
    trunk/reactos/dll/win32/ws2_32/misc/stubs.c

Modified: trunk/reactos/dll/win32/msafd/misc/dllmain.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msafd/misc/dllmain.c?rev=42102&r1=42101&r2=42102&view=diff
==============================================================================
--- trunk/reactos/dll/win32/msafd/misc/dllmain.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msafd/misc/dllmain.c [iso-8859-1] Mon Jul 20 20:30:30 2009
@@ -340,6 +340,10 @@
         case STATUS_INVALID_CONNECTION:
             DbgPrint("MSAFD: STATUS_INVALID_CONNECTION\n");
             *Errno = WSAEAFNOSUPPORT;
+            break;
+        case STATUS_INVALID_ADDRESS:
+            DbgPrint("MSAFD: STATUS_INVALID_ADDRESS\n");
+            *Errno = WSAEADDRNOTAVAIL;
             break;
         case STATUS_REMOTE_NOT_LISTENING:
             DbgPrint("MSAFD: STATUS_REMOTE_NOT_LISTENING\n");
@@ -2289,6 +2293,7 @@
 
                 /* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */
             case AFD_EVENT_CONNECT:
+            case AFD_EVENT_CONNECT_FAIL:
                 if (0 != (Socket->SharedData.AsyncEvents & FD_CONNECT) &&
                     0 == (Socket->SharedData.AsyncDisabledEvents & FD_CONNECT))
                 {

Modified: trunk/reactos/dll/win32/ws2_32/misc/stubs.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/ws2_32/misc/stubs.c?rev=42102&r1=42101&r2=42102&view=diff
==============================================================================
--- trunk/reactos/dll/win32/ws2_32/misc/stubs.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/ws2_32/misc/stubs.c [iso-8859-1] Mon Jul 20 20:30:30 2009
@@ -510,10 +510,33 @@
          IN  USHORT hostshort,
          OUT USHORT FAR* lpnetshort)
 {
-    UNIMPLEMENTED
-
-    WSASetLastError(WSASYSCALLFAILURE);
-    return SOCKET_ERROR;
+    if (!WSAINITIALIZED)
+    {
+        WSASetLastError(WSANOTINITIALISED);
+        return SOCKET_ERROR;
+    }
+
+    PCATALOG_ENTRY provider;
+    if (!ReferenceProviderByHandle((HANDLE)s, &provider))
+    {
+        WSASetLastError(WSAENOTSOCK);
+        return SOCKET_ERROR;
+    }
+
+    switch (provider->ProtocolInfo.iNetworkByteOrder)
+    {
+    case BIGENDIAN:
+        *lpnetshort = htons(hostshort);
+        break;
+    case LITTLEENDIAN:
+#ifdef LE
+        *lpnetshort = hostshort;
+#else
+        *lpnetshort = (((hostshort & 0xFF00) >> 8) | ((hostshort & 0x00FF) << 8));
+#endif
+        break;
+    }
+    return 0;
 }
 
 
@@ -576,10 +599,33 @@
          IN  USHORT netshort,
          OUT USHORT FAR* lphostshort)
 {
-    UNIMPLEMENTED
-
-    WSASetLastError(WSASYSCALLFAILURE);
-    return SOCKET_ERROR;
+    if (!WSAINITIALIZED)
+    {
+        WSASetLastError(WSANOTINITIALISED);
+        return SOCKET_ERROR;
+    }
+
+    PCATALOG_ENTRY provider;
+    if (!ReferenceProviderByHandle((HANDLE)s, &provider))
+    {
+        WSASetLastError(WSAENOTSOCK);
+        return SOCKET_ERROR;
+    }
+
+    switch (provider->ProtocolInfo.iNetworkByteOrder)
+    {
+    case BIGENDIAN:
+        *lphostshort = ntohs(netshort);
+        break;
+    case LITTLEENDIAN:
+#ifdef LE
+        *lphostshort = netshort;
+#else
+        *lphostshort = (((netshort & 0xFF00) >> 8) | ((netshort & 0x00FF) << 8));
+#endif
+        break;
+    }
+    return 0;
 }
 
 



More information about the Ros-diffs mailing list