]> sjero.net Git - wget/blob - src/mswindows.h
[svn] Large file support added. Published in <87psyr6jn7.fsf@xemacs.org>.
[wget] / src / mswindows.h
1 /* Declarations for windows
2    Copyright (C) 1995, 1997, 1997, 1998, 2004
3    Free Software Foundation, Inc.
4
5 This file is part of GNU Wget.
6
7 GNU Wget is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GNU Wget is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Wget; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 In addition, as a special exception, the Free Software Foundation
22 gives permission to link the code of its release of Wget with the
23 OpenSSL project's "OpenSSL" library (or with modified versions of it
24 that use the same license as the "OpenSSL" library), and distribute
25 the linked executables.  You must obey the GNU General Public License
26 in all respects for all of the code used other than "OpenSSL".  If you
27 modify this file, you may extend this exception to your version of the
28 file, but you are not obligated to do so.  If you do not wish to do
29 so, delete this exception statement from your version.  */
30
31 #ifndef MSWINDOWS_H
32 #define MSWINDOWS_H
33
34 #ifndef WGET_H
35 #error Include mswindows.h inside or after "wget.h"
36 #endif
37
38 /* Prevent inclusion of <winsock*.h> in <windows.h>.  */
39 #ifndef WIN32_LEAN_AND_MEAN
40 #define WIN32_LEAN_AND_MEAN
41 #endif
42
43 #include <windows.h>
44
45 /* Use the correct winsock header; <ws2tcpip.h> includes <winsock2.h> only
46    on Watcom/MingW.  We cannot use <winsock.h> for IPv6.  Using
47    getaddrinfo() requires <ws2tcpip.h>.  */
48 #if defined(ENABLE_IPV6) || defined(HAVE_GETADDRINFO)
49 # include <winsock2.h>
50 # include <ws2tcpip.h>
51 #else
52 # include <winsock.h>
53 #endif
54
55 #ifndef EAI_SYSTEM
56 # define EAI_SYSTEM -1   /* value doesn't matter */
57 #endif
58
59 /* Must include <sys/stat.h> because of 'stat' define below.  */
60 #include <sys/stat.h>
61
62 /* Missing in several .c files.  Include here.  */
63 #include <io.h>
64
65 /* Apparently needed for alloca().  */
66 #include <malloc.h>
67
68 #ifndef S_ISDIR
69 # define S_ISDIR(m) (((m) & (_S_IFMT)) == (_S_IFDIR))
70 #endif
71 #ifndef S_ISLNK
72 # define S_ISLNK(a) 0
73 #endif
74
75 /* We have strcasecmp and strncasecmp, just under a different name.  */
76 #define strcasecmp stricmp
77 #define strncasecmp strnicmp
78
79 /* The same for snprintf() and vsnprintf().  */
80 #define snprintf _snprintf
81 #define vsnprintf _vsnprintf
82
83 /* Define a wgint type under Windows. */
84 typedef __int64 wgint;
85 #define SIZEOF_WGINT 8
86
87 #if defined(_MSC_VER) || defined (__WATCOMC__)
88 # define WGINT_MAX 9223372036854775807I64
89 #else
90 # define WGINT_MAX 9223372036854775807LL
91 #endif
92
93 #define str_to_wgint str_to_int64
94 __int64 str_to_int64 (const char *, char **, int);
95
96 /* No lstat on Windows.  */
97 #define lstat stat
98
99 /* Transparently support large files, in spirit similar to the POSIX
100    LFS API.  */
101 #define stat(fname, buf) _stati64 (fname, buf)
102 #define fstat(fd, buf) _fstati64(fd, buf)
103 #define struct_stat struct _stati64
104
105 #define PATH_SEPARATOR '\\'
106
107 /* Microsoft says stat is _stat, Borland doesn't.  */
108 #ifdef _MSC_VER
109 # define stat _stat
110 #endif
111
112 #ifdef HAVE_ISATTY
113 /* Microsoft VC supports _isatty; Borland?  */
114 #ifdef _MSC_VER
115 # define isatty _isatty
116 #endif
117 #endif
118
119 /* If ftello is unavailable, use an approximation. */
120 #ifndef HAVE_FTELLO
121 __int64 wget_ftello (FILE *);
122 # define ftello wget_ftello
123 # define HAVE_FTELLO
124 #endif
125
126 /* #### Do we need this?  */
127 #include <direct.h>
128
129 /* Windows compilers accept only one arg to mkdir.  */
130 #ifndef __BORLANDC__
131 # define mkdir(a, b) _mkdir(a)
132 #else  /* __BORLANDC__ */
133 # define mkdir(a, b) mkdir(a)
134 #endif /* __BORLANDC__ */
135
136 /* Declarations of various socket errors:  */
137
138 #define EWOULDBLOCK             WSAEWOULDBLOCK
139 #define EINPROGRESS             WSAEINPROGRESS
140 #define EALREADY                WSAEALREADY
141 #define ENOTSOCK                WSAENOTSOCK
142 #define EDESTADDRREQ            WSAEDESTADDRREQ
143 #define EMSGSIZE                WSAEMSGSIZE
144 #define EPROTOTYPE              WSAEPROTOTYPE
145 #define ENOPROTOOPT             WSAENOPROTOOPT
146 #define EPROTONOSUPPORT         WSAEPROTONOSUPPORT
147 #define ESOCKTNOSUPPORT         WSAESOCKTNOSUPPORT
148 #define EOPNOTSUPP              WSAEOPNOTSUPP
149 #define EPFNOSUPPORT            WSAEPFNOSUPPORT
150 #define EAFNOSUPPORT            WSAEAFNOSUPPORT
151 #define EADDRINUSE              WSAEADDRINUSE
152 #define EADDRNOTAVAIL           WSAEADDRNOTAVAIL
153 #define ENETDOWN                WSAENETDOWN
154 #define ENETUNREACH             WSAENETUNREACH
155 #define ENETRESET               WSAENETRESET
156 #define ECONNABORTED            WSAECONNABORTED
157 #define ECONNRESET              WSAECONNRESET
158 #define ENOBUFS                 WSAENOBUFS
159 #define EISCONN                 WSAEISCONN
160 #define ENOTCONN                WSAENOTCONN
161 #define ESHUTDOWN               WSAESHUTDOWN
162 #define ETOOMANYREFS            WSAETOOMANYREFS
163 #define ETIMEDOUT               WSAETIMEDOUT
164 #define ECONNREFUSED            WSAECONNREFUSED
165 #define ELOOP                   WSAELOOP
166 #define EHOSTDOWN               WSAEHOSTDOWN
167 #define EHOSTUNREACH            WSAEHOSTUNREACH
168 #define EPROCLIM                WSAEPROCLIM
169 #define EUSERS                  WSAEUSERS
170 #define EDQUOT                  WSAEDQUOT
171 #define ESTALE                  WSAESTALE
172 #define EREMOTE                 WSAEREMOTE
173
174 /* Public functions.  */
175
176 #ifndef HAVE_SLEEP
177 unsigned int sleep (unsigned);
178 #endif
179 #ifndef HAVE_USLEEP
180 int usleep (unsigned long);
181 #endif
182
183 void ws_startup (void);
184 void ws_changetitle (const char *);
185 void ws_percenttitle (double);
186 char *ws_mypath (void);
187 void windows_main_junk (int *, char **, char **);
188
189 /* Things needed for IPv6; missing in <ws2tcpip.h>.  */
190 #ifdef ENABLE_IPV6
191 # ifndef HAVE_NTOP
192   extern const char *inet_ntop (int af, const void *src, char *dst, size_t size);
193 # endif
194 # ifndef HAVE_PTON
195   extern int inet_pton (int af, const char *src, void *dst);
196 # endif
197 #endif /* ENABLE_IPV6 */
198
199 #endif /* MSWINDOWS_H */