]> sjero.net Git - wget/blobdiff - src/mswindows.h
[svn] Store errors for Winsock calls in errno. Provide a version of strerror
[wget] / src / mswindows.h
index ced740cdbcf5344cbd5f1ec9e30cb831d2d83b43..8691d94cc4566edaba9e0d8d80c182d5bb288820 100644 (file)
@@ -84,10 +84,10 @@ so, delete this exception statement from your version.  */
 typedef __int64 wgint;
 #define SIZEOF_WGINT 8
 
-#if defined(_MSC_VER) || defined (__WATCOMC__)
-# define WGINT_MAX 9223372036854775807I64
+#ifdef __GNUC__
+#define WGINT_MAX 9223372036854775807LL
 #else
-# define WGINT_MAX 9223372036854775807LL
+#define WGINT_MAX 9223372036854775807I64
 #endif
 
 #define str_to_wgint str_to_int64
@@ -99,13 +99,22 @@ __int64 str_to_int64 (const char *, char **, int);
 /* Transparently support large files, in spirit similar to the POSIX
    LFS API.  */
 #define stat(fname, buf) _stati64 (fname, buf)
-#define fstat(fd, buf) _fstati64 (fd, buf)
-#define struct_stat struct _stati64
+
+#ifndef __BORLANDC__
+# define fstat(fd, buf) _fstati64 (fd, buf)
+#endif
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+# define struct_stat struct _stati64
+#elif defined(__BORLANDC__)
+# define struct_stat struct stati64
+#else
+# define struct_stat struct stat
+#endif
 
 #define PATH_SEPARATOR '\\'
 
 #ifdef HAVE_ISATTY
-/* Microsoft VC supports _isatty; Borland?  */
 #ifdef _MSC_VER
 # define isatty _isatty
 #endif
@@ -121,6 +130,40 @@ __int64 str_to_int64 (const char *, char **, int);
 # define mkdir(a, b) mkdir(a)
 #endif /* __BORLANDC__ */
 
+#ifndef INHIBIT_WRAP
+
+/* Winsock functions don't set errno, so we provide wrappers
+   that do. */
+
+#define socket wrap_socket
+#define bind wrap_bind
+#define connect wrap_connect
+#define recv wrap_recv
+#define send wrap_send
+#define select wrap_select
+#define getsockname wrap_getsockname
+#define getpeername wrap_getpeername
+#define setsockopt wrap_setsockopt
+
+#endif /* not INHIBIT_WRAP */
+
+int wrap_socket (int, int, int);
+int wrap_bind (int, struct sockaddr *, int);
+int wrap_connect (int, const struct sockaddr *, int);
+int wrap_recv (int, void *, int, int);
+int wrap_send (int, const void *, int, int);
+int wrap_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *);
+int wrap_getsockname (int, struct sockaddr *, int *);
+int wrap_getpeername (int, struct sockaddr *, int *);
+int wrap_setsockopt (int, int, int, const void *, int);
+
+/* Finally, provide a private version of strerror that does the
+   right thing with Winsock errors. */
+#ifndef INHIBIT_WRAP
+# define strerror windows_strerror
+#endif
+const char *windows_strerror (int);
+
 /* Declarations of various socket errors:  */
 
 #define EWOULDBLOCK             WSAEWOULDBLOCK
@@ -172,7 +215,7 @@ void ws_startup (void);
 void ws_changetitle (const char *);
 void ws_percenttitle (double);
 char *ws_mypath (void);
-void windows_main_junk (int *, char **, char **);
+void windows_main (int *, char **, char **);
 
 /* Things needed for IPv6; missing in <ws2tcpip.h>.  */
 #ifdef ENABLE_IPV6