Patchwork win32: Set unbuffered stdout

login
register
mail settings
Submitter Stefan Weil
Date Oct. 7, 2010, 4:55 p.m.
Message ID <1286470548-7518-1-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/67076/
State Accepted
Headers show

Comments

Stefan Weil - Oct. 7, 2010, 4:55 p.m.
Win32 does not support line-buffering, but it allows
unbuffered output.

Unbuffered output is a good approximation. For typical output
statements which usually end with '\n', it's even identical.

Buffered output is unusable for program traces because of
its large delay.

Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 os-win32.c      |    6 ++++++
 qemu-os-win32.h |    3 +--
 2 files changed, 7 insertions(+), 2 deletions(-)
Blue Swirl - Oct. 9, 2010, 9:43 a.m.
Thanks, applied.

On Thu, Oct 7, 2010 at 4:55 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Win32 does not support line-buffering, but it allows
> unbuffered output.
>
> Unbuffered output is a good approximation. For typical output
> statements which usually end with '\n', it's even identical.
>
> Buffered output is unusable for program traces because of
> its large delay.
>
> Cc: Blue Swirl <blauwirbel@gmail.com>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
>  os-win32.c      |    6 ++++++
>  qemu-os-win32.h |    3 +--
>  2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/os-win32.c b/os-win32.c
> index dd46bf4..3c6f50f 100644
> --- a/os-win32.c
> +++ b/os-win32.c
> @@ -221,6 +221,12 @@ char *os_find_datadir(const char *argv0)
>     return NULL;
>  }
>
> +void os_set_line_buffering(void)
> +{
> +    setbuf(stdout, NULL);
> +    setbuf(stderr, NULL);
> +}
> +
>  /*
>  * Parse OS specific command line options.
>  * return 0 if option handled, -1 otherwise
> diff --git a/qemu-os-win32.h b/qemu-os-win32.h
> index 2ff9f45..c63778d 100644
> --- a/qemu-os-win32.h
> +++ b/qemu-os-win32.h
> @@ -45,8 +45,7 @@ void os_host_main_loop_wait(int *timeout);
>  static inline void os_setup_signal_handling(void) {}
>  static inline void os_daemonize(void) {}
>  static inline void os_setup_post(void) {}
> -/* Win32 doesn't support line-buffering and requires size >= 2 */
> -static inline void os_set_line_buffering(void) {}
> +void os_set_line_buffering(void);
>  static inline void os_set_proc_name(const char *dummy) {}
>
>  #if !defined(EPROTONOSUPPORT)
> --
> 1.7.1
>
>

Patch

diff --git a/os-win32.c b/os-win32.c
index dd46bf4..3c6f50f 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -221,6 +221,12 @@  char *os_find_datadir(const char *argv0)
     return NULL;
 }
 
+void os_set_line_buffering(void)
+{
+    setbuf(stdout, NULL);
+    setbuf(stderr, NULL);
+}
+
 /*
  * Parse OS specific command line options.
  * return 0 if option handled, -1 otherwise
diff --git a/qemu-os-win32.h b/qemu-os-win32.h
index 2ff9f45..c63778d 100644
--- a/qemu-os-win32.h
+++ b/qemu-os-win32.h
@@ -45,8 +45,7 @@  void os_host_main_loop_wait(int *timeout);
 static inline void os_setup_signal_handling(void) {}
 static inline void os_daemonize(void) {}
 static inline void os_setup_post(void) {}
-/* Win32 doesn't support line-buffering and requires size >= 2 */
-static inline void os_set_line_buffering(void) {}
+void os_set_line_buffering(void);
 static inline void os_set_proc_name(const char *dummy) {}
 
 #if !defined(EPROTONOSUPPORT)