? buildconf.bat
? msvc.patch
? winsock.patch
? lib/Makefile.vc6.save
? lib/libcurl.lib
? lib/release-ssl
? lib/vc60.idb
? lib/vc60.pch
? src/vc60.idb
? src/vc60.pch
Index: CVS-INFO
===================================================================
RCS file: /repository/curl/CVS-INFO,v
retrieving revision 1.20
diff -u -r1.20 CVS-INFO
--- CVS-INFO	26 Jun 2003 06:21:29 -0000	1.20
+++ CVS-INFO	26 Feb 2004 02:32:28 -0000
@@ -25,7 +25,8 @@
 
   perl/         is a subdirectory with various perl scripts
 
-To build after having extracted everything from CVS, do this:
+To build in environments that support configure, after having extracted
+everything from CVS, do this:
 
 ./buildconf
 ./configure
@@ -35,10 +36,15 @@
 
   ./configure --disable-shared --enable-debug --enable-maintainer-mode
 
+In environments that don't support configure (i.e. Microsoft), do this:
+
+buildconf.bat
+
 
 REQUIREMENTS
 
- You need the following software installed:
+ For buildconf (not buildconf.bat) to work, you need the following software
+installed:
 
  o autoconf 2.57  (or later)
  o automake 1.7   (or later)
Index: Makefile.dist
===================================================================
RCS file: /repository/curl/Makefile.dist,v
retrieving revision 1.17
diff -u -r1.17 Makefile.dist
--- Makefile.dist	13 Jan 2004 08:57:01 -0000	1.17
+++ Makefile.dist	26 Feb 2004 02:32:28 -0000
@@ -43,27 +43,27 @@
 
 vc:
 	cd lib
-	nmake -f Makefile.vc6 cfg=release
+	nmake /f Makefile.vc6 cfg=release
 	cd ..\src
-	nmake -f Makefile.vc6
+	nmake /f Makefile.vc6
 
 vc-ssl:
 	cd lib
-	nmake -f Makefile.vc6 cfg=release-ssl
+	nmake /f Makefile.vc6 cfg=release-ssl
 	cd ..\src
-	nmake -f Makefile.vc6 cfg=release-ssl
+	nmake /f Makefile.vc6 cfg=release-ssl
 
 vc-ssl-dll:
 	cd lib
-	nmake -f Makefile.vc6 cfg=release-ssl-dll
+	nmake /f Makefile.vc6 cfg=release-ssl-dll
 	cd ..\src
-	nmake -f Makefile.vc6
+	nmake /f Makefile.vc6
 
 vc-libcurl-ssl-dll:
 	cd lib
-	nmake -f Makefile.vc6 cfg=release-libcurl-ssl-dll
+	nmake /f Makefile.vc6 cfg=release-libcurl-ssl-dll
 	cd ..\src
-	nmake -f Makefile.vc6
+	nmake /f Makefile.vc6
 
 djgpp:
 	make -C lib -f Makefile.dj
Index: include/curl/multi.h
===================================================================
RCS file: /repository/curl/include/curl/multi.h,v
retrieving revision 1.15
diff -u -r1.15 multi.h
--- include/curl/multi.h	7 Jan 2004 09:19:34 -0000	1.15
+++ include/curl/multi.h	26 Feb 2004 02:32:31 -0000
@@ -52,7 +52,7 @@
 #endif
 
 #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
-#include <winsock.h>
+#include <winsock2.h>
 #else
 
 #ifdef _AIX
Index: lib/Makefile.vc6
===================================================================
RCS file: /repository/curl/lib/Makefile.vc6,v
retrieving revision 1.39
diff -u -r1.39 Makefile.vc6
--- lib/Makefile.vc6	5 Jan 2004 22:29:32 -0000	1.39
+++ lib/Makefile.vc6	26 Feb 2004 02:32:31 -0000
@@ -43,12 +43,11 @@
 CCNODBG   = cl.exe /MD /O2 /D "NDEBUG"
 CCDEBUG   = cl.exe /MDd /Od /Gm /Zi  /D "_DEBUG" /GZ
 CFLAGSSSL = /D "USE_SSLEAY" /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
-CFLAGS = /I "../include" /nologo /W3 /GX /D "WIN32" /D "VC6" /D "_MBCS" /D "_LIB" /YX /FD /c /D "MSDOS"
+CFLAGS = /I "." /I "../include" /nologo /W3 /GX /D "WIN32" /D "VC6" /D "_MBCS" /D "_LIB" /YX /FD /c /D "MSDOS"
 
 LNKDLL    = link.exe /DLL  /def:libcurl.def
