stoddard 00/02/15 14:51:27
Modified: src/main http_log.c Log: 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. Revision Changes Path 1.29 +15 -3 apache-2.0/src/main/http_log.c Index: http_log.c =================================================================== RCS file: /home/cvs/apache-2.0/src/main/http_log.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- http_log.c 2000/02/15 00:54:06 1.28 +++ http_log.c 2000/02/15 22:51:23 1.29 @@ -255,6 +255,7 @@ 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 @@ 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 @@ 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); } }