X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmswindows.h;h=e273c680841659acc5ab996711b9c3222eef99a4;hp=fb96317b5fc64f59331d6b2f33304b9c2f52f21c;hb=4b3e1632dbe3ba8f17a24c422f9faeeba8657aa5;hpb=9c1c7f27cdbccbf838648253144f394f94513655 diff --git a/src/mswindows.h b/src/mswindows.h index fb96317b..e273c680 100644 --- a/src/mswindows.h +++ b/src/mswindows.h @@ -1,5 +1,6 @@ /* Declarations for windows - Copyright (C) 1995, 1997, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 1997, 1998, 2004 + Free Software Foundation, Inc. This file is part of GNU Wget. @@ -15,12 +16,53 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Wget; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +In addition, as a special exception, the Free Software Foundation +gives permission to link the code of its release of Wget with the +OpenSSL project's "OpenSSL" library (or with modified versions of it +that use the same license as the "OpenSSL" library), and distribute +the linked executables. You must obey the GNU General Public License +in all respects for all of the code used other than "OpenSSL". If you +modify this file, you may extend this exception to your version of the +file, but you are not obligated to do so. If you do not wish to do +so, delete this exception statement from your version. */ #ifndef MSWINDOWS_H #define MSWINDOWS_H -/* Apparently needed for alloca(). */ +#ifndef WGET_H +#error Include mswindows.h inside or after "wget.h" +#endif + +/* Prevent inclusion of in . */ +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include + +/* Use the correct winsock header; includes + only on MingW. We cannot use for IPv6. Using + getaddrinfo() requires . */ +#if defined(ENABLE_IPV6) || defined(HAVE_GETADDRINFO) +# include +# include +#else +# include +#endif + +#ifndef EAI_SYSTEM +# define EAI_SYSTEM -1 /* value doesn't matter */ +#endif + +/* Must include because of 'stat' define below. */ +#include + +/* Missing in several .c files. Include here. */ +#include + +/* Apparently needed for alloca(). */ #include #ifndef S_ISDIR @@ -30,7 +72,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ # define S_ISLNK(a) 0 #endif -/* We have strcasecmp and strncasecmp, just under a different name. */ +/* We have strcasecmp and strncasecmp, just under a different name. */ #define strcasecmp stricmp #define strncasecmp strnicmp @@ -38,42 +80,97 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define snprintf _snprintf #define vsnprintf _vsnprintf -/* No stat on Windows. */ +/* Define a wgint type under Windows. */ +typedef __int64 wgint; +#define SIZEOF_WGINT 8 + +#ifdef __GNUC__ +#define WGINT_MAX 9223372036854775807LL +#else +#define WGINT_MAX 9223372036854775807I64 +#endif + +/* str_to_wgint is a function with the semantics of strtol, but which + works on wgint. Since wgint is unconditionally 64-bit on Windows, + we #define it to str_to_int64, which either calls _strtoi64 or + implements the conversion manually. */ +#define str_to_wgint str_to_int64 +__int64 str_to_int64 (const char *, char **, int); + +/* No lstat on Windows. */ #define lstat stat -#define PATH_SEPARATOR '\\' +/* On Windows the 64-bit stat requires a different version of struct + stat. (On Unix too, but it happens transparently when stat is + remapped to stat64.) */ -/* Microsoft says stat is _stat, Borland doesn't */ -#ifdef _MSC_VER -# define stat _stat +#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 + +/* Transparently support statting large files, like POSIX's LFS API + does. */ +#define stat(fname, buf) _stati64 (fname, buf) + +#ifndef __BORLANDC__ +# define fstat(fd, buf) _fstati64 (fd, buf) #endif +#define PATH_SEPARATOR '\\' + #ifdef HAVE_ISATTY -/* Microsoft VC supports _isatty; Borland ? */ #ifdef _MSC_VER # define isatty _isatty #endif #endif -#define REALCLOSE(x) closesocket (x) - -/* read & write don't work with sockets on Windows 95. */ -#define READ(fd, buf, cnt) recv ((fd), (buf), (cnt), 0) -#define WRITE(fd, buf, cnt) send ((fd), (buf), (cnt), 0) - /* #### Do we need this? */ #include -/* Windows compilers accept only one arg to mkdir. */ -#ifndef __BORLANDC__ -# define mkdir(a, b) _mkdir(a) -#else /* __BORLANDC__ */ -# define mkdir(a, b) mkdir(a) -#endif /* __BORLANDC__ */ - -#include +/* Windows compilers accept only one arg to mkdir. */ +#define mkdir(a, b) _mkdir(a) + +#ifndef INHIBIT_WRAP + +/* Winsock functions don't set errno, so we provide wrappers + that do. */ + +#define socket wrapped_socket +#define bind wrapped_bind +#define connect wrapped_connect +#define recv wrapped_recv +#define send wrapped_send +#define select wrapped_select +#define getsockname wrapped_getsockname +#define getpeername wrapped_getpeername +#define setsockopt wrapped_setsockopt +#define closesocket wrapped_closesocket + +#endif /* not INHIBIT_WRAP */ + +int wrapped_socket (int, int, int); +int wrapped_bind (int, struct sockaddr *, int); +int wrapped_connect (int, const struct sockaddr *, int); +int wrapped_recv (int, void *, int, int); +int wrapped_send (int, const void *, int, int); +int wrapped_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *); +int wrapped_getsockname (int, struct sockaddr *, int *); +int wrapped_getpeername (int, struct sockaddr *, int *); +int wrapped_setsockopt (int, int, int, const void *, int); +int wrapped_closesocket (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: */ +/* Declarations of various socket errors: */ #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS @@ -113,11 +210,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Public functions. */ -unsigned int sleep (unsigned); void ws_startup (void); -void ws_changetitle (char*, int); +void ws_changetitle (const char *); +void ws_percenttitle (double); char *ws_mypath (void); -void ws_help (const char *); -void windows_main_junk (int *, char **, char **); +void windows_main (int *, char **, char **); + +/* Things needed for IPv6; missing in . */ +#ifdef ENABLE_IPV6 +# ifndef HAVE_INET_NTOP +extern const char *inet_ntop (int af, const void *src, char *dst, size_t size); +# endif +#endif /* ENABLE_IPV6 */ #endif /* MSWINDOWS_H */