-LNKLIB    = link.exe -lib
+LNKLIB    = link.exe /lib
 LFLAGS    = /nologo
-LINKLIBS  = ws2_32.lib winmm.lib
 SSLLIBS   = libeay32.lib ssleay32.lib
 #  RSAglue.lib was formerly needed in the SSLLIBS
 CFGSET    = FALSE
@@ -84,7 +83,6 @@
 DIROBJ   =.\$(CFG)
 LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)/out32"
 LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(TARGET)
-LINKLIBS = $(LINKLIBS)
 CC       = $(CCNODBG) $(CFLAGSSSL)
 CFGSET   = TRUE
 !ENDIF
@@ -97,7 +95,6 @@
 DIROBJ   =.\$(CFG)
 LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)/out32dll"
 LNK      = $(LNKDLL) $(LFLAGSSSL) /out:$(TARGET) /IMPLIB:"$(LIB_NAME).lib"
-LINKLIBS = $(LINKLIBS) $(SSLLIBS)
 CC       = $(CCNODBG)  $(CFLAGSSSL)
 CFGSET   = TRUE
 RESOURCE = $(DIROBJ)\libcurl.res
@@ -110,7 +107,6 @@
 DIROBJ   =.\$(CFG)
 LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)/out32dll"
 LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(TARGET)
-LINKLIBS = $(LINKLIBS) $(SSLLIBS)
 CC       = $(CCNODBG)  $(CFLAGSSSL)
 CFGSET   = TRUE
 RESOURCE = $(DIROBJ)\libcurl.res
@@ -147,7 +143,6 @@
 TARGET   = $(LIB_NAME_DEBUG).lib
 DIROBJ   =.\$(CFG)
 LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(TARGET)
-LINKLIBS = $(LINKLIBS)
 CC       = $(CCDEBUG) $(CFLAGSSSL)
 CFGSET   = TRUE
 !ENDIF
@@ -160,7 +155,6 @@
 DIROBJ   =.\$(CFG)
 LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)/out32dll
 LNK      = $(LNKDLL) $(LFLAGSSSL) /DEBUG /out:$(TARGET) /IMPLIB:"$(LIB_NAME_DEBUG).lib" /PDB:"$(LIB_NAME_DEBUG).pdb"
-LINKLIBS = $(LINKLIBS) $(SSLLIBS)
 CC       = $(CCDEBUG) $(CFLAGSSSL)
 CFGSET   = TRUE
 RESOURCE = $(DIROBJ)\libcurl.res
@@ -170,7 +164,7 @@
 # Usage
 #
 !IF "$(CFGSET)" == "FALSE"
-!MESSAGE Usage: nmake -f makefile.vc6 CFG=<config> <target>
+!MESSAGE Usage: nmake /f makefile.vc6 CFG=<config> <target>
 !MESSAGE where <config> is one of:
 !MESSAGE   release          - release static library
 !MESSAGE   release-dll      - release dll
@@ -234,7 +228,7 @@
 
 
 $(TARGET): $(X_OBJS)
-	$(LNK) $(LFLAGS) $(LINKLIBS) $(X_OBJS)
+	$(LNK) $(LFLAGS) $(X_OBJS)
 
 $(X_OBJS): $(DIROBJ)
 
Index: lib/config-win32.h
===================================================================
RCS file: /repository/curl/lib/config-win32.h,v
retrieving revision 1.10
diff -u -r1.10 config-win32.h
--- lib/config-win32.h	23 Feb 2004 11:59:28 -0000	1.10
+++ lib/config-win32.h	26 Feb 2004 02:32:33 -0000
@@ -32,6 +32,10 @@
 #endif
 
 /* The size of a `curl_off_t', as computed by sizeof. */
+#ifdef SIZEOF_CURL_OFF_T
+#undef SIZEOF_CURL_OFF_T
+#endif
+
 #define SIZEOF_CURL_OFF_T 8
 
 /* Define if you have the ANSI C header files.  */
Index: lib/easy.c
===================================================================
RCS file: /repository/curl/lib/easy.c,v
retrieving revision 1.47
diff -u -r1.47 easy.c
--- lib/easy.c	22 Jan 2004 12:45:50 -0000	1.47
+++ lib/easy.c	26 Feb 2004 02:32:34 -0000
@@ -98,7 +98,7 @@
   WORD wVersionRequested;  
   WSADATA wsaData; 
   int err; 
-  wVersionRequested = MAKEWORD(2, 0); 
+  wVersionRequested = MAKEWORD(1, 1);
     
   err = WSAStartup(wVersionRequested, &wsaData); 
     
@@ -107,14 +107,15 @@
     /* winsock.dll.     */ 
     return CURLE_FAILED_INIT; 
     
