]> granicus.if.org Git - apache/commitdiff
ap_dupfile (specifically dup2) is not available in a general form under Windows.
authorBill Stoddard <stoddard@apache.org>
Tue, 15 Feb 2000 22:51:23 +0000 (22:51 +0000)
committerBill Stoddard <stoddard@apache.org>
Tue, 15 Feb 2000 22:51:23 +0000 (22:51 +0000)
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

index 88b99f32f368157fb7fdb7ea845eecebd8d5ac5f..08f6f77e5ce6e801f16bd1b571e957c3869d846d 100644 (file)
@@ -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);
     }
 }