From: Amos Jeffries Date: Fri, 3 Oct 2014 13:34:52 +0000 (-0700) Subject: Windows: remove alternative main() X-Git-Tag: SQUID_3_5_0_1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a74922b5dae83c00ec62fa9b3fafad4af432f4f4;p=thirdparty%2Fsquid.git Windows: remove alternative main() As a side effect this causes Windows builds to use the wrapper function for handling exceptions. --- diff --git a/src/WinSvc.cc b/src/WinSvc.cc index e0d92ed5f6..a98481bb1b 100644 --- a/src/WinSvc.cc +++ b/src/WinSvc.cc @@ -891,7 +891,7 @@ WIN32_sendSignal(int WIN32_signal) CloseServiceHandle(schSCManager); } -int main(int argc, char **argv) +int WIN32_StartService(int argc, char **argv) { SERVICE_TABLE_ENTRY DispatchTable[] = { {NULL, SquidWinSvcMain}, @@ -900,35 +900,26 @@ int main(int argc, char **argv) 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(service); - strcat(REGKEY, service); - keys[4] = const_cast(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(service); + strcat(REGKEY, service); + keys[4] = const_cast(service); - return SquidMain(argc, argv); + if (!StartServiceCtrlDispatcher(DispatchTable)) { + fprintf(stderr, "StartServiceCtrlDispatcher error = %ld\n", GetLastError()); + return 1; } return 0; diff --git a/src/WinSvc.h b/src/WinSvc.h index dd65240136..abfee52e19 100644 --- a/src/WinSvc.h +++ b/src/WinSvc.h @@ -10,12 +10,12 @@ #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 */ diff --git a/src/main.cc b/src/main.cc index 152900196a..1dd25a4af8 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1209,19 +1209,29 @@ int SquidMain(int argc, char **argv); 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)