-  /* Confirm that the Windows Sockets DLL supports 2.0.*/ 
+  /* Confirm that the Windows Sockets DLL supports 1.1.*/ 
   /* Note that if the DLL supports versions greater */ 
-  /* than 2.0 in addition to 2.0, it will still return */ 
-  /* 2.0 in wVersion since that is the version we */ 
-  /* requested. */ 
-    
-  if ( LOBYTE( wsaData.wVersion ) != 2 || 
-       HIBYTE( wsaData.wVersion ) != 0 ) { 
+  /* than 1.1 in addition to 1.1, it will still return */ 
+  /* 1.1 in wVersion since that is the version we */ 
+  /* requested. wHighVersion contains the highest supported */
+  /* version. */
+
+  if ( LOBYTE( wsaData.wVersion ) != 1 || 
+       HIBYTE( wsaData.wVersion ) != 1 ) { 
     /* Tell the user that we couldn't find a useable */ 
 
     /* winsock.dll. */ 
Index: lib/telnet.c
===================================================================
RCS file: /repository/curl/lib/telnet.c,v
retrieving revision 1.54
diff -u -r1.54 telnet.c
--- lib/telnet.c	15 Feb 2004 13:48:50 -0000	1.54
+++ lib/telnet.c	26 Feb 2004 02:32:39 -0000
@@ -101,6 +101,11 @@
 #define  CURL_SB_EOF(x) (x->subpointer >= x->subend)
 #define  CURL_SB_LEN(x) (x->subend - x->subpointer)
 
+#ifdef WIN32
+typedef FARPROC WSOCK2_FUNC;
+static CURLcode check_wsock2 ( struct SessionHandle *data );
+#endif
+
 static
 void telrcv(struct connectdata *,
 	    unsigned char *inbuf,	/* Data received from socket */
@@ -164,6 +169,45 @@
   TelnetReceive telrcv_state;
 };
 
+#ifdef WIN32
+static CURLcode
+check_wsock2 ( struct SessionHandle *data )
+{
+  int err; 
+  WORD wVersionRequested;  
+  WSADATA wsaData; 
+
+  curlassert(data);
+
+  /* telnet requires at least WinSock 2.0 so ask for it. */
+  wVersionRequested = MAKEWORD(2, 0);
+
+  err = WSAStartup(wVersionRequested, &wsaData); 
+  
+  /* We must've called this once already, so this call */
+  /* should always succeed.  But, just in case... */
+  if (err != 0) {
+    failf(data,"WSAStartup failed (%d)",err);
+    return CURLE_FAILED_INIT; 
+  }
+
+  /* We have to have a WSACleanup call for every successful */
+  /* WSAStartup call. */
+  WSACleanup();
+
+  /* Check that our version is supported */
+  if (LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) ||
+      HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)) {
+      /* Our version isn't supported */
+      failf(data,"insufficient winsock version to support "
+	    "telnet");
+      return CURLE_FAILED_INIT;
+  }
+
+  /* Our version is supported */
+  return CURLE_OK;
+}
+#endif
 static
 CURLcode init_telnet(struct connectdata *conn)
 {
@@ -1037,6 +1081,10 @@
   struct SessionHandle *data = conn->data;
   int sockfd = conn->sock[FIRSTSOCKET];
 #ifdef WIN32
+  HMODULE wsock2;
+  WSOCK2_FUNC create_event_func;
+  WSOCK2_FUNC event_select_func;
+  WSOCK2_FUNC enum_netevents_func;
   WSAEVENT event_handle;
   WSANETWORKEVENTS events;
   HANDLE stdin_handle;
@@ -1063,13 +1111,61 @@
     return code;
 
 #ifdef WIN32
+  /*
+  ** This functionality only works with WinSock >= 2.0.  So,
+  ** make sure have it.
+  */
+  code = check_wsock2(data);
+  if (code)
+    return code;
+
+  /* OK, so we have WinSock 2.0.  We need to dynamically */
+  /* load ws2_32.dll and get the function pointers we need. */
+  wsock2 = LoadLibrary("WS2_32.DLL");
+  if (wsock2 == NULL) {
+    failf(data,"failed to load WS2_32.DLL (%d)",GetLastError());
+    return CURLE_FAILED_INIT;
+  }
+
+  /* Grab a pointer to WSACreateEvent */
+  create_event_func = GetProcAddress(wsock2,"WSACreateEvent");
+  if (create_event_func == NULL) {
+    failf(data,"failed to find WSACreateEvent function (%d)",
+	  GetLastError());
+    FreeLibrary(wsock2);
+    return CURLE_FAILED_INIT;
+  }
+
+  /* And WSAEventSelect */
+  event_select_func = GetProcAddress(wsock2,"WSAEventSelect");
+  if (event_select_func == NULL) {
+    failf(data,"failed to find WSAEventSelect function (%d)",
+	  GetLastError());
+    FreeLibrary(wsock2);
+    return CURLE_FAILED_INIT;
+  }
+
+  /* And WSAEnumNetworkEvents */
+  enum_netevents_func = GetProcAddress(wsock2,"WSAEnumNetworkEvents");
+  if (enum_netevents_func == NULL) {
+    failf(data,"failed to find WSAEnumNetworkEvents function (%d)",
+	  GetLastError());
+    FreeLibrary(wsock2);
+    return CURLE_FAILED_INIT;
+  }
+
   /* We want to wait for both stdin and the socket. Since
   ** the select() function in winsock only works on sockets
   ** we have to use the WaitForMultipleObjects() call.
   */
 
   /* First, create a sockets event object */
-  event_handle = WSACreateEvent();
+  event_handle = (WSAEVENT)create_event_func();
+  if (event_handle == WSA_INVALID_EVENT) {
+    failf(data,"WSACreateEvent failed (%d)",GetLastError());
+    FreeLibrary(wsock2);
+    return CURLE_FAILED_INIT;
+  }
 
   /* The get the Windows file handle for stdin */
   stdin_handle = GetStdHandle(STD_INPUT_HANDLE);
@@ -1079,7 +1175,8 @@
   objs[1] = event_handle;
 
   /* Tell winsock what events we want to listen to */
-  if(WSAEventSelect(sockfd, event_handle, FD_READ|FD_CLOSE) == SOCKET_ERROR) {
+  if(event_select_func(sockfd, event_handle, FD_READ|FD_CLOSE) == SOCKET_ERROR) {
+    FreeLibrary(wsock2);
     return 0;
   }
 
@@ -1113,7 +1210,7 @@
     break;
       
     case 1:
-      if(WSAEnumNetworkEvents(sockfd, event_handle, &events)
+      if(enum_netevents_func(sockfd, event_handle, &events)
          != SOCKET_ERROR) {
         if(events.lNetworkEvents & FD_READ) {
           /* This reallu OUGHT to check its return code. */
@@ -1139,6 +1236,10 @@
       break;
     }
   }
+
+  /* We called LoadLibrary, so call FreeLibrary */
+  if (!FreeLibrary(wsock2))
+    infof(data,"FreeLibrary(wsock2) failed (%d)",GetLastError());
 #else
   FD_ZERO (&readfd);		/* clear it */
   FD_SET (sockfd, &readfd);
Index: src/Makefile.vc6
===================================================================
RCS file: /repository/curl/src/Makefile.vc6,v
retrieving revision 1.16
diff -u -r1.16 Makefile.vc6
--- src/Makefile.vc6	23 Nov 2003 22:26:40 -0000	1.16
+++ src/Makefile.vc6	26 Feb 2004 02:32:39 -0000
@@ -28,10 +28,10 @@
 ZLIB_PATH  = ../../zlib-1.1.4
 !ENDIF
 
-CFLAGS = /I "../include" /I "$(ZLIB_PATH)" /nologo /W3 /GX /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+CFLAGS = /I "../lib" /I "../include" /I "$(ZLIB_PATH)" /nologo /W3 /GX /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
 LFLAGS = /nologo /libpath:"$(ZLIB_PATH)" /out:$(PROGRAM_NAME) /subsystem:console /machine:I386
-LINKLIBS = ws2_32.lib libcurl.lib winmm.lib zlib.lib
-LINKLIBS_DEBUG = ws2_32.lib libcurld.lib winmm.lib zlib.lib
+LINKLIBS = wsock32.lib libcurl.lib winmm.lib zlib.lib
+LINKLIBS_DEBUG = wsock32.lib libcurld.lib winmm.lib zlib.lib
 
 RELEASE_OBJS= \
 	hugehelpr.obj \
@@ -49,14 +49,6 @@
 	homedird.obj \
 	maind.obj
 	
-LINK_OBJS= \
-	hugehelp.obj \
-	writeout.obj \
-	urlglob.obj \
-	getpass.obj \
-	homedir.obj \
-	main.obj
- 
 ######################
 # release-ssl
  
@@ -67,49 +59,49 @@
 LFLAGSSSL = /LIBPATH:"$(OPENSSL_PATH)/out32"
 SSLLIBS   = libeay32.lib ssleay32.lib gdi32.lib 
 LINKLIBS  = $(LINKLIBS) $(SSLLIBS)
+LINKLIBS_DEBUG  = $(LINKLIBS_DEBUG) $(SSLLIBS)
 LFLAGS = $(LFLAGS) $(LFLAGSSSL)
 !ENDIF
  
 all : release
 
 release: $(RELEASE_OBJS)
-	$(LINKR) $(LFLAGS) $(LINKLIBS) $(LINK_OBJS)
+	$(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
 
 debug: $(DEBUG_OBJS)
-	$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(LINK_OBJS)
+	$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
 
 ## Release
 hugehelpr.obj: hugehelp.c
-	$(CCR) $(CFLAGS) /Zm200 hugehelp.c
+	$(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
 writeoutr.obj: writeout.c
-	$(CCR) $(CFLAGS) writeout.c
+	$(CCR) $(CFLAGS) /Fo"$@" writeout.c
 urlglobr.obj: urlglob.c
-	$(CCR) $(CFLAGS) urlglob.c
+	$(CCR) $(CFLAGS) /Fo"$@" urlglob.c
 getpassr.obj: getpass.c
-	$(CCR) $(CFLAGS) getpass.c
+	$(CCR) $(CFLAGS) /Fo"$@" getpass.c
 homedirr.obj: homedir.c
-	$(CCR) $(CFLAGS) homedir.c
+	$(CCR) $(CFLAGS) /Fo"$@" homedir.c
 mainr.obj: main.c
-	$(CCR) $(CFLAGS) main.c
+	$(CCR) $(CFLAGS) /Fo"$@" main.c
 
 ## Debug
 hugehelpd.obj: hugehelp.c
-	$(CCD) $(CFLAGS) /Zm200 hugehelp.c
+	$(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
 writeoutd.obj: writeout.c
-	$(CCD) $(CFLAGS) writeout.c
+	$(CCD) $(CFLAGS) /Fo"$@" writeout.c
 urlglobd.obj: urlglob.c
-	$(CCD) $(CFLAGS) urlglob.c
+	$(CCD) $(CFLAGS) /Fo"$@" urlglob.c
 getpassd.obj: getpass.c
-	$(CCD) $(CFLAGS) getpass.c
+	$(CCD) $(CFLAGS) /Fo"$@" getpass.c
 homedird.obj: homedir.c
-	$(CCD) $(CFLAGS) homedir.c
+	$(CCD) $(CFLAGS) /Fo"$@" homedir.c
 maind.obj: main.c
-	$(CCD) $(CFLAGS) main.c
+	$(CCD) $(CFLAGS) /Fo"$@" main.c
 
 clean:
-	-@erase homedir.obj
-	-@erase hugehelp.obj
-	-@erase main.obj
+	-@erase $(RELEASE_OBJS)
+	-@erase $(DEBUG_OBJS)
 	-@erase vc60.idb
 	-@erase vc60.pdb
 	-@erase vc60.pch
Index: src/main.c
===================================================================
RCS file: /repository/curl/src/main.c,v
retrieving revision 1.237
diff -u -r1.237 main.c
--- src/main.c	21 Feb 2004 15:08:21 -0000	1.237
+++ src/main.c	26 Feb 2004 02:32:44 -0000
@@ -52,7 +52,7 @@
 #define CURLseparator	"--_curl_--"
 
 #if defined(WIN32)&&!defined(__CYGWIN32__)
-#include <winsock.h>
+#include <winsock2.h>
 #endif
 
 #ifdef TIME_WITH_SYS_TIME
@@ -1017,9 +1017,14 @@
    * definitions for LLONG_{MIN,MAX} or LONG_LONG_{MIN,MAX}.
    */
 #ifndef LLONG_MAX
+#ifdef _MSC_VER
+#define LLONG_MAX (curl_off_t)0x7FFFFFFFFFFFFFFFi64
+#define LLONG_MIN (curl_off_t)0x8000000000000000i64
+#else
 #define LLONG_MAX (curl_off_t)0x7FFFFFFFFFFFFFFFLL
 #define LLONG_MIN (curl_off_t)0x8000000000000000LL
 #endif
+#endif
 
   /* this is a duplicate of the function that is also used in libcurl */
   *val = strtoofft(str, NULL, 0);
@@ -2642,8 +2647,11 @@
 
   errorbuffer[0]=0; /* prevent junk from being output */
 
-  main_init(); /* inits */
-
+ /* inits */
+  if (main_init() != CURLE_OK) {
+    helpf("error initializing curl library\n");
+    return CURLE_FAILED_INIT;
+  }
   config->showerror=TRUE;
   config->conf=CONF_DEFAULT;
   config->use_httpget=FALSE;

