You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by st...@hyperreal.org on 2000/02/09 23:16:35 UTC
cvs commit: apache-2.0/src/os/win32 service.c main_win32.c
stoddard 00/02/09 14:16:32
Modified: src/os/win32 service.c main_win32.c
Log:
Fix some bugs with running Apache as a service
Submitted by: Allan Edwards <ak...@raleigh.ibm.com>
Reviewed by: Bill Stoddard <st...@raleigh.ibm.com>
Revision Changes Path
1.3 +41 -3 apache-2.0/src/os/win32/service.c
Index: service.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/os/win32/service.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- service.c 1999/12/08 22:34:02 1.2
+++ service.c 2000/02/09 22:16:17 1.3
@@ -61,6 +61,7 @@
#include <stdlib.h>
#include <direct.h>
+#define CORE_PRIVATE
#include "httpd.h"
#include "http_conf_globals.h"
#include "http_log.h"
@@ -78,6 +79,7 @@
int exit_status;
SERVICE_STATUS ssStatus;
FILE *logFile;
+ char *service_dir;
} globdat;
static void WINAPI service_main_fn(DWORD, LPTSTR *);
@@ -97,6 +99,7 @@
globdat.main_fn = main_fn;
globdat.stop_event = CreateEvent(NULL, 0, 0, "apache-signal");
globdat.connected = 1;
+ globdat.service_dir = argv[0];
if(!StartServiceCtrlDispatcher(dispatchTable))
{
@@ -122,7 +125,23 @@
void __stdcall service_main_fn(DWORD argc, LPTSTR *argv)
{
+ int i, new_argc;
+ char **new, *server_root, *tmp;
+ char *server_confname = SERVER_CONFIG_FILE;
+ ap_array_header_t *cmdtbl;
+ ap_context_t *pwincmd;
+
+ ap_create_context(&pwincmd, NULL);
+ if (pwincmd == NULL) {
+ exit(0);
+ }
+
ap_server_argv0 = globdat.name = argv[0];
+ cmdtbl = ap_make_array(pwincmd, 1, sizeof(char *));
+
+ server_root = ap_pstrdup(pwincmd, globdat.service_dir);
+ tmp = strrchr(server_root, '\\');
+ *tmp = '\0';
if(!(globdat.hServiceStatus = RegisterServiceCtrlHandler( globdat.name, service_ctrl)))
{
@@ -137,9 +156,28 @@
3000); // wait hint
service_cd();
-// if( service_init() )
- /* Arguments are ok except for \! */
- globdat.exit_status = (*globdat.main_fn)( argc, argv );
+
+ /* Fetch server_conf from the registry
+ * Rebuild argv and argc adding the -d server_root and -f server_conf then
+ * call apache_main
+ */
+ ap_registry_get_service_conf(pwincmd, &server_confname, argv[0]);
+ for (i = 0; i < argc ; i++) {
+ new = (char **) ap_push_array(cmdtbl);
+ *new = argv[i];
+ }
+ /* Add server_confname to the argument list */
+ new = (char **) ap_push_array(cmdtbl);
+ *new = "-f";
+ new = (char **) ap_push_array(cmdtbl);
+ *new = server_confname;
+ new = (char **) ap_push_array(cmdtbl);
+ *new = "-d";
+ new = (char **) ap_push_array(cmdtbl);
+ *new = server_root;
+ new_argc = argc + 4;
+
+ globdat.exit_status = (*globdat.main_fn)( new_argc, (char**) cmdtbl->elts );
ReportStatusToSCMgr(SERVICE_STOPPED, NO_ERROR, 0);
1.6 +1 -21 apache-2.0/src/os/win32/main_win32.c
Index: main_win32.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/os/win32/main_win32.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- main_win32.c 2000/01/23 16:37:46 1.5
+++ main_win32.c 2000/02/09 22:16:24 1.6
@@ -120,27 +120,7 @@
* HKLM\System\CurrentControlSet\Services\[Svc name]\Parameters\ConfPath
*/
if (isProcessService()) {
- /* Fetch server_conf from the registry
- * Rebuild argv and argc adding the -d server_root and -f server_conf then
- * call service_main
- */
- int i;
- ap_registry_get_service_conf(pwincmd, &server_confname, argv[0]);
- for (i = 0; i < argc ; i++) {
- new = (char **) ap_push_array(cmdtbl);
- *new = argv[i];
- }
- /* Add server_confname to the argument list */
- new = (char **) ap_push_array(cmdtbl);
- *new = "-f";
- new = (char **) ap_push_array(cmdtbl);
- *new = server_confname;
- new = (char **) ap_push_array(cmdtbl);
- *new = "-d";
- new = (char **) ap_push_array(cmdtbl);
- *new = server_root;
- argc += 4;
- service_main(apache_main, new_argc, (char**) cmdtbl->elts);
+ service_main(apache_main, argc, argv);
exit(0);
}