CloseServiceHandle(schSCManager);
}
-int main(int argc, char **argv)
+int WIN32_StartService(int argc, char **argv)
{
SERVICE_TABLE_ENTRY DispatchTable[] = {
{NULL, SquidWinSvcMain},
char *c;
char stderr_path[256];
- SetErrorMode(SEM_NOGPFAULTERRORBOX);
- if ((argc == 2) && strstr(argv[1], _WIN_SQUID_SERVICE_OPTION)) {
- strcpy(stderr_path, argv[0]);
- strcat(stderr_path,".log");
- freopen(stderr_path, "w", stderr);
- setmode(fileno(stderr), O_TEXT);
- WIN32_run_mode = _WIN_SQUID_RUN_MODE_SERVICE;
+ strcpy(stderr_path, argv[0]);
+ strcat(stderr_path,".log");
+ freopen(stderr_path, "w", stderr);
+ setmode(fileno(stderr), O_TEXT);
+ WIN32_run_mode = _WIN_SQUID_RUN_MODE_SERVICE;
- if (!(c=strchr(argv[1],':'))) {
- fprintf(stderr, "Bad Service Parameter: %s\n", argv[1]);
- return 1;
- }
-
- service_name = SBuf(c+1);
- const char *service = service_name.c_str();
- DispatchTable[0].lpServiceName = const_cast<char*>(service);
- strcat(REGKEY, service);
- keys[4] = const_cast<char*>(service);
+ if (!(c=strchr(argv[1],':'))) {
+ fprintf(stderr, "Bad Service Parameter: %s\n", argv[1]);
+ return 1;
+ }
- if (!StartServiceCtrlDispatcher(DispatchTable)) {
- fprintf(stderr, "StartServiceCtrlDispatcher error = %ld\n",
- GetLastError());
- return 1;
- }
- } else {
- WIN32_run_mode = _WIN_SQUID_RUN_MODE_INTERACTIVE;
- opt_no_daemon = 1;
+ service_name = SBuf(c+1);
+ const char *service = service_name.c_str();
+ DispatchTable[0].lpServiceName = const_cast<char*>(service);
+ strcat(REGKEY, service);
+ keys[4] = const_cast<char*>(service);
- return SquidMain(argc, argv);
+ if (!StartServiceCtrlDispatcher(DispatchTable)) {
+ fprintf(stderr, "StartServiceCtrlDispatcher error = %ld\n", GetLastError());
+ return 1;
}
return 0;
#define WINSVC_H_
#if _SQUID_WINDOWS_
+int WIN32_StartService(int, char **);
int WIN32_Subsystem_Init(int *, char ***);
void WIN32_sendSignal(int);
void WIN32_SetServiceCommandLine(void);
void WIN32_InstallService(void);
void WIN32_RemoveService(void);
-int SquidMain(int, char **);
#else /* _SQUID_WINDOWS_ */
inline int WIN32_Subsystem_Init(int *foo, char ***bar) {return 0; } /* NOP */
inline void WIN32_sendSignal(int foo) { return; } /* NOP */
static int SquidMainSafe(int argc, char **argv);
#if USE_WIN32_SERVICE
-/* When USE_WIN32_SERVICE is defined, the main function is placed in win32.cc */
+/* Entry point for Windows services */
extern "C" void WINAPI
SquidWinSvcMain(int argc, char **argv)
{
SquidMainSafe(argc, argv);
}
-#else
+#endif
+
int
main(int argc, char **argv)
{
+#if USE_WIN32_SERVICE
+ SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ if ((argc == 2) && strstr(argv[1], _WIN_SQUID_SERVICE_OPTION))
+ return WIN32_StartService(argc, argv);
+ else {
+ WIN32_run_mode = _WIN_SQUID_RUN_MODE_INTERACTIVE;
+ opt_no_daemon = 1;
+ }
+#endif
+
return SquidMainSafe(argc, argv);
}
-#endif
static int
SquidMainSafe(int argc, char **argv)