From ab2b4e0924fe355e836089d11634a7f32120376b Mon Sep 17 00:00:00 2001 From: Casper Hornstrup Date: Sun, 17 Sep 2000 09:36:01 +0000 Subject: [PATCH] Added WinSock 2 DLL Stubs svn path=/trunk/; revision=1362 --- reactos/lib/ws2_32/.cvsignore | 6 + reactos/lib/ws2_32/include/catalog.h | 48 ++ reactos/lib/ws2_32/include/debug.h | 70 +++ reactos/lib/ws2_32/include/upcall.h | 114 ++++ reactos/lib/ws2_32/include/ws2_32.h | 40 ++ reactos/lib/ws2_32/makefile | 98 ++++ reactos/lib/ws2_32/misc/catalog.c | 193 +++++++ reactos/lib/ws2_32/misc/dllmain.c | 272 ++++++++++ reactos/lib/ws2_32/misc/event.c | 69 +++ reactos/lib/ws2_32/misc/ns.c | 504 +++++++++++++++++ reactos/lib/ws2_32/misc/stubs.c | 780 +++++++++++++++++++++++++++ reactos/lib/ws2_32/misc/upcall.c | 202 +++++++ reactos/lib/ws2_32/ws2_32.def | 116 ++++ reactos/lib/ws2_32/ws2_32.edf | 116 ++++ reactos/lib/ws2_32/ws2_32.rc | 39 ++ reactos/lib/ws2_32/ws2_32_specs | 78 +++ 16 files changed, 2745 insertions(+) create mode 100644 reactos/lib/ws2_32/.cvsignore create mode 100644 reactos/lib/ws2_32/include/catalog.h create mode 100644 reactos/lib/ws2_32/include/debug.h create mode 100644 reactos/lib/ws2_32/include/upcall.h create mode 100644 reactos/lib/ws2_32/include/ws2_32.h create mode 100644 reactos/lib/ws2_32/makefile create mode 100644 reactos/lib/ws2_32/misc/catalog.c create mode 100644 reactos/lib/ws2_32/misc/dllmain.c create mode 100644 reactos/lib/ws2_32/misc/event.c create mode 100644 reactos/lib/ws2_32/misc/ns.c create mode 100644 reactos/lib/ws2_32/misc/stubs.c create mode 100644 reactos/lib/ws2_32/misc/upcall.c create mode 100644 reactos/lib/ws2_32/ws2_32.def create mode 100644 reactos/lib/ws2_32/ws2_32.edf create mode 100644 reactos/lib/ws2_32/ws2_32.rc create mode 100644 reactos/lib/ws2_32/ws2_32_specs diff --git a/reactos/lib/ws2_32/.cvsignore b/reactos/lib/ws2_32/.cvsignore new file mode 100644 index 00000000000..7779bd976cd --- /dev/null +++ b/reactos/lib/ws2_32/.cvsignore @@ -0,0 +1,6 @@ +ws2_32.a +ws2_32.dll +ws2_32.coff +base.tmp +junk.tmp +temp.exp diff --git a/reactos/lib/ws2_32/include/catalog.h b/reactos/lib/ws2_32/include/catalog.h new file mode 100644 index 00000000000..cada7ba76ff --- /dev/null +++ b/reactos/lib/ws2_32/include/catalog.h @@ -0,0 +1,48 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: include/catalog.h + * PURPOSE: Service Provider Catalog definitions + */ +#ifndef __CATALOG_H +#define __CATALOG_H + +#include +#include + +typedef struct _CATALOG_ENTRY { + LIST_ENTRY ListEntry; + CRITICAL_SECTION Lock; + WCHAR LibraryName[MAX_PATH]; + HMODULE hModule; + PWINSOCK_MAPPING Mapping; + LPWSPSTARTUP WSPStartup; + WSPDATA WSPData; + WSPPROC_TABLE ProcTable; +} CATALOG_ENTRY, *PCATALOG_ENTRY; + +extern LIST_ENTRY Catalog; + +PCATALOG_ENTRY CreateCatalogEntry( + LPWSTR LibraryName); + +INT DestroyCatalogEntry( + PCATALOG_ENTRY Provider); + +PCATALOG_ENTRY LocateProvider( + LPWSAPROTOCOL_INFOW lpProtocolInfo); + +INT LoadProvider( + PCATALOG_ENTRY Provider, + LPWSAPROTOCOL_INFOW lpProtocolInfo); + +INT UnloadProvider( + PCATALOG_ENTRY Provider); + +VOID CreateCatalog(VOID); + +VOID DestroyCatalog(VOID); + +#endif /* __CATALOG_H */ + +/* EOF */ diff --git a/reactos/lib/ws2_32/include/debug.h b/reactos/lib/ws2_32/include/debug.h new file mode 100644 index 00000000000..cb41161ff61 --- /dev/null +++ b/reactos/lib/ws2_32/include/debug.h @@ -0,0 +1,70 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: include/debug.h + * PURPOSE: Debugging support macros + * DEFINES: DBG - Enable debug output + * NASSERT - Disable assertions + */ +#ifndef __DEBUG_H +#define __DEBUG_H + +#define NORMAL_MASK 0x000000FF +#define SPECIAL_MASK 0xFFFFFF00 +#define MIN_TRACE 0x00000001 +#define MID_TRACE 0x00000002 +#define MAX_TRACE 0x00000003 + +#define DEBUG_ULTRA 0xFFFFFFFF + +#ifdef DBG + +extern DWORD DebugTraceLevel; + +#define Get_DbgPrint(quote...) L##quote + +#define WS_DbgPrint(_t_, _x_) \ + if (((DebugTraceLevel & NORMAL_MASK) >= _t_) || \ + ((DebugTraceLevel & _t_) > NORMAL_MASK)) { \ + WCHAR _buffer[256]; \ + swprintf(_buffer, L"(%S:%d)(%S) ", __FILE__, __LINE__, __FUNCTION__); \ + OutputDebugStringW(_buffer); \ + swprintf(_buffer, Get_DbgPrint _x_); \ + OutputDebugStringW(_buffer); \ + } + +#ifdef ASSERT +#undef ASSERT +#endif + +#ifdef NASSERT +#define ASSERT(x) +#else /* NASSERT */ +#define ASSERT(x) if (!(x)) { WS_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); } +#endif /* NASSERT */ + +#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x)) + +#else /* DBG */ + +#define WS_DbgPrint(_t_, _x_) + +#define ASSERT_IRQL(x) +#define ASSERT(x) + +#endif /* DBG */ + + +#define assert(x) ASSERT(x) +#define assert_irql(x) ASSERT_IRQL(x) + + +#define UNIMPLEMENTED \ + WS_DbgPrint(MIN_TRACE, ("is unimplemented, please try again later.\n")); + +#define CHECKPOINT \ + do { WS_DbgPrint(MIN_TRACE, ("\n")); } while(0); + +#endif /* __DEBUG_H */ + +/* EOF */ diff --git a/reactos/lib/ws2_32/include/upcall.h b/reactos/lib/ws2_32/include/upcall.h new file mode 100644 index 00000000000..965db9286af --- /dev/null +++ b/reactos/lib/ws2_32/include/upcall.h @@ -0,0 +1,114 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: include/upcall.h + * PURPOSE: Upcall function defintions + */ +#ifndef __UPCALL_H +#define __UPCALL_H + +#include + +BOOL +WSPAPI +WPUCloseEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno); + +INT +WSPAPI +WPUCloseSocketHandle( + IN SOCKET s, + OUT LPINT lpErrno); + +INT +WSPAPI +WPUCloseThread( + IN LPWSATHREADID lpThreadId, + OUT LPINT lpErrno); + +WSAEVENT +WSPAPI +WPUCreateEvent( + OUT LPINT lpErrno); + +SOCKET +WSPAPI +WPUCreateSocketHandle( + IN DWORD dwCatalogEntryId, + IN DWORD dwContext, + OUT LPINT lpErrno); + +SOCKET +WSPAPI +WPUFDIsSet( + IN SOCKET s, + IN LPFD_SET set); + +INT +WSPAPI +WPUGetProviderPath( + IN LPGUID lpProviderId, + OUT LPWSTR lpszProviderDllPath, + IN OUT LPINT lpProviderDllPathLen, + OUT LPINT lpErrno); + +SOCKET +WSPAPI +WPUModifyIFSHandle( + IN DWORD dwCatalogEntryId, + IN SOCKET ProposedHandle, + OUT LPINT lpErrno); + +INT +WSPAPI +WPUOpenCurrentThread( + OUT LPWSATHREADID lpThreadId, + OUT LPINT lpErrno); + +BOOL +WSPAPI +WPUPostMessage( + IN HWND hWnd, + IN UINT Msg, + IN WPARAM wParam, + IN LPARAM lParam); + +INT +WSPAPI +WPUQueryBlockingCallback( + IN DWORD dwCatalogEntryId, + OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback, + OUT LPDWORD lpdwContext, + OUT LPINT lpErrno); + +INT +WSPAPI +WPUQuerySocketHandleContext( + IN SOCKET s, + OUT LPDWORD lpContext, + OUT LPINT lpErrno); + +INT +WSPAPI +WPUQueueApc( + IN LPWSATHREADID lpThreadId, + IN LPWSAUSERAPC lpfnUserApc, + IN DWORD dwContext, + OUT LPINT lpErrno); + +BOOL +WSPAPI +WPUResetEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno); + +BOOL +WSPAPI +WPUSetEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno); + +#endif /* __UPCALL_H */ + +/* EOF */ diff --git a/reactos/lib/ws2_32/include/ws2_32.h b/reactos/lib/ws2_32/include/ws2_32.h new file mode 100644 index 00000000000..91323ebd21a --- /dev/null +++ b/reactos/lib/ws2_32/include/ws2_32.h @@ -0,0 +1,40 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: include/ws2_32.h + * PURPOSE: WinSock 2 DLL header + */ +#ifndef __WS2_32_H +#define __WS2_32_H + +#include +#include +#include +#include +#include + +/* Exported by ntdll.dll, but where is the prototype? */ +unsigned long strtoul(const char *nptr, char **endptr, int base); + + +#define EXPORT STDCALL + +extern HANDLE GlobalHeap; +extern WSPUPCALLTABLE UpcallTable; + + +typedef struct _WINSOCK_THREAD_BLOCK { + INT LastErrorValue; /* Error value from last function that failed */ + BOOL Initialized; /* TRUE if WSAStartup() has been successfully called */ +} WINSOCK_THREAD_BLOCK, *PWINSOCK_THREAD_BLOCK; + + +/* Macros */ + +#define WSAINITIALIZED (((PWINSOCK_THREAD_BLOCK)NtCurrentTeb()->WinSockData)->Initialized) + +#define WSASETINITIALIZED (((PWINSOCK_THREAD_BLOCK)NtCurrentTeb()->WinSockData)->Initialized = TRUE) + +#endif /* __WS2_32_H */ + +/* EOF */ diff --git a/reactos/lib/ws2_32/makefile b/reactos/lib/ws2_32/makefile new file mode 100644 index 00000000000..fe934e968aa --- /dev/null +++ b/reactos/lib/ws2_32/makefile @@ -0,0 +1,98 @@ +# Makefile for ReactOS WinSock 2 DLL + +PATH_TO_TOP = ../.. + +BASE_CFLAGS = -Iinclude -I../../include -DUNICODE + +TARGETNAME=ws2_32 + +MISC_OBJECTS = misc/dllmain.o misc/catalog.o misc/event.o misc/ns.o \ + misc/stubs.o misc/upcall.o + +RESOURCE_OBJECT = $(TARGETNAME).coff + +OBJECTS = $(MISC_OBJECTS) $(RESOURCE_OBJECT) + +LIBS = ../ntdll/ntdll.a \ + ../kernel32/kernel32.a \ + ../advapi32/advapi32.a + +ifeq ($(DOSCLI),yes) +CLEAN_FILES = misc\*.o \ + $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \ + $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff +else +CLEAN_FILES = misc/*.o \ + $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \ + $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff +endif + +all: $(TARGETNAME).dll + +$(TARGETNAME).coff: $(TARGETNAME).rc ../../include/reactos/resource.h + +$(TARGETNAME).a: $(OBJECTS) + $(LD) -r $(OBJECTS) -o $(TARGETNAME).a + +$(TARGETNAME).dll: $(LIBS) $(OBJECTS) $(TARGETNAME).def + $(LD) -r $(OBJECTS) -o $(TARGETNAME).o + $(DLLTOOL) \ + --dllname $(TARGETNAME).dll \ + --def $(TARGETNAME).def \ + --kill-at \ + --output-lib $(TARGETNAME).a + $(CC) \ + $(TARGETNAME).o \ + $(LIBS) \ + -specs=$(TARGETNAME)_specs \ + -mdll \ + -o junk.tmp \ + -Wl,--base-file,base.tmp + - $(RM) junk.tmp + $(DLLTOOL) \ + --dllname $(TARGETNAME).dll \ + --base-file base.tmp \ + --output-exp temp.exp \ + --def $(TARGETNAME).edf + - $(RM) base.tmp + $(CC) \ + $(TARGETNAME).o \ + $(LIBS) \ + -specs=$(TARGETNAME)_specs \ + -mdll \ + -o $(TARGETNAME).dll \ + -Wl,--image-base,0x10000 \ + -Wl,--file-alignment,0x1000 \ + -Wl,--section-alignment,0x1000 \ + -Wl,temp.exp + - $(RM) temp.exp + $(NM) --numeric-sort $(TARGETNAME).dll > $(TARGETNAME).sym + + +clean: $(CLEAN_FILES:%=%_clean) + +$(CLEAN_FILES:%=%_clean): %_clean: + - $(RM) $* + +.PHONY: clean $(CLEAN_FILES:%=%_clean) + +install: $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll + +$(FLOPPY_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll +ifeq ($(DOSCLI),yes) + $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)\dlls\$(TARGETNAME).dll +else + $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll +endif + +dist: $(DIST_DIR)/dlls/$(TARGETNAME).dll + +$(DIST_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll +ifeq ($(DOSCLI),yes) + $(CP) $(TARGETNAME).dll ..\..\$(DIST_DIR)\dlls\$(TARGETNAME).dll +else + $(CP) $(TARGETNAME).dll ../../$(DIST_DIR)/dlls/$(TARGETNAME).dll +endif + +include ../../rules.mak + diff --git a/reactos/lib/ws2_32/misc/catalog.c b/reactos/lib/ws2_32/misc/catalog.c new file mode 100644 index 00000000000..16e9b645210 --- /dev/null +++ b/reactos/lib/ws2_32/misc/catalog.c @@ -0,0 +1,193 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/catalog.c + * PURPOSE: Service Provider Catalog + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include +#include + + +LIST_ENTRY CatalogListHead; +CRITICAL_SECTION CatalogLock; + +PCATALOG_ENTRY CreateCatalogEntry( + LPWSTR LibraryName) +{ + PCATALOG_ENTRY Provider; + + Provider = HeapAlloc(GlobalHeap, 0, sizeof(CATALOG_ENTRY)); + if (!Provider) + return NULL; + + InitializeCriticalSection(&Provider->Lock); + Provider->hModule = (HMODULE)INVALID_HANDLE_VALUE; + lstrcpyW(Provider->LibraryName, LibraryName); + Provider->Mapping = NULL; + + EnterCriticalSection(&CatalogLock); + InsertTailList(&CatalogListHead, &Provider->ListEntry); + LeaveCriticalSection(&CatalogLock); + + return Provider; +} + + +INT DestroyCatalogEntry( + PCATALOG_ENTRY Provider) +{ + INT Status; + + EnterCriticalSection(&CatalogLock); + RemoveEntryList(&Provider->ListEntry); + LeaveCriticalSection(&CatalogLock); + + HeapFree(GlobalHeap, 0, Provider->Mapping); + + if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) { + Status = UnloadProvider(Provider); + } else { + Status = NO_ERROR; + } + + DeleteCriticalSection(&Provider->Lock); + + HeapFree(GlobalHeap, 0, Provider); + + return Status; +} + + +PCATALOG_ENTRY LocateProvider( + LPWSAPROTOCOL_INFOW lpProtocolInfo) +{ + PLIST_ENTRY CurrentEntry; + PCATALOG_ENTRY Provider; + UINT i; + + EnterCriticalSection(&CatalogLock); + CurrentEntry = CatalogListHead.Flink; + while (CurrentEntry != &CatalogListHead) { + Provider = CONTAINING_RECORD(CurrentEntry, + CATALOG_ENTRY, + ListEntry); + + for (i = 0; i < Provider->Mapping->Rows; i++) { + if ((lpProtocolInfo->iAddressFamily == Provider->Mapping->Mapping[i].AddressFamily) && + (lpProtocolInfo->iSocketType == Provider->Mapping->Mapping[i].SocketType) && + ((lpProtocolInfo->iProtocol == Provider->Mapping->Mapping[i].Protocol) || + (lpProtocolInfo->iSocketType == SOCK_RAW))) { + LeaveCriticalSection(&CatalogLock); + return Provider; + } + } + + CurrentEntry = CurrentEntry->Flink; + } + LeaveCriticalSection(&CatalogLock); + + return NULL; +} + + +INT LoadProvider( + PCATALOG_ENTRY Provider, + LPWSAPROTOCOL_INFOW lpProtocolInfo) +{ + INT Status = NO_ERROR; + + WS_DbgPrint(MIN_TRACE, ("Loading provider...\n")); + + if (Provider->hModule == (HMODULE)INVALID_HANDLE_VALUE) { + /* DLL is not loaded so load it now */ + Provider->hModule = LoadLibrary(Provider->LibraryName); + if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) { + Provider->WSPStartup = (LPWSPSTARTUP)GetProcAddress(Provider->hModule, + "WSPStartup"); + if (Provider->WSPStartup) { + Status = WSPStartup(MAKEWORD(2, 2), + &Provider->WSPData, + lpProtocolInfo, + UpcallTable, + &Provider->ProcTable); + } else + Status = ERROR_BAD_PROVIDER; + } else + Status = ERROR_DLL_NOT_FOUND; + } else + Status = NO_ERROR; + + WS_DbgPrint(MIN_TRACE, ("Status %d\n", Status)); + + return Status; +} + + +INT UnloadProvider( + PCATALOG_ENTRY Provider) +{ + INT Status = NO_ERROR; + + if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) { + Provider->ProcTable.lpWSPCleanup(&Status); + + if (!FreeLibrary(Provider->hModule)) + Status = GetLastError(); + + Provider->hModule = (HMODULE)INVALID_HANDLE_VALUE; + } + + return Status; +} + + +VOID CreateCatalog(VOID) +{ + PCATALOG_ENTRY Provider; + + InitializeCriticalSection(&CatalogLock); + + InitializeListHead(&CatalogListHead); + + /* FIXME: Read service provider catalog from registry */ +#if 1 + Provider = CreateCatalogEntry(L"msafd.dll"); + if (!Provider) + return; + + Provider->Mapping = HeapAlloc(GlobalHeap, 0, sizeof(WINSOCK_MAPPING) + 3 * sizeof(DWORD)); + if (!Provider->Mapping) + return; + + Provider->Mapping->Rows = 1; + Provider->Mapping->Columns = 3; + Provider->Mapping->Mapping[0].AddressFamily = AF_INET; + Provider->Mapping->Mapping[0].SocketType = SOCK_RAW; + Provider->Mapping->Mapping[0].Protocol = 0; +#endif +} + + +VOID DestroyCatalog(VOID) +{ + PLIST_ENTRY CurrentEntry; + PCATALOG_ENTRY Provider; + + CurrentEntry = CatalogListHead.Flink; + while (CurrentEntry != &CatalogListHead) { + Provider = CONTAINING_RECORD(CurrentEntry, + CATALOG_ENTRY, + ListEntry); + + DestroyCatalogEntry(Provider); + + CurrentEntry = CurrentEntry->Flink; + } + + DeleteCriticalSection(&CatalogLock); +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/misc/dllmain.c b/reactos/lib/ws2_32/misc/dllmain.c new file mode 100644 index 00000000000..4f05cb9dd4d --- /dev/null +++ b/reactos/lib/ws2_32/misc/dllmain.c @@ -0,0 +1,272 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/dllmain.c + * PURPOSE: DLL entry point + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include +#include +#include + +#ifdef DBG + +/* See debug.h for debug/trace constants */ +DWORD DebugTraceLevel = MIN_TRACE; + +#endif /* DBG */ + +/* To make the linker happy */ +VOID STDCALL KeBugCheck (ULONG BugCheckCode) {} + + +HANDLE GlobalHeap; +WSPUPCALLTABLE UpcallTable; + + +INT +EXPORT +WSAGetLastError(VOID) +{ + PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData; + + if (p) { + return p->LastErrorValue; + } else { + /* FIXME: What error code should we use here? Can this even happen? */ + return ERROR_BAD_ENVIRONMENT; + } +} + + +VOID +EXPORT +WSASetLastError( + IN INT iError) +{ + PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData; + + if (p) + p->LastErrorValue = iError; +} + + +INT +EXPORT +WSAStartup( + IN WORD wVersionRequested, + OUT LPWSADATA lpWSAData) +{ + WS_DbgPrint(MIN_TRACE, ("WSAStartup of ws2_32.dll\n")); + + lpWSAData->wVersion = wVersionRequested; + lpWSAData->wHighVersion = 2; + lstrcpyA(lpWSAData->szDescription, "WinSock 2.0"); + lstrcpyA(lpWSAData->szSystemStatus, "Running"); + lpWSAData->iMaxSockets = 0; + lpWSAData->iMaxUdpDg = 0; + lpWSAData->lpVendorInfo = NULL; + + WSASETINITIALIZED; + + return NO_ERROR; +} + + +INT +EXPORT +WSACleanup(VOID) +{ + WS_DbgPrint(MIN_TRACE, ("WSACleanup of ws2_32.dll\n")); + + if (!WSAINITIALIZED) { + WSASetLastError(WSANOTINITIALISED); + return WSANOTINITIALISED; + } + + return NO_ERROR; +} + + +SOCKET +EXPORT +WSASocketA( + IN INT af, + IN INT type, + IN INT protocol, + IN LPWSAPROTOCOL_INFOA lpProtocolInfo, + IN GROUP g, + IN DWORD dwFlags) +/* + * FUNCTION: Creates a new socket + */ +{ + WSAPROTOCOL_INFOW ProtocolInfoW; + LPWSAPROTOCOL_INFOW p; + UNICODE_STRING StringU; + ANSI_STRING StringA; + + if (lpProtocolInfo) { + memcpy(&ProtocolInfoW, + lpProtocolInfo, + sizeof(WSAPROTOCOL_INFOA) - + sizeof(CHAR) * (WSAPROTOCOL_LEN + 1)); + + RtlInitAnsiString(&StringA, (LPSTR)lpProtocolInfo->szProtocol); + RtlInitUnicodeString(&StringU, (LPWSTR)&ProtocolInfoW.szProtocol); + RtlAnsiStringToUnicodeString(&StringU, + &StringA, + FALSE); + p = &ProtocolInfoW; + } else { + p = NULL; + } + + return WSASocketW(af, + type, + protocol, + p, + g, + dwFlags); +} + + +SOCKET +EXPORT +WSASocketW( + IN INT af, + IN INT type, + IN INT protocol, + IN LPWSAPROTOCOL_INFOW lpProtocolInfo, + IN GROUP g, + IN DWORD dwFlags) +/* + * FUNCTION: Creates a new socket + * ARGUMENTS: + * af = Address family + * type = Socket type + * protocol = Protocol type + * lpProtocolInfo = Pointer to protocol information + * g = Reserved + * dwFlags = Socket flags + * RETURNS: + * Created socket, or INVALID_SOCKET if it could not be created + */ +{ + INT Status; + SOCKET Socket; + PCATALOG_ENTRY Provider; + WSAPROTOCOL_INFOW ProtocolInfo; + + if (!WSAINITIALIZED) { + WSASetLastError(WSANOTINITIALISED); + return INVALID_SOCKET; + } + + if (!lpProtocolInfo) { + lpProtocolInfo = &ProtocolInfo; + ZeroMemory(&ProtocolInfo, sizeof(WSAPROTOCOL_INFOW)); + + ProtocolInfo.iAddressFamily = af; + ProtocolInfo.iSocketType = type; + ProtocolInfo.iProtocol = protocol; + } + + Provider = LocateProvider(lpProtocolInfo); + if (!Provider) { + WSASetLastError(WSAEAFNOSUPPORT); + return INVALID_SOCKET; + } + + Status = LoadProvider(Provider, lpProtocolInfo); + + if (Status != NO_ERROR) { + WSASetLastError(Status); + return INVALID_SOCKET; + } + + Socket = Provider->ProcTable.lpWSPSocket(af, + type, + protocol, + lpProtocolInfo, + g, + dwFlags, + &Status); + if (Status != NO_ERROR) { + WSASetLastError(Status); + return INVALID_SOCKET; + } + + return Socket; +} + + +BOOL +STDCALL +DllMain(PVOID hInstDll, + ULONG dwReason, + PVOID Reserved) +{ + WS_DbgPrint(MIN_TRACE, ("DllMain of ws2_32.dll\n")); + +#if 0 + switch (dwReason) { + case DLL_PROCESS_ATTACH: + GlobalHeap = HeapCreate(0, 0, 0); + if (!GlobalHeap) + return FALSE; + + if (ReadCatalog() != NO_ERROR) + return FALSE; + + UpcallTable.lpWPUCloseEvent = WPUCloseEvent; + UpcallTable.lpWPUCloseSocketHandle = WPUCloseSocketHandle; + UpcallTable.lpWPUCreateEvent = WPUCreateEvent; + UpcallTable.lpWPUCreateSocketHandle = WPUCreateSocketHandle; + UpcallTable.lpWPUFDIsSet = WPUFDIsSet; + UpcallTable.lpWPUGetProviderPath = WPUGetProviderPath; + UpcallTable.lpWPUModifyIFSHandle = WPUModifyIFSHandle; + UpcallTable.lpWPUPostMessage = WPUPostMessage; + UpcallTable.lpWPUQueryBlockingCallback = WPUQueryBlockingCallback; + UpcallTable.lpWPUQuerySocketHandleContext = WPUQuerySocketHandleContext; + UpcallTable.lpWPUQueueApc = WPUQueueApc; + UpcallTable.lpWPUResetEvent = WPUResetEvent; + UpcallTable.lpWPUSetEvent = WPUSetEvent; + UpcallTable.lpWPUOpenCurrentThread = WPUOpenCurrentThread; + UpcallTable.lpWPUCloseThread = WPUCloseThread; + break; + + case DLL_THREAD_ATTACH: { + PWINSOCK_THREAD_BLOCK p; + + p = HeapAlloc(GlobalHeap, 0, sizeof(WINSOCK_THREAD_BLOCK)); + if (p) { + p->LastErrorValue = NO_ERROR; + p->Initialized = FALSE; + NtCurrentTeb()->WinSockData = p; + } + + break; + } + + case DLL_THREAD_DETACH: { + PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData; + + if (p) + HeapFree(GlobalHeap, 0, p); + + break; + } + + case DLL_PROCESS_DETACH: + DestroyCatalog(); + HeapDestroy(GlobalHeap); + break; + } +#endif + return TRUE; +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/misc/event.c b/reactos/lib/ws2_32/misc/event.c new file mode 100644 index 00000000000..77d0de8eb3b --- /dev/null +++ b/reactos/lib/ws2_32/misc/event.c @@ -0,0 +1,69 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/event.c + * PURPOSE: Event handling + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include + +BOOL +EXPORT +WSACloseEvent( + IN WSAEVENT hEvent) +{ + UNIMPLEMENTED + + return FALSE; +} + + +WSAEVENT +EXPORT +WSACreateEvent(VOID) +{ + UNIMPLEMENTED + + return (WSAEVENT)0; +} + + +BOOL +EXPORT +WSAResetEvent( + IN WSAEVENT hEvent) +{ + UNIMPLEMENTED + + return FALSE; +} + + +BOOL +EXPORT +WSASetEvent( + IN WSAEVENT hEvent) +{ + UNIMPLEMENTED + + return FALSE; +} + + +DWORD +EXPORT +WSAWaitForMultipleEvents( + IN DWORD cEvents, + IN CONST WSAEVENT FAR* lphEvents, + IN BOOL fWaitAll, + IN DWORD dwTimeout, + IN BOOL fAlertable) +{ + UNIMPLEMENTED + + return 0; +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/misc/ns.c b/reactos/lib/ws2_32/misc/ns.c new file mode 100644 index 00000000000..8a6d7bb70e6 --- /dev/null +++ b/reactos/lib/ws2_32/misc/ns.c @@ -0,0 +1,504 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/ns.c + * PURPOSE: Namespace APIs + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include + +/* Name resolution APIs */ + +INT +EXPORT +WSAAddressToStringA( + IN LPSOCKADDR lpsaAddress, + IN DWORD dwAddressLength, + IN LPWSAPROTOCOL_INFOA lpProtocolInfo, + OUT LPSTR lpszAddressString, + IN OUT LPDWORD lpdwAddressStringLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAAddressToStringW( + IN LPSOCKADDR lpsaAddress, + IN DWORD dwAddressLength, + IN LPWSAPROTOCOL_INFOW lpProtocolInfo, + OUT LPWSTR lpszAddressString, + IN OUT LPDWORD lpdwAddressStringLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAEnumNameSpaceProvidersA( + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSANAMESPACE_INFOA lpnspBuffer) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAEnumNameSpaceProvidersW( + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSANAMESPACE_INFOW lpnspBuffer) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAGetServiceClassInfoA( + IN LPGUID lpProviderId, + IN LPGUID lpServiceClassId, + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSASERVICECLASSINFOA lpServiceClassInfo) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAGetServiceClassInfoW( + IN LPGUID lpProviderId, + IN LPGUID lpServiceClassId, + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSASERVICECLASSINFOW lpServiceClassInfo) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAGetServiceClassNameByClassIdA( + IN LPGUID lpServiceClassId, + OUT LPSTR lpszServiceClassName, + IN OUT LPDWORD lpdwBufferLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAGetServiceClassNameByClassIdW( + IN LPGUID lpServiceClassId, + OUT LPWSTR lpszServiceClassName, + IN OUT LPDWORD lpdwBufferLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAInstallServiceClassA( + IN LPWSASERVICECLASSINFOA lpServiceClassInfo) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAInstallServiceClassW( + IN LPWSASERVICECLASSINFOW lpServiceClassInfo) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSALookupServiceBeginA( + IN LPWSAQUERYSETA lpqsRestrictions, + IN DWORD dwControlFlags, + OUT LPHANDLE lphLookup) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSALookupServiceBeginW( + IN LPWSAQUERYSETW lpqsRestrictions, + IN DWORD dwControlFlags, + OUT LPHANDLE lphLookup) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSALookupServiceEnd( + IN HANDLE hLookup) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSALookupServiceNextA( + IN HANDLE hLookup, + IN DWORD dwControlFlags, + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSAQUERYSETA lpqsResults) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSALookupServiceNextW( + IN HANDLE hLookup, + IN DWORD dwControlFlags, + IN OUT LPDWORD lpdwBufferLength, + OUT LPWSAQUERYSETW lpqsResults) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSARemoveServiceClass( + IN LPGUID lpServiceClassId) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSASetServiceA( + IN LPWSAQUERYSETA lpqsRegInfo, + IN WSAESETSERVICEOP essOperation, + IN DWORD dwControlFlags) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSASetServiceW( + IN LPWSAQUERYSETW lpqsRegInfo, + IN WSAESETSERVICEOP essOperation, + IN DWORD dwControlFlags) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAStringToAddressA( + IN LPSTR AddressString, + IN INT AddressFamily, + IN LPWSAPROTOCOL_INFOA lpProtocolInfo, + OUT LPSOCKADDR lpAddress, + IN OUT LPINT lpAddressLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSAStringToAddressW( + IN LPWSTR AddressString, + IN INT AddressFamily, + IN LPWSAPROTOCOL_INFOW lpProtocolInfo, + OUT LPSOCKADDR lpAddress, + IN OUT LPINT lpAddressLength) +{ + UNIMPLEMENTED + + return 0; +} + + +/* WinSock 1.1 compatible name resolution APIs */ + +LPHOSTENT +EXPORT +gethostbyaddr( + IN CONST CHAR FAR* addr, + IN INT len, + IN INT type) +{ + UNIMPLEMENTED + + return (LPHOSTENT)NULL; +} + +LPHOSTENT +EXPORT +gethostbyname( + IN CONST CHAR FAR* name) +{ + UNIMPLEMENTED + + return (LPHOSTENT)NULL; +} + + +INT +EXPORT +gethostname( + OUT CHAR FAR* name, + IN INT namelen) +{ + UNIMPLEMENTED + + return 0; +} + + +LPPROTOENT +EXPORT +getprotobyname( + IN CONST CHAR FAR* name) +{ + UNIMPLEMENTED + + return (LPPROTOENT)NULL; +} + + +LPPROTOENT +EXPORT +getprotobynumber( + IN INT number) +{ + UNIMPLEMENTED + + return (LPPROTOENT)NULL; +} + +LPSERVENT +EXPORT +getservbyname( + IN CONST CHAR FAR* name, + IN CONST CHAR FAR* proto) +{ + UNIMPLEMENTED + + return (LPSERVENT)NULL; +} + + +LPSERVENT +EXPORT +getservbyport( + IN INT port, + IN CONST CHAR FAR* proto) +{ + UNIMPLEMENTED + + return (LPSERVENT)NULL; +} + + +ULONG +EXPORT +inet_addr( + IN CONST CHAR FAR* cp) +/* + * FUNCTION: Converts a string containing an IPv4 address to an unsigned long + * ARGUMENTS: + * cp = Pointer to string with address to convert + * RETURNS: + * Binary representation of IPv4 address, or INADDR_NONE + */ +{ + UINT i; + PCHAR p; + ULONG u = 0; + + /* FIXME: Little endian version only */ + + p = (PCHAR)cp; + + if (strlen(p) == 0) + return INADDR_NONE; + + if (strcmp(p, " ") == 0) + return 0; + + for (i = 3; i >= 0; i--) { + u += (strtoul(p, &p, 0) << (i * 8)); + + if (strlen(p) == 0) + return u; + + if (p[0] != '.') + return INADDR_NONE; + + p++; + } + + return u; +} + + +CHAR FAR* +EXPORT +inet_ntoa( + IN IN_ADDR in) +{ + UNIMPLEMENTED + + return (CHAR FAR*)NULL; +} + + +HANDLE +EXPORT +WSAAsyncGetHostByAddr( + IN HWND hWnd, + IN UINT wMsg, + IN CONST CHAR FAR* addr, + IN INT len, + IN INT type, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + + +HANDLE +EXPORT +WSAAsyncGetHostByName( + IN HWND hWnd, + IN UINT wMsg, + IN CONST CHAR FAR* name, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + + +HANDLE +EXPORT +WSAAsyncGetProtoByName( + IN HWND hWnd, + IN UINT wMsg, + IN CONST CHAR FAR* name, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + + +HANDLE +EXPORT +WSAAsyncGetProtoByNumber( + IN HWND hWnd, + IN UINT wMsg, + IN INT number, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + + +HANDLE +EXPORT +WSAAsyncGetServByName( + IN HWND hWnd, + IN UINT wMsg, + IN CONST CHAR FAR* name, + IN CONST CHAR FAR* proto, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + + +HANDLE +EXPORT +WSAAsyncGetServByPort( + IN HWND hWnd, + IN UINT wMsg, + IN INT port, + IN CONST CHAR FAR* proto, + OUT CHAR FAR* buf, + IN INT buflen) +{ + UNIMPLEMENTED + + return (HANDLE)0; +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/misc/stubs.c b/reactos/lib/ws2_32/misc/stubs.c new file mode 100644 index 00000000000..172e64dfbfc --- /dev/null +++ b/reactos/lib/ws2_32/misc/stubs.c @@ -0,0 +1,780 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/stubs.c + * PURPOSE: Stubs + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include + +SOCKET +EXPORT +accept( + IN SOCKET s, + OUT LPSOCKADDR addr, + OUT INT FAR* addrlen) +{ + UNIMPLEMENTED + + return INVALID_SOCKET; +} + +INT +EXPORT +bind( + IN SOCKET s, + IN CONST LPSOCKADDR name, + IN INT namelen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +closesocket( + IN SOCKET s) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +connect( + IN SOCKET s, + IN CONST LPSOCKADDR name, + IN INT namelen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +getpeername( + IN SOCKET s, + OUT LPSOCKADDR name, + IN OUT INT FAR* namelen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +getsockname( + IN SOCKET s, + OUT LPSOCKADDR name, + IN OUT INT FAR* namelen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +getsockopt( + IN SOCKET s, + IN INT level, + IN INT optname, + OUT CHAR FAR* optval, + IN OUT INT FAR* optlen) +{ + UNIMPLEMENTED + + return 0; +} + +ULONG +EXPORT +htonl( + IN ULONG hostlong) +{ + UNIMPLEMENTED + + return 0; +} + +USHORT +EXPORT +htons( + IN USHORT hostshort) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +ioctlsocket( + IN SOCKET s, + IN LONG cmd, + IN OUT ULONG FAR* argp) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +listen( + IN SOCKET s, + IN INT backlog) +{ + UNIMPLEMENTED + + return 0; +} + +ULONG +EXPORT +ntohl( + IN ULONG netlong) +{ + UNIMPLEMENTED + + return 0; +} + +USHORT +EXPORT +ntohs( + IN USHORT netshort) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +recv( + IN SOCKET s, + OUT CHAR FAR* buf, + IN INT len, + IN INT flags) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +recvfrom( + IN SOCKET s, + OUT CHAR FAR* buf, + IN INT len, + IN INT flags, + OUT LPSOCKADDR from, + IN OUT INT FAR* fromlen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +select( + IN INT nfds, + IN OUT LPFD_SET readfds, + IN OUT LPFD_SET writefds, + IN OUT LPFD_SET exceptfds, + IN CONST LPTIMEVAL timeout) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +send( + IN SOCKET s, + IN CONST CHAR FAR* buf, + IN INT len, + IN INT flags) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +sendto( + IN SOCKET s, + IN CONST CHAR FAR* buf, + IN INT len, + IN INT flags, + IN CONST LPSOCKADDR to, + IN INT tolen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +setsockopt( + IN SOCKET s, + IN INT level, + IN INT optname, + IN CONST CHAR FAR* optval, + IN INT optlen) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +shutdown( + IN SOCKET s, + IN INT how) +{ + UNIMPLEMENTED + + return 0; +} + +SOCKET +EXPORT +socket( + IN INT af, + IN INT type, + IN INT protocol) +{ + UNIMPLEMENTED + + return INVALID_SOCKET; +} + +SOCKET +EXPORT +WSAAccept( + IN SOCKET s, + OUT LPSOCKADDR addr, + IN OUT LPINT addrlen, + IN LPCONDITIONPROC lpfnCondition, + IN DWORD dwCallbackData) +{ + UNIMPLEMENTED + + return INVALID_SOCKET; +} + +INT +EXPORT +WSAAsyncSelect( + IN SOCKET s, + IN HWND hWnd, + IN UINT wMsg, + IN LONG lEvent) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSACancelBlockingCall(VOID) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAConnect( + IN SOCKET s, + IN CONST LPSOCKADDR name, + IN INT namelen, + IN LPWSABUF lpCallerData, + OUT LPWSABUF lpCalleeData, + IN LPQOS lpSQOS, + IN LPQOS lpGQOS) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSADuplicateSocketA( + IN SOCKET s, + IN DWORD dwProcessId, + OUT LPWSAPROTOCOL_INFOA lpProtocolInfo) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSADuplicateSocketW( + IN SOCKET s, + IN DWORD dwProcessId, + OUT LPWSAPROTOCOL_INFOW lpProtocolInfo) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAEnumNetworkEvents( + IN SOCKET s, + IN WSAEVENT hEventObject, + OUT LPWSANETWORKEVENTS lpNetworkEvents) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAEnumProtocolsA( + IN LPINT lpiProtocols, + OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer, + IN OUT LPDWORD lpdwBufferLength) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAEnumProtocolsW( + IN LPINT lpiProtocols, + OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer, + IN OUT LPDWORD lpdwBufferLength) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAEventSelect( + IN SOCKET s, + IN WSAEVENT hEventObject, + IN LONG lNetworkEvents) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +EXPORT +WSAGetOverlappedResult( + IN SOCKET s, + IN LPWSAOVERLAPPED lpOverlapped, + OUT LPDWORD lpcbTransfer, + IN BOOL fWait, + OUT LPDWORD lpdwFlags) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +EXPORT +WSAGetQOSByName( + IN SOCKET s, + IN OUT LPWSABUF lpQOSName, + OUT LPQOS lpQOS) +{ + UNIMPLEMENTED + + return FALSE; +} + +INT +EXPORT +WSAHtonl( + IN SOCKET s, + IN ULONG hostLONG, + OUT ULONG FAR* lpnetlong) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAHtons( + IN SOCKET s, + IN USHORT hostshort, + OUT USHORT FAR* lpnetshort) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAIoctl( + IN SOCKET s, + IN DWORD dwIoControlCode, + IN LPVOID lpvInBuffer, + IN DWORD cbInBuffer, + OUT LPVOID lpvOutBuffer, + IN DWORD cbOutBuffer, + OUT LPDWORD lpcbBytesReturned, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +EXPORT +WSAIsBlocking(VOID) +{ + UNIMPLEMENTED + + return FALSE; +} + +SOCKET +EXPORT +WSAJoinLeaf( + IN SOCKET s, + IN CONST LPSOCKADDR name, + IN INT namelen, + IN LPWSABUF lpCallerData, + OUT LPWSABUF lpCalleeData, + IN LPQOS lpSQOS, + IN LPQOS lpGQOS, + IN DWORD dwFlags) +{ + UNIMPLEMENTED + + return INVALID_SOCKET; +} + +INT +EXPORT +WSANtohl( + IN SOCKET s, + IN ULONG netlong, + OUT ULONG FAR* lphostlong) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSANtohs( + IN SOCKET s, + IN USHORT netshort, + OUT USHORT FAR* lphostshort) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSARecv( + IN SOCKET s, + IN OUT LPWSABUF lpBuffers, + IN DWORD dwBufferCount, + OUT LPDWORD lpNumberOfBytesRecvd, + IN OUT LPDWORD lpFlags, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSARecvDisconnect( + IN SOCKET s, + OUT LPWSABUF lpInboundDisconnectData) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSARecvFrom( + IN SOCKET s, + IN OUT LPWSABUF lpBuffers, + IN DWORD dwBufferCount, + OUT LPDWORD lpNumberOfBytesRecvd, + IN OUT LPDWORD lpFlags, + OUT LPSOCKADDR lpFrom, + IN OUT LPINT lpFromlen, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSASend( + IN SOCKET s, + IN LPWSABUF lpBuffers, + IN DWORD dwBufferCount, + OUT LPDWORD lpNumberOfBytesSent, + IN DWORD dwFlags, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSASendDisconnect( + IN SOCKET s, + IN LPWSABUF lpOutboundDisconnectData) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSASendTo( + IN SOCKET s, + IN LPWSABUF lpBuffers, + IN DWORD dwBufferCount, + OUT LPDWORD lpNumberOfBytesSent, + IN DWORD dwFlags, + IN CONST LPSOCKADDR lpTo, + IN INT iToLen, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +FARPROC +EXPORT +WSASetBlockingHook( + IN FARPROC lpBlockFunc) +{ + UNIMPLEMENTED + + return (FARPROC)0; +} + +INT +EXPORT +WSAUnhookBlockingHook(VOID) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSAProviderConfigChange( + IN OUT LPHANDLE lpNotificationHandle, + IN LPWSAOVERLAPPED lpOverlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSACancelAsyncRequest( + IN HANDLE hAsyncTaskHandle) +{ + UNIMPLEMENTED + + return 0; +} + +INT +#if 0 +PASCAL FAR +#else +EXPORT +#endif +__WSAFDIsSet(SOCKET s, LPFD_SET set) +{ + UNIMPLEMENTED + + return 0; +} + + +/* WinSock Service Provider support functions */ + +INT +EXPORT +WPUCompleteOverlappedRequest( + IN SOCKET s, + IN LPWSAOVERLAPPED lpOverlapped, + IN DWORD dwError, + IN DWORD cbTransferred, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSPStartup( + IN WORD wVersionRequested, + OUT LPWSPDATA lpWSPData, + IN LPWSAPROTOCOL_INFOW lpProtocolInfo, + IN WSPUPCALLTABLE UpcallTable, + OUT LPWSPPROC_TABLE lpProcTable) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCDeinstallProvider( + IN LPGUID lpProviderId, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCEnumProtocols( + IN LPINT lpiProtocols, + OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer, + IN OUT LPDWORD lpdwBufferLength, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCGetProviderPath( + IN LPGUID lpProviderId, + OUT LPWSTR lpszProviderDllPath, + IN OUT LPINT lpProviderDllPathLen, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCInstallProvider( + IN CONST LPGUID lpProviderId, + IN CONST LPWSTR lpszProviderDllPath, + IN CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList, + IN DWORD dwNumberOfEntries, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCEnableNSProvider( + IN LPGUID lpProviderId, + IN BOOL fEnable) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCInstallNameSpace( + IN LPWSTR lpszIdentifier, + IN LPWSTR lpszPathName, + IN DWORD dwNameSpace, + IN DWORD dwVersion, + IN LPGUID lpProviderId) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCUnInstallNameSpace( + IN LPGUID lpProviderId) +{ + UNIMPLEMENTED + + return 0; +} + +INT +EXPORT +WSCWriteProviderOrder( + IN LPDWORD lpwdCatalogEntryId, + IN DWORD dwNumberOfEntries) +{ + UNIMPLEMENTED + + return 0; +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/misc/upcall.c b/reactos/lib/ws2_32/misc/upcall.c new file mode 100644 index 00000000000..afd800a3914 --- /dev/null +++ b/reactos/lib/ws2_32/misc/upcall.c @@ -0,0 +1,202 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock 2 DLL + * FILE: misc/upcall.c + * PURPOSE: Upcall functions + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include + +BOOL +WSPAPI +WPUCloseEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return FALSE; +} + + +INT +WSPAPI +WPUCloseSocketHandle( + IN SOCKET s, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +WSPAPI +WPUCloseThread( + IN LPWSATHREADID lpThreadId, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +WSAEVENT +WSPAPI +WPUCreateEvent( + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return (WSAEVENT)0; +} + + +SOCKET +WSPAPI +WPUCreateSocketHandle( + IN DWORD dwCatalogEntryId, + IN DWORD dwContext, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return (SOCKET)0; +} + + +SOCKET +WSPAPI +WPUFDIsSet( + IN SOCKET s, + IN LPFD_SET set) +{ + UNIMPLEMENTED + + return (SOCKET)0; + +} + + +INT +WSPAPI +WPUGetProviderPath( + IN LPGUID lpProviderId, + OUT LPWSTR lpszProviderDllPath, + IN OUT LPINT lpProviderDllPathLen, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +SOCKET +WSPAPI +WPUModifyIFSHandle( + IN DWORD dwCatalogEntryId, + IN SOCKET ProposedHandle, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return (SOCKET)0; +} + + +INT +WSPAPI +WPUOpenCurrentThread( + OUT LPWSATHREADID lpThreadId, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +BOOL +WSPAPI +WPUPostMessage( + IN HWND hWnd, + IN UINT Msg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + UNIMPLEMENTED + + return FALSE; +} + + +INT +WSPAPI +WPUQueryBlockingCallback( + IN DWORD dwCatalogEntryId, + OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback, + OUT LPDWORD lpdwContext, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +WSPAPI +WPUQuerySocketHandleContext( + IN SOCKET s, + OUT LPDWORD lpContext, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +WSPAPI +WPUQueueApc( + IN LPWSATHREADID lpThreadId, + IN LPWSAUSERAPC lpfnUserApc, + IN DWORD dwContext, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return 0; +} + + +BOOL +WSPAPI +WPUResetEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return FALSE; +} + + +BOOL +WSPAPI +WPUSetEvent( + IN WSAEVENT hEvent, + OUT LPINT lpErrno) +{ + UNIMPLEMENTED + + return FALSE; +} + +/* EOF */ diff --git a/reactos/lib/ws2_32/ws2_32.def b/reactos/lib/ws2_32/ws2_32.def new file mode 100644 index 00000000000..4ccfc7d965f --- /dev/null +++ b/reactos/lib/ws2_32/ws2_32.def @@ -0,0 +1,116 @@ +; WS2_32.DLL - Windows Sockets 2 DLL + +LIBRARY ws2_32.dll + +EXPORTS +;WEP +WPUCompleteOverlappedRequest@20 +WSAAccept@20 +WSAAddressToStringA@20 +WSAAddressToStringW@20 +WSAAsyncGetHostByAddr@28 +WSAAsyncGetHostByName@20 +WSAAsyncGetProtoByName@20 +WSAAsyncGetProtoByNumber@20 +WSAAsyncGetServByName@24 +WSAAsyncGetServByPort@24 +WSAAsyncSelect@16 +WSACancelAsyncRequest@4 +WSACancelBlockingCall@0 +WSACleanup@0 +WSACloseEvent@4 +WSAConnect@28 +WSACreateEvent@0 +WSADuplicateSocketA@12 +WSADuplicateSocketW@12 +WSAEnumNameSpaceProvidersA@8 +WSAEnumNameSpaceProvidersW@8 +WSAEnumNetworkEvents@12 +WSAEnumProtocolsA@12 +WSAEnumProtocolsW@12 +WSAEventSelect@12 +WSAGetLastError@0 +WSAGetOverlappedResult@20 +WSAGetQOSByName@12 +WSAGetServiceClassInfoA@16 +WSAGetServiceClassInfoW@16 +WSAGetServiceClassNameByClassIdA@12 +WSAGetServiceClassNameByClassIdW@12 +WSAHtonl@12 +WSAHtons@12 +WSAInstallServiceClassA@4 +WSAInstallServiceClassW@4 +WSAIoctl@36 +WSAIsBlocking@0 +WSAJoinLeaf@32 +WSALookupServiceBeginA@12 +WSALookupServiceBeginW@12 +WSALookupServiceEnd@4 +WSALookupServiceNextA@16 +WSALookupServiceNextW@16 +WSANtohl@12 +WSANtohs@12 +WSAProviderConfigChange@12 +WSARecv@28 +WSARecvDisconnect@8 +WSARecvFrom@36 +WSARemoveServiceClass@4 +WSAResetEvent@4 +WSASend@28 +WSASendDisconnect@8 +WSASendTo@36 +WSASetBlockingHook@4 +WSASetEvent@4 +WSASetLastError@4 +WSASetServiceA@12 +WSASetServiceW@12 +WSASocketA@24 +WSASocketW@24 +WSAStartup@8 +WSAStringToAddressA@20 +WSAStringToAddressW@20 +WSAUnhookBlockingHook@0 +WSAWaitForMultipleEvents@20 +;WSApSetPostRoutine +WSCDeinstallProvider@8 +WSCEnableNSProvider@8 +WSCEnumProtocols@16 +WSCGetProviderPath@16 +WSCInstallNameSpace@20 +WSCInstallProvider@20 +WSCUnInstallNameSpace@4 +;WSCWriteNameSpaceOrder +WSCWriteProviderOrder@8 +__WSAFDIsSet@8 +accept@12 +bind@12 +closesocket@4 +connect@12 +gethostbyaddr@12 +gethostbyname@4 +gethostname@8 +getpeername@12 +getprotobyname@4 +getprotobynumber@4 +getservbyname@8 +getservbyport@8 +getsockname@12 +getsockopt@20 +htonl@4 +htons@4 +inet_addr@4 +inet_ntoa@4 +ioctlsocket@12 +listen@8 +ntohl@4 +ntohs@4 +recv@16 +recvfrom@24 +select@20 +send@16 +sendto@24 +setsockopt@20 +shutdown@8 +socket@12 + +; EOF diff --git a/reactos/lib/ws2_32/ws2_32.edf b/reactos/lib/ws2_32/ws2_32.edf new file mode 100644 index 00000000000..8f6b723cc61 --- /dev/null +++ b/reactos/lib/ws2_32/ws2_32.edf @@ -0,0 +1,116 @@ +; WS2_32.DLL - Windows Sockets 2 DLL + +LIBRARY ws2_32.dll + +EXPORTS +;WEP +WPUCompleteOverlappedRequest=WPUCompleteOverlappedRequest@20 +WSAAccept=WSAAccept@20 +WSAAddressToStringA=WSAAddressToStringA@20 +WSAAddressToStringW=WSAAddressToStringW@20 +WSAAsyncGetHostByAddr=WSAAsyncGetHostByAddr@28 +WSAAsyncGetHostByName=WSAAsyncGetHostByName@20 +WSAAsyncGetProtoByName=WSAAsyncGetProtoByName@20 +WSAAsyncGetProtoByNumber=WSAAsyncGetProtoByNumber@20 +WSAAsyncGetServByName=WSAAsyncGetServByName@24 +WSAAsyncGetServByPort=WSAAsyncGetServByPort@24 +WSAAsyncSelect=WSAAsyncSelect@16 +WSACancelAsyncRequest=WSACancelAsyncRequest@4 +WSACancelBlockingCall=WSACancelBlockingCall@0 +WSACleanup=WSACleanup@0 +WSACloseEvent=WSACloseEvent@4 +WSAConnect=WSAConnect@28 +WSACreateEvent=WSACreateEvent@0 +WSADuplicateSocketA=WSADuplicateSocketA@12 +WSADuplicateSocketW=WSADuplicateSocketW@12 +WSAEnumNameSpaceProvidersA=WSAEnumNameSpaceProvidersA@8 +WSAEnumNameSpaceProvidersW=WSAEnumNameSpaceProvidersW@8 +WSAEnumNetworkEvents=WSAEnumNetworkEvents@12 +WSAEnumProtocolsA=WSAEnumProtocolsA@12 +WSAEnumProtocolsW=WSAEnumProtocolsW@12 +WSAEventSelect=WSAEventSelect@12 +WSAGetLastError=WSAGetLastError@0 +WSAGetOverlappedResult=WSAGetOverlappedResult@20 +WSAGetQOSByName=WSAGetQOSByName@12 +WSAGetServiceClassInfoA=WSAGetServiceClassInfoA@16 +WSAGetServiceClassInfoW=WSAGetServiceClassInfoW@16 +WSAGetServiceClassNameByClassIdA=WSAGetServiceClassNameByClassIdA@12 +WSAGetServiceClassNameByClassIdW=WSAGetServiceClassNameByClassIdW@12 +WSAHtonl=WSAHtonl@12 +WSAHtons=WSAHtons@12 +WSAInstallServiceClassA=WSAInstallServiceClassA@4 +WSAInstallServiceClassW=WSAInstallServiceClassW@4 +WSAIoctl=WSAIoctl@36 +WSAIsBlocking=WSAIsBlocking@0 +WSAJoinLeaf=WSAJoinLeaf@32 +WSALookupServiceBeginA=WSALookupServiceBeginA@12 +WSALookupServiceBeginW=WSALookupServiceBeginW@12 +WSALookupServiceEnd=WSALookupServiceEnd@4 +WSALookupServiceNextA=WSALookupServiceNextA@16 +WSALookupServiceNextW=WSALookupServiceNextW@16 +WSANtohl=WSANtohl@12 +WSANtohs=WSANtohs@12 +WSAProviderConfigChange=WSAProviderConfigChange@12 +WSARecv=WSARecv@28 +WSARecvDisconnect=WSARecvDisconnect@8 +WSARecvFrom=WSARecvFrom@36 +WSARemoveServiceClass=WSARemoveServiceClass@4 +WSAResetEvent=WSAResetEvent@4 +WSASend=WSASend@28 +WSASendDisconnect=WSASendDisconnect@8 +WSASendTo=WSASendTo@36 +WSASetBlockingHook=WSASetBlockingHook@4 +WSASetEvent=WSASetEvent@4 +WSASetLastError=WSASetLastError@4 +WSASetServiceA=WSASetServiceA@12 +WSASetServiceW=WSASetServiceW@12 +WSASocketA=WSASocketA@24 +WSASocketW=WSASocketW@24 +WSAStartup=WSAStartup@8 +WSAStringToAddressA=WSAStringToAddressA@20 +WSAStringToAddressW=WSAStringToAddressW@20 +WSAUnhookBlockingHook=WSAUnhookBlockingHook@0 +WSAWaitForMultipleEvents=WSAWaitForMultipleEvents@20 +;WSApSetPostRoutine +WSCDeinstallProvider=WSCDeinstallProvider@8 +WSCEnableNSProvider=WSCEnableNSProvider@8 +WSCEnumProtocols=WSCEnumProtocols@16 +WSCGetProviderPath=WSCGetProviderPath@16 +WSCInstallNameSpace=WSCInstallNameSpace@20 +WSCInstallProvider=WSCInstallProvider@20 +WSCUnInstallNameSpace=WSCUnInstallNameSpace@4 +;WSCWriteNameSpaceOrder +WSCWriteProviderOrder=WSCWriteProviderOrder@8 +__WSAFDIsSet=__WSAFDIsSet@8 +accept=accept@12 +bind=bind@12 +closesocket=closesocket@4 +connect=connect@12 +gethostbyaddr=gethostbyaddr@12 +gethostbyname=gethostbyname@4 +gethostname=gethostname@8 +getpeername=getpeername@12 +getprotobyname=getprotobyname@4 +getprotobynumber=getprotobynumber@4 +getservbyname=getservbyname@8 +getservbyport=getservbyport@8 +getsockname=getsockname@12 +getsockopt=getsockopt@20 +htonl=htonl@4 +htons=htons@4 +inet_addr=inet_addr@4 +inet_ntoa=inet_ntoa@4 +ioctlsocket=ioctlsocket@12 +listen=listen@8 +ntohl=ntohl@4 +ntohs=ntohs@4 +recv=recv@16 +recvfrom=recvfrom@24 +select=select@20 +send=send@16 +sendto=sendto@24 +setsockopt=setsockopt@20 +shutdown=shutdown@8 +socket=socket@12 + +; EOF diff --git a/reactos/lib/ws2_32/ws2_32.rc b/reactos/lib/ws2_32/ws2_32.rc new file mode 100644 index 00000000000..723083e83c9 --- /dev/null +++ b/reactos/lib/ws2_32/ws2_32.rc @@ -0,0 +1,39 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "Windows Sockets 2 DLL\0" + VALUE "FileVersion", RES_STR_FILE_VERSION + VALUE "InternalName", "ws2_32\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "ws2_32.dll\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + diff --git a/reactos/lib/ws2_32/ws2_32_specs b/reactos/lib/ws2_32/ws2_32_specs new file mode 100644 index 00000000000..02ba08d1e79 --- /dev/null +++ b/reactos/lib/ws2_32/ws2_32_specs @@ -0,0 +1,78 @@ +*asm: + + +*asm_final: + + +*cpp: +-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE} + +*cc1: +%(cc1_spec) + +*cc1plus: + + +*endfile: + + +*link: +%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMain@12} + +*lib: + + +*libgcc: +-lgcc + +*startfile: + + +*switches_need_spaces: + + +*signed_char: +%{funsigned-char:-D__CHAR_UNSIGNED__} + +*predefines: +-Di386 -D_WIN32 -DWIN32 -D__WIN32__ -D__MINGW32__ -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D_stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386) + +*cross_compile: +1 + +*version: +egcs-2.91.57 + +*multilib: +. ; + +*multilib_defaults: + + +*multilib_extra: + + +*multilib_matches: + + +*linker: +collect2 + +*cpp_486: +%{!ansi:-Di486} -D__i486 -D__i486__ + +*cpp_586: +%{!ansi:-Di586 -Dpentium} -D__i586 -D__i586__ -D__pentium -D__pentium__ + +*cpp_686: +%{!ansi:-Di686 -Dpentiumpro} -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ + +*cpp_cpu_default: +%(cpp_586) + +*cpp_cpu: +-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{mcpu=i486:%(cpp_486)} %{m486:%(cpp_486)} %{mpentium:%(cpp_586)} %{mcpu=pentium:%(cpp_586)} %{mpentiumpro:%(cpp_686)} %{mcpu=pentiumpro:%(cpp_686)} %{!mcpu*:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}} + +*cc1_cpu: +%{!mcpu*: %{m386:-mcpu=i386 -march=i386} %{mno-486:-mcpu=i386 -march=i386} %{m486:-mcpu=i486 -march=i486} %{mno-386:-mcpu=i486 -march=i486} %{mno-pentium:-mcpu=i486 -march=i486} %{mpentium:-mcpu=pentium} %{mno-pentiumpro:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}} +