From bdad3347fb9daaee18e1d318f5ad19871505920d Mon Sep 17 00:00:00 2001 From: Bill Stoddard Date: Tue, 15 Feb 2000 22:51:23 +0000 Subject: [PATCH] ap_dupfile (specifically dup2) is not available in a general form under Windows. So use SetStdHandle directly. A single call to ap_dup2stderr() (or similar) could replace the entire chunk of code in the #ifdef #else #endif block. Ryan didn't want to put this speciality function into APR, but we could put it into os.c if folks are interested. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84624 13f79535-47bb-0310-9956-ffa450edef68 --- server/log.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/server/log.c b/server/log.c index 88b99f32f3..08f6f77e5c 100644 --- a/server/log.c +++ b/server/log.c @@ -255,6 +255,7 @@ static void open_error_log(server_rec *s, ap_context_t *p) void ap_open_logs(server_rec *s_main, ap_context_t *p) { + ap_status_t rc = APR_SUCCESS; server_rec *virt, *q; int replace_stderr; ap_file_t *errfile = NULL; @@ -263,15 +264,26 @@ void ap_open_logs(server_rec *s_main, ap_context_t *p) replace_stderr = 1; if (s_main->error_log) { +#ifdef WIN32 + HANDLE hFile; + ap_get_os_file(&hFile, s_main->error_log); + FlushFileBuffers(hFile); + if (!SetStdHandle(STD_ERROR_HANDLE, hFile)) { + ap_log_error(APLOG_MARK, APLOG_CRIT, GetLastError(), s_main, + "unable to replace stderr with error_log"); + } + replace_stderr = 0; +#else /* replace stderr with this new log */ fflush(stderr); /* ToDo: replace this with an APR call... */ ap_open_stderr(&errfile, p); - if (ap_dupfile(&errfile, s_main->error_log) != APR_SUCCESS) { - ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s_main, + if ((rc = ap_dupfile(&errfile, s_main->error_log)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s_main, "unable to replace stderr with error_log"); } else { replace_stderr = 0; } +#endif } /* note that stderr may still need to be replaced with something * because it points to the old error log, or back to the tty @@ -302,7 +314,7 @@ API_EXPORT(void) ap_error_log2stderr(server_rec *s) { ap_file_t *errfile = NULL; ap_open_stderr(&errfile, s->process->pool); - if ( s->error_log != NULL) { + if (s->error_log != NULL) { ap_dupfile(&(s->error_log), errfile); } } -- 2.40.0