http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.01.tar.gz
[xscreensaver] / driver / stderr.c
index d4361df8d5e3a4f72732e3f0282ad5b141faa3f4..5f337c0059c059ed147db3ab6a2d575b583bd6d0 100644 (file)
@@ -1,5 +1,5 @@
 /* stderr.c --- capturing stdout/stderr output onto the screensaver window.
- * xscreensaver, Copyright (c) 1991-1998 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-1998, 2001 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -478,6 +478,9 @@ initialize_stderr (saver_info *si)
 void
 shutdown_stderr (saver_info *si)
 {
+  fflush (stdout);
+  fflush (stderr);
+
   if (!real_stderr || stderr_stdout_read_fd < 0)
     return;
 
@@ -489,7 +492,16 @@ shutdown_stderr (saver_info *si)
     {
       *stderr_tail = 0;
       fprintf (real_stderr, "%s", stderr_buffer);
-      fflush (real_stderr);
       stderr_tail = stderr_buffer;
     }
+
+  if (real_stdout) fflush (real_stdout);
+  if (real_stderr) fflush (real_stderr);
+
+  if (stdout != real_stdout)
+    dup2 (fileno(real_stdout), fileno(stdout));
+  if (stderr != real_stderr)
+    dup2 (fileno(real_stderr), fileno(stderr));
+
+  stderr_stdout_read_fd = -1;
 }