From ba6cc3283b363c5aa2839a217e5162e272814174 Mon Sep 17 00:00:00 2001 From: sof Date: Wed, 5 May 1999 10:34:55 +0000 Subject: [PATCH] [project @ 1999-05-05 10:34:53 by sof] stubs for starting & stopping Winsock --- ghc/lib/misc/cbits/Makefile | 4 ++++ ghc/lib/misc/cbits/ghcSockets.h | 13 +++++++++++- ghc/lib/misc/cbits/initWinSock.c | 41 ++++++++++++++++++++++++++++++++++++++ ghc/lib/misc/cbits/regex.c | 2 +- ghc/lib/misc/cbits/socketOpt.c | 12 +++++++++-- 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 ghc/lib/misc/cbits/initWinSock.c diff --git a/ghc/lib/misc/cbits/Makefile b/ghc/lib/misc/cbits/Makefile index 76bf2d6..379073f 100644 --- a/ghc/lib/misc/cbits/Makefile +++ b/ghc/lib/misc/cbits/Makefile @@ -21,4 +21,8 @@ LIBRARY=libHSmisc_cbits.a LIBOBJS=$(C_OBJS) INSTALL_LIBS += $(LIBRARY) +DLL_NAME = HSmisc_cbits.dll +SRC_BLD_DLL_OPTS += --export-all --output-def=HSmisc_cbits.def +SRC_BLD_DLL_OPTS += -lwinmm -lwsock32 -lHSrts_imp -lHS_cbits_imp -lgmp -L. -L../../../rts/gmp -L../../../rts -L../../std/cbits + include $(TOP)/mk/target.mk diff --git a/ghc/lib/misc/cbits/ghcSockets.h b/ghc/lib/misc/cbits/ghcSockets.h index 482930f..175f8b8 100644 --- a/ghc/lib/misc/cbits/ghcSockets.h +++ b/ghc/lib/misc/cbits/ghcSockets.h @@ -1,6 +1,10 @@ #ifndef GHC_SOCKETS_H #define GHC_SOCKETS_H +#ifdef HAVE_WINSOCK_H +#include +#else + #include #include #include @@ -39,7 +43,7 @@ #include /* ToDo: featurise this */ -#ifndef cygwin32_TARGET_OS +#if !defined(cygwin32_TARGET_OS) && !defined(mingw32_TARGET_OS) #include #endif @@ -47,6 +51,8 @@ # include #endif +#endif /* !HAVE_WINSOCK_H */ + /* acceptSocket.lc */ StgInt acceptSocket (StgInt, StgAddr, StgAddr); @@ -87,5 +93,10 @@ StgInt setSocketOption__ (StgInt, StgInt, StgInt); /* writeDescriptor.lc */ StgInt writeDescriptor (StgInt, StgAddr, StgInt); +/* initWinSock.c */ +#ifdef _WIN32 +StgInt initWinSock(); +void shutdownWinSock(); +#endif #endif /* !GHC_SOCKETS_H */ diff --git a/ghc/lib/misc/cbits/initWinSock.c b/ghc/lib/misc/cbits/initWinSock.c new file mode 100644 index 0000000..7ea4de6 --- /dev/null +++ b/ghc/lib/misc/cbits/initWinSock.c @@ -0,0 +1,41 @@ + +#define NON_POSIX_SOURCE +#include "Rts.h" +#include "ghcSockets.h" +#include "stgio.h" + + +#ifdef _WIN32 + +/* Initialising WinSock... */ + +StgInt +initWinSock () +{ + WORD wVersionRequested; + WSADATA wsaData; + int err; + + wVersionRequested = MAKEWORD( 1, 1 ); + + err = WSAStartup ( wVersionRequested, &wsaData ); + + if ( err != 0 ) { + return err; + } + + if ( LOBYTE( wsaData.wVersion ) != 1 || + HIBYTE( wsaData.wVersion ) != 1 ) { + WSACleanup(); + return (-1); + } + return 0; +} + +void +shutdownWinSock() +{ + WSACleanup(); +} + +#endif diff --git a/ghc/lib/misc/cbits/regex.c b/ghc/lib/misc/cbits/regex.c index 7212564..761cb76 100644 --- a/ghc/lib/misc/cbits/regex.c +++ b/ghc/lib/misc/cbits/regex.c @@ -94,7 +94,7 @@ char *realloc (); This is used in most programs--a few other programs avoid this by defining INHIBIT_STRING_HEADER. */ #ifndef INHIBIT_STRING_HEADER -#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC) +#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC) || defined(_WIN32) #include #ifndef bcmp #define bcmp(s1, s2, n) memcmp ((s1), (s2), (n)) diff --git a/ghc/lib/misc/cbits/socketOpt.c b/ghc/lib/misc/cbits/socketOpt.c index ddda6c1..69e1fa1 100644 --- a/ghc/lib/misc/cbits/socketOpt.c +++ b/ghc/lib/misc/cbits/socketOpt.c @@ -19,7 +19,11 @@ StgInt opt; { int level,optval, sz_optval,rc; - if ( opt == TCP_MAXSEG || opt == TCP_NODELAY ) { + if ( +#ifndef _WIN32 + opt == TCP_MAXSEG || +#endif + opt == TCP_NODELAY ) { level = IPPROTO_TCP; } else { level = SOL_SOCKET; @@ -45,7 +49,11 @@ StgInt val; { int level, optval,rc; - if ( opt == TCP_MAXSEG || opt == TCP_NODELAY ) { + if ( +#ifndef _WIN32 + opt == TCP_MAXSEG || +#endif + opt == TCP_NODELAY ) { level = IPPROTO_TCP; } else { level = SOL_SOCKET; -- 1.7.10.4