Hi,

This is the 7th of some splitted native Windows patches grouped by functionality.

Native Windows port enhancements:

- client_side_reply.cc: MS Visual C++ compatibility fix
- comm.cc: ioctl() and fnctl() handling
- defines.h: New Windows specific defines
- globals.h: New Windows specific global variables
- main.cc and tool.cc: Isolated unsupported code functions (signal, fork, child)
- net_db.cc: netdb_state file must be opened in binary mode
- protos.h: New Windows specific function prototypes
- squid.h: min() and max() are already defined in Windows


Regards

Guido


- ======================================================= Serassio Guido Via Albenga, 11/4 10134 - Torino - ITALY E-mail: [EMAIL PROTECTED] WWW: http://www.serassio.it
Index: src/client_side_reply.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side_reply.cc,v
retrieving revision 1.29
diff -u -p -r1.29 client_side_reply.cc
--- src/client_side_reply.cc    16 Mar 2003 03:14:01 -0000      1.29
+++ src/client_side_reply.cc    6 Apr 2003 12:46:18 -0000
@@ -139,7 +139,8 @@ clientReplyContext::operator new (size_t
 void
 clientReplyContext::operator delete (void *address)
 {
-    cbdataFree (address);
+    clientReplyContext * tmp = (clientReplyContext *)address;
+    cbdataFree (tmp);
 }
 
 void
Index: src/comm.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/comm.cc,v
retrieving revision 1.24
diff -u -p -r1.24 comm.cc
--- src/comm.cc 11 Mar 2003 03:16:28 -0000      1.24
+++ src/comm.cc 6 Apr 2003 12:46:19 -0000
@@ -1186,7 +1186,12 @@ comm_openex(int sock_type,
 
     if (port > (u_short) 0)
     {
-        commSetNoLinger(new_socket);
+#ifdef _SQUID_MSWIN_
+
+        if (sock_type != SOCK_DGRAM)
+#endif
+
+            commSetNoLinger(new_socket);
 
         if (opt_reuseaddr)
             commSetReuseAddr(new_socket);
@@ -1952,19 +1957,22 @@ commSetTcpRcvbuf(int fd, int size)
 int
 commSetNonBlocking(int fd)
 {
+#ifndef _SQUID_MSWIN_
     int flags;
     int dummy = 0;
-#ifdef _SQUID_CYGWIN_
+#endif
+#if defined (_SQUID_CYGWIN_) || defined (_SQUID_MSWIN_)
 
     int nonblocking = TRUE;
 
     if (fd_table[fd].type != FD_PIPE) {
         if (ioctl(fd, FIONBIO, &nonblocking) < 0) {
-            debug(50, 0) ("commSetNonBlocking: FD %d: %s %D\n", fd, xstrerror(), 
fd_table[fd].type);
+            debug(50, 0) ("commSetNonBlocking: FD %d: %s %d\n", fd, xstrerror(), 
fd_table[fd].type);
             return COMM_ERROR;
         }
     } else {
 #endif
+#ifndef _SQUID_MSWIN_
 
         if ((flags = fcntl(fd, F_GETFL, dummy)) < 0) {
             debug(50, 0) ("FD %d: fcntl F_GETFL: %s\n", fd, xstrerror());
@@ -1976,7 +1984,8 @@ commSetNonBlocking(int fd)
             return COMM_ERROR;
         }
 
-#ifdef _SQUID_CYGWIN_
+#endif
+#if defined (_SQUID_CYGWIN_) || defined (_SQUID_MSWIN_)
 
     }
 
@@ -1989,6 +1998,11 @@ commSetNonBlocking(int fd)
 int
 commUnsetNonBlocking(int fd)
 {
+#ifdef _SQUID_MSWIN_
+    int nonblocking = FALSE;
+
+    if (ioctlsocket(fd, FIONBIO, (unsigned long *) &nonblocking) < 0) {
+#else
     int flags;
     int dummy = 0;
 
@@ -1998,6 +2012,7 @@ commUnsetNonBlocking(int fd)
     }
 
     if (fcntl(fd, F_SETFL, flags & (~SQUID_NONBLOCK)) < 0) {
+#endif
         debug(50, 0) ("commUnsetNonBlocking: FD %d: %s\n", fd, xstrerror());
         return COMM_ERROR;
     }
Index: src/defines.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/defines.h,v
retrieving revision 1.6
diff -u -p -r1.6 defines.h
--- src/defines.h       23 Jan 2003 03:14:42 -0000      1.6
+++ src/defines.h       6 Apr 2003 12:46:19 -0000
@@ -310,4 +310,20 @@
 #endif
 
 #define        HTTP_REQBUF_SZ  4096
+
+/* CygWin & Windows NT Port */
+#if defined(_SQUID_MSWIN_) || defined(_SQUID_CYGWIN_)
+#define _WIN_SQUID_SERVICE_CONTROL_STOP SERVICE_CONTROL_STOP
+#define _WIN_SQUID_SERVICE_CONTROL_SHUTDOWN SERVICE_CONTROL_SHUTDOWN
+#define _WIN_SQUID_SERVICE_CONTROL_INTERROGATE SERVICE_CONTROL_INTERROGATE
+#define _WIN_SQUID_SERVICE_CONTROL_ROTATE      128
+#define _WIN_SQUID_SERVICE_CONTROL_RECONFIGURE 129
+#define _WIN_SQUID_SERVICE_CONTROL_DEBUG       130
+#define _WIN_SQUID_SERVICE_CONTROL_INTERRUPT   131
+#define _WIN_SQUID_DEFAULT_SERVICE_NAME                "SquidNT"
+#define _WIN_SQUID_SERVICE_OPTION              "--ntservice"
+#define _WIN_SQUID_RUN_MODE_INTERACTIVE                0
+#define _WIN_SQUID_RUN_MODE_SERVICE            1
+#endif
+
 #endif /* SQUID_DEFINES_H */
Index: src/globals.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/globals.h,v
retrieving revision 1.10
diff -u -p -r1.10 globals.h
--- src/globals.h       26 Feb 2003 03:15:46 -0000      1.10
+++ src/globals.h       6 Apr 2003 12:46:20 -0000
@@ -157,9 +157,19 @@ extern ssize_t store_maxobjsize;   /* -1 *
 extern RemovalPolicy *mem_policy;
 extern hash_table *proxy_auth_username_cache;  /* NULL */
 extern int incoming_sockets_accepted;
+#ifdef _SQUID_MSWIN_
+extern unsigned int WIN32_Socks_initialized;   /* 0 */
+#endif
 #if defined(_SQUID_MSWIN_) || defined(_SQUID_CYGWIN_)
 extern unsigned int WIN32_OS_version;  /* 0 */
-extern char *WIN32_OS_string;  /* NULL */
+extern char *WIN32_OS_string;           /* NULL */
+extern char *WIN32_Service_name;        /* NULL */
+extern char *WIN32_Command_Line;        /* NULL */
+extern char *WIN32_Service_Command_Line; /* NULL */
+extern unsigned int WIN32_run_mode;     /* _WIN_SQUID_RUN_MODE_INTERACTIVE */
+#if defined(_SQUID_MSWIN_) && defined(_DEBUG)
+extern int do_debug;                   /* 0 */
+#endif
 #endif
 #if HAVE_SBRK
 extern void *sbrk_start;       /* 0 */
Index: src/main.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/main.cc,v
retrieving revision 1.16
diff -u -p -r1.16 main.cc
--- src/main.cc 26 Feb 2003 03:15:47 -0000      1.16
+++ src/main.cc 6 Apr 2003 12:46:22 -0000
@@ -306,10 +306,12 @@ static void
 rotate_logs(int sig)
 {
     do_rotate = 1;
+#ifndef _SQUID_MSWIN_
 #if !HAVE_SIGACTION
 
     signal(sig, rotate_logs);
 #endif
+#endif
 }
 
 /* ARGSUSED */
@@ -317,16 +319,19 @@ static void
 reconfigure(int sig)
 {
     do_reconfigure = 1;
+#ifndef _SQUID_MSWIN_
 #if !HAVE_SIGACTION
 
     signal(sig, reconfigure);
 #endif
+#endif
 }
 
 void
 shut_down(int sig)
 {
     do_shutdown = sig == SIGINT ? -1 : 1;
+#ifndef _SQUID_MSWIN_
 #ifdef KILL_PARENT_OPT
 
     if (getppid() > 1) {
@@ -343,6 +348,7 @@ shut_down(int sig)
     signal(SIGINT, SIG_DFL);
 
 #endif
+#endif
 }
 
 static void
@@ -1001,6 +1007,7 @@ sendSignal(void)
     exit(0);
 }
 
+#ifndef _SQUID_MSWIN_
 /*
  * This function is run when Squid is in daemon mode, just
  * before the parent forks and starts up the child process.
@@ -1043,6 +1050,8 @@ mainStartScript(const char *prog)
     }
 }
 
+#endif /* _SQUID_MSWIN_ */
+
 static int
 checkRunningPid(void)
 {
@@ -1064,6 +1073,7 @@ checkRunningPid(void)
 static void
 watch_child(char *argv[])
 {
+#ifndef _SQUID_MSWIN_
     char *prog;
     int failcount = 0;
     time_t start;
@@ -1200,6 +1210,7 @@ watch_child(char *argv[])
     }
 
     /* NOTREACHED */
+#endif /* _SQUID_MSWIN_ */
 }
 
 static void
Index: src/net_db.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/net_db.cc,v
retrieving revision 1.8
diff -u -p -r1.8 net_db.cc
--- src/net_db.cc       7 Mar 2003 03:13:28 -0000       1.8
+++ src/net_db.cc       6 Apr 2003 12:46:22 -0000
@@ -528,7 +528,13 @@ netdbReloadState(void)
      * Solaris bugs, its a bad idea.  fopen can fail if more than
      * 256 FDs are open.
      */
+#ifdef _SQUID_MSWIN_
+
+    fd = file_open(path, O_RDONLY | O_BINARY);
+#else
+
     fd = file_open(path, O_RDONLY | O_TEXT);
+#endif
 
     if (fd < 0)
         return;
Index: src/protos.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/protos.h,v
retrieving revision 1.25
diff -u -p -r1.25 protos.h
--- src/protos.h        16 Mar 2003 03:14:04 -0000      1.25
+++ src/protos.h        6 Apr 2003 12:46:26 -0000
@@ -1068,8 +1068,20 @@ SQUIDCEXTERN int varyEvaluateMatch(Store
 /* CygWin & Windows NT Port */
 /* win32.c */
 #if defined(_SQUID_MSWIN_) || defined(_SQUID_CYGWIN_)
+#ifdef USE_WIN32_SERVICE
+SQUIDCEXTERN int WIN32_Subsystem_Init(int *, char ***);
+#else
 SQUIDCEXTERN int WIN32_Subsystem_Init(void);
+#endif
+SQUIDCEXTERN void WIN32_sendSignal(int);
+SQUIDCEXTERN void WIN32_Abort(int);
 SQUIDCEXTERN void WIN32_Exit(void);
+SQUIDCEXTERN void WIN32_SetServiceCommandLine(void);
+SQUIDCEXTERN void WIN32_InstallService(void);
+SQUIDCEXTERN void WIN32_RemoveService(void);
+#endif
+#ifdef _SQUID_MSWIN_
+SQUIDCEXTERN int WIN32_getrusage(int, struct rusage *);
 #endif
 
 /* external_acl.c */
Index: src/squid.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/squid.h,v
retrieving revision 1.8
diff -u -p -r1.8 squid.h
--- src/squid.h 11 Mar 2003 03:16:30 -0000      1.8
+++ src/squid.h 6 Apr 2003 12:46:26 -0000
@@ -368,6 +368,7 @@ extern "C"
 
 template<class A>
 inline A const &
+#ifndef min
 min(A const & lhs, A const & rhs)
 {
     if (rhs < lhs)
@@ -375,8 +376,10 @@ min(A const & lhs, A const & rhs)
 
     return lhs;
 }
+#endif
 
 #define XMIN(x,y) (min (x,y))
+#ifndef max
 template<class A>
 inline A const &
 max(A const & lhs, A const & rhs)
@@ -386,6 +389,7 @@ max(A const & lhs, A const & rhs)
 
     return lhs;
 }
+#endif
 
 #define XMAX(a,b) (max (a,b))
 
Index: src/tools.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tools.cc,v
retrieving revision 1.8
diff -u -p -r1.8 tools.cc
--- src/tools.cc        22 Feb 2003 03:14:36 -0000      1.8
+++ src/tools.cc        6 Apr 2003 12:46:26 -0000
@@ -375,6 +375,11 @@ death(int sig)
 void
 sigusr2_handle(int sig)
 {
+#if defined(_SQUID_MSWIN_) && defined(_DEBUG)
+    do_debug = 1;
+#endif
+#if (defined(_SQUID_MSWIN_) && !defined(_DEBUG)) || !defined(_SQUID_MSWIN_)
+
     static int state = 0;
     /* no debug() here; bad things happen if the signal is delivered during 
_db_print() */
 
@@ -398,6 +403,7 @@ sigusr2_handle(int sig)
         state = 0;
     }
 
+#endif
 #if !HAVE_SIGACTION
     signal(sig, sigusr2_handle);       /* reinstall */
 
@@ -502,6 +508,7 @@ debug_trap(const char *message) {
 
 void
 sig_child(int sig) {
+#ifndef _SQUID_MSWIN_
 #ifdef _SQUID_NEXT_
     union wait status;
 #else
@@ -532,6 +539,7 @@ sig_child(int sig) {
         ;
     signal(sig, sig_child);
 
+#endif
 #endif
 }
 

Reply via email to