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 
  112 setenv(
const char * 
const name, 
const char * 
const value, 
const int overwrite)
 
  114     if (!overwrite && getenv(name))
 
  122     return (_putenv_s(name, value) == 0 ? 0 : -1);
 
  125 #define setmode _setmode 
  126 #define sleep(t) Sleep((t)*1000) 
  128 #define unlink _unlink 
  131 #define O_RDONLY        _O_RDONLY 
  134 #define O_WRONLY        _O_WRONLY 
  137 #define O_RDWR          _O_RDWR 
  140 #define O_APPEND        _O_APPEND 
  143 #define O_CREAT         _O_CREAT 
  146 #define O_TRUNC         _O_TRUNC 
  149 #define O_EXCL          _O_EXCL 
  152 #define O_TEXT          _O_TEXT 
  155 #define O_BINARY        _O_BINARY 
  158 #define O_RAW           _O_BINARY 
  161 #define O_TEMPORARY     _O_TEMPORARY 
  164 #define O_NOINHERIT     _O_NOINHERIT 
  167 #define O_SEQUENTIAL    _O_SEQUENTIAL 
  170 #define O_RANDOM        _O_RANDOM 
  177 #define S_IFMT   _S_IFMT 
  180 #define S_IFDIR  _S_IFDIR 
  183 #define S_IFCHR  _S_IFCHR 
  186 #define S_IFREG  _S_IFREG 
  189 #define S_IREAD  _S_IREAD 
  192 #define S_IWRITE _S_IWRITE 
  195 #define S_IEXEC  _S_IEXEC 
  219 #if defined(_MSC_VER) 
  220 #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR) 
  231 #if defined(_MSC_VER) 
  253 #if !HAVE_GETTIMEOFDAY 
  260 #define CHANGE_FD_SETSIZE 1 
  261 #if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE 
  262 #define FD_SETSIZE SQUID_MAXFD 
  268 #include <winsock2.h> 
  273 #include <ws2tcpip.h> 
  276 #if (EAI_NODATA == EAI_NONAME) 
  278 #define EAI_NODATA WSANO_DATA 
  281 #if defined(_MSC_VER) 
  283 #pragma warning (push) 
  284 #pragma warning (disable:4142) 
  291 #if defined(_MSC_VER) 
  292 #pragma warning (pop) 
  298 #define EISCONN WSAEISCONN 
  301 #define EINPROGRESS WSAEINPROGRESS 
  304 #define EWOULDBLOCK WSAEWOULDBLOCK 
  307 #define EALREADY WSAEALREADY 
  310 #define ETIMEDOUT WSAETIMEDOUT 
  313 #define ECONNREFUSED WSAECONNREFUSED 
  316 #define ECONNRESET WSAECONNRESET 
  319 #define ENOTCONN WSAENOTCONN 
  322 #define ERESTART WSATRY_AGAIN 
  325 #define EAFNOSUPPORT WSAEAFNOSUPPORT 
  328 #define ENETUNREACH WSAENETUNREACH 
  331 #define ENOTSUP WSAEOPNOTSUPP 
  334 #define ECONNABORTED WSAECONNABORTED 
  338 #define h_errno errno  
  341 #define FD_CLR(fd, set) do { \ 
  343     SOCKET __sock = _get_osfhandle(fd); \ 
  344     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \ 
  345         if (((fd_set FAR *)(set))->fd_array[__i] == __sock) { \ 
  346             while (__i < ((fd_set FAR *)(set))->fd_count-1) { \ 
  347                 ((fd_set FAR *)(set))->fd_array[__i] = \ 
  348                     ((fd_set FAR *)(set))->fd_array[__i+1]; \ 
  351             ((fd_set FAR *)(set))->fd_count--; \ 
  358 #define FD_SET(fd, set) do { \ 
  360     SOCKET __sock = _get_osfhandle(fd); \ 
  361     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \ 
  362         if (((fd_set FAR *)(set))->fd_array[__i] == (__sock)) { \ 
  366     if (__i == ((fd_set FAR *)(set))->fd_count) { \ 
  367         if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \ 
  368             ((fd_set FAR *)(set))->fd_array[__i] = (__sock); \ 
  369             ((fd_set FAR *)(set))->fd_count++; \ 
  375 #define FD_ISSET(fd, set) Win32__WSAFDIsSet(fd, (fd_set FAR *)(set)) 
  384     CRITICAL_SECTION lock;
 
  388 #define IOINFO_ARRAY_ELTS   (1 << IOINFO_L2E) 
  389 #define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)) ) 
  390 #define _osfile(i)  ( _pioinfo(i)->osfile ) 
  391 #define _osfhnd(i)  ( _pioinfo(i)->osfhnd ) 
  396 #if defined(_MSC_VER) 
  403 #if defined(__cplusplus) 
  405 #if defined(_MSC_VER)  
  410 #include <functional> 
  430 ioctl(
int s, 
int c, 
void * a)
 
  432     if ((::ioctlsocket(_get_osfhandle(s), c, (u_long FAR *)a)) == SOCKET_ERROR) {
 
  433         errno = WSAGetLastError();
 
  438 #define ioctl(s,c,a) Squid::ioctl(s,c,a) 
  441 ioctlsocket(
int s, 
long c, u_long FAR * a)
 
  443     if ((::ioctlsocket(_get_osfhandle(s), c, a)) == SOCKET_ERROR) {
 
  444         errno = WSAGetLastError();
 
  449 #define ioctlsocket(s,c,a) Squid::ioctlsocket(s,c,a) 
  452 shutdown(
int s, 
int h)
 
  454     if (::shutdown(_get_osfhandle(s),h) == SOCKET_ERROR) {
 
  455         errno = WSAGetLastError();
 
  460 #define shutdown(s,h) Squid::shutdown(s,h) 
  462 #undef WSADuplicateSocket 
  464 WSADuplicateSocket(
int s, DWORD n, LPWSAPROTOCOL_INFO l)
 
  467     if (::WSADuplicateSocketW(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
 
  469     if (::WSADuplicateSocketA(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
 
  471         errno = WSAGetLastError();
 
  476 #define WSADuplicateSocket(s,n,l) Squid::WSADuplicateSocket(s,n,l) 
  480 WSASocket(
int a, 
int t, 
int p, LPWSAPROTOCOL_INFO i, GROUP g, DWORD f)
 
  484     if ((result = ::WSASocketW(a, t, p, i, g, f)) == INVALID_SOCKET) {
 
  486     if ((result = ::WSASocketA(a, t, p, i, g, f)) == INVALID_SOCKET) {
 
  488         if (WSAEMFILE == (errno = WSAGetLastError()))
 
  492         return _open_osfhandle(result, 0);
 
  494 #define WSASocket(a,t,p,i,g,f) Squid::WSASocket(a,t,p,i,g,f) 
  506 #include <sys/time.h> 
  508 #if HAVE_SYS_RESOURCE_H 
  509 #include <sys/resource.h> 
  511 #define RUSAGE_SELF 0        
  512 #define RUSAGE_CHILDREN -1       
  515     struct timeval ru_utime;    
 
  516     struct timeval ru_stime;    
 
  582 #if !HAVE_GETPAGESIZE 
  584 size_t getpagesize();
 
  585 #define HAVE_GETPAGESIZE 2 
  589 SQUIDCEXTERN int Win32__WSAFDIsSet(
int fd, fd_set* set);
 
  599 #define ACL WindowsACL 
  600 #define _MSWIN_ACL_WAS_NOT_DEFINED 1 
  603 #if _MSWIN_ACL_WAS_NOT_DEFINED 
  605 #undef _MSWIN_ACL_WAS_NOT_DEFINED 
  615 #define LOG_WARNING 4 
  619 #define LOG_DAEMON  (3<<3) 
  621 void openlog(
const char *ident, 
int logopt, 
int facility);
 
  622 void syslog(
int priority, 
const char *fmt, ...);