14 #ifndef SQUID_COMPAT_OS_MSWINDOWS_H
15 #define SQUID_COMPAT_OS_MSWINDOWS_H
40 #define ACL WindowsACL
43 #define _CRT_SECURE_NO_DEPRECATE
44 #pragma warning( disable : 4290 )
45 #pragma warning( disable : 4996 )
49 #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
50 # define __USE_FILE_OFFSET64 1
55 #if defined(__USE_FILE_OFFSET64)
56 typedef uint64_t ino_t;
58 typedef unsigned long ino_t;
61 #define INT64_MAX _I64_MAX
62 #define INT64_MIN _I64_MIN
64 #include "default_config_file.h"
67 #define THREADLOCAL __declspec(thread)
69 #elif defined(__GNUC__)
71 #define THREADLOCAL __attribute__((section(".tls")))
77 #define alloca _alloca
78 #define fileno _fileno
79 #define fstat _fstati64
80 #define lseek _lseeki64
81 #define memccpy _memccpy
82 #define mktemp _mktemp
83 #define snprintf _snprintf
85 #define strcasecmp _stricmp
86 #define strlwr _strlwr
87 #define strncasecmp _strnicmp
88 #define tempnam _tempnam
89 #define vsnprintf _vsnprintf
93 #if defined(_MSC_VER) || _SQUID_CYGWIN_
95 #define ftruncate WIN32_ftruncate
96 SQUIDCEXTERN int WIN32_truncate(
const char *pathname, off_t length);
97 #define truncate WIN32_truncate
104 #define fdopen _fdopen
105 #define getcwd _getcwd
106 #define getpid _getpid
107 #define mkdir(p,F) mkdir((p))
108 #define pclose _pclose
110 #define putenv _putenv
111 #define setmode _setmode
112 #define sleep(t) Sleep((t)*1000)
114 #define unlink _unlink
117 #define O_RDONLY _O_RDONLY
120 #define O_WRONLY _O_WRONLY
123 #define O_RDWR _O_RDWR
126 #define O_APPEND _O_APPEND
129 #define O_CREAT _O_CREAT
132 #define O_TRUNC _O_TRUNC
135 #define O_EXCL _O_EXCL
138 #define O_TEXT _O_TEXT
141 #define O_BINARY _O_BINARY
144 #define O_RAW _O_BINARY
147 #define O_TEMPORARY _O_TEMPORARY
150 #define O_NOINHERIT _O_NOINHERIT
153 #define O_SEQUENTIAL _O_SEQUENTIAL
156 #define O_RANDOM _O_RANDOM
163 #define S_IFMT _S_IFMT
166 #define S_IFDIR _S_IFDIR
169 #define S_IFCHR _S_IFCHR
172 #define S_IFREG _S_IFREG
175 #define S_IREAD _S_IREAD
178 #define S_IWRITE _S_IWRITE
181 #define S_IEXEC _S_IEXEC
205 #if defined(_MSC_VER)
206 #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
217 #if defined(_MSC_VER)
239 #if !HAVE_GETTIMEOFDAY
246 #define CHANGE_FD_SETSIZE 1
247 #if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
248 #define FD_SETSIZE SQUID_MAXFD
254 #include <winsock2.h>
259 #include <ws2tcpip.h>
262 #if (EAI_NODATA == EAI_NONAME)
264 #define EAI_NODATA WSANO_DATA
267 #if defined(_MSC_VER)
269 #pragma warning (push)
270 #pragma warning (disable:4142)
277 #if defined(_MSC_VER)
278 #pragma warning (pop)
284 #define EISCONN WSAEISCONN
287 #define EINPROGRESS WSAEINPROGRESS
290 #define EWOULDBLOCK WSAEWOULDBLOCK
293 #define EALREADY WSAEALREADY
296 #define ETIMEDOUT WSAETIMEDOUT
299 #define ECONNREFUSED WSAECONNREFUSED
302 #define ECONNRESET WSAECONNRESET
305 #define ENOTCONN WSAENOTCONN
308 #define ERESTART WSATRY_AGAIN
311 #define EAFNOSUPPORT WSAEAFNOSUPPORT
314 #define ENETUNREACH WSAENETUNREACH
317 #define ENOTSUP WSAEOPNOTSUPP
320 #define ECONNABORTED WSAECONNABORTED
324 #define h_errno errno
327 #define FD_CLR(fd, set) do { \
329 SOCKET __sock = _get_osfhandle(fd); \
330 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
331 if (((fd_set FAR *)(set))->fd_array[__i] == __sock) { \
332 while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
333 ((fd_set FAR *)(set))->fd_array[__i] = \
334 ((fd_set FAR *)(set))->fd_array[__i+1]; \
337 ((fd_set FAR *)(set))->fd_count--; \
344 #define FD_SET(fd, set) do { \
346 SOCKET __sock = _get_osfhandle(fd); \
347 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
348 if (((fd_set FAR *)(set))->fd_array[__i] == (__sock)) { \
352 if (__i == ((fd_set FAR *)(set))->fd_count) { \
353 if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
354 ((fd_set FAR *)(set))->fd_array[__i] = (__sock); \
355 ((fd_set FAR *)(set))->fd_count++; \
361 #define FD_ISSET(fd, set) Win32__WSAFDIsSet(fd, (fd_set FAR *)(set))
370 CRITICAL_SECTION lock;
374 #define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
375 #define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)) )
376 #define _osfile(i) ( _pioinfo(i)->osfile )
377 #define _osfhnd(i) ( _pioinfo(i)->osfhnd )
382 #if defined(_MSC_VER)
389 #if defined(__cplusplus)
391 #if defined(_MSC_VER)
396 #include <functional>
416 ioctl(
int s,
int c,
void * a)
418 if ((::ioctlsocket(_get_osfhandle(s), c, (u_long FAR *)a)) == SOCKET_ERROR) {
419 errno = WSAGetLastError();
424 #define ioctl(s,c,a) Squid::ioctl(s,c,a)
427 ioctlsocket(
int s,
long c, u_long FAR * a)
429 if ((::ioctlsocket(_get_osfhandle(s), c, a)) == SOCKET_ERROR) {
430 errno = WSAGetLastError();
435 #define ioctlsocket(s,c,a) Squid::ioctlsocket(s,c,a)
438 shutdown(
int s,
int h)
440 if (::shutdown(_get_osfhandle(s),h) == SOCKET_ERROR) {
441 errno = WSAGetLastError();
446 #define shutdown(s,h) Squid::shutdown(s,h)
448 #undef WSADuplicateSocket
450 WSADuplicateSocket(
int s, DWORD n, LPWSAPROTOCOL_INFO l)
453 if (::WSADuplicateSocketW(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
455 if (::WSADuplicateSocketA(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
457 errno = WSAGetLastError();
462 #define WSADuplicateSocket(s,n,l) Squid::WSADuplicateSocket(s,n,l)
466 WSASocket(
int a,
int t,
int p, LPWSAPROTOCOL_INFO i, GROUP g, DWORD f)
470 if ((result = ::WSASocketW(a, t, p, i, g, f)) == INVALID_SOCKET) {
472 if ((result = ::WSASocketA(a, t, p, i, g, f)) == INVALID_SOCKET) {
474 if (WSAEMFILE == (errno = WSAGetLastError()))
478 return _open_osfhandle(result, 0);
480 #define WSASocket(a,t,p,i,g,f) Squid::WSASocket(a,t,p,i,g,f)
492 #include <sys/time.h>
494 #if HAVE_SYS_RESOURCE_H
495 #include <sys/resource.h>
497 #define RUSAGE_SELF 0
498 #define RUSAGE_CHILDREN -1
501 struct timeval ru_utime;
502 struct timeval ru_stime;
568 #if !HAVE_GETPAGESIZE
570 size_t getpagesize();
571 #define HAVE_GETPAGESIZE 2
575 SQUIDCEXTERN int Win32__WSAFDIsSet(
int fd, fd_set* set);
585 #define ACL WindowsACL
586 #define _MSWIN_ACL_WAS_NOT_DEFINED 1
589 #if _MSWIN_ACL_WAS_NOT_DEFINED
591 #undef _MSWIN_ACL_WAS_NOT_DEFINED
601 #define LOG_WARNING 4
605 #define LOG_DAEMON (3<<3)
607 void openlog(
const char *ident,
int logopt,
int facility);
608 void syslog(
int priority,
const char *fmt, ...);