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);
       }
   }
  
  
  

Reply via email to