aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--util/ChangeLog4
-rw-r--r--util/ttyio.c47
2 files changed, 51 insertions, 0 deletions
diff --git a/util/ChangeLog b/util/ChangeLog
index 4db04dd1b..66d40c20b 100644
--- a/util/ChangeLog
+++ b/util/ChangeLog
@@ -1,3 +1,7 @@
+2003-09-28 Werner Koch <[email protected]>
+
+ * ttyio.c (tty_fprintf): New.
+
2003-09-21 Timo Schulz <[email protected]>
* http.c [WIN32]: Define MB_CUR_MAX.
diff --git a/util/ttyio.c b/util/ttyio.c
index f2463aa87..e68c92b17 100644
--- a/util/ttyio.c
+++ b/util/ttyio.c
@@ -217,6 +217,53 @@ tty_printf( const char *fmt, ... )
}
+/* Same as tty_printf but if FP is not NULL, behave like the standard
+ fprintf. */
+void
+tty_fprintf (FILE *fp, const char *fmt, ... )
+{
+ va_list arg_ptr;
+
+ if (fp)
+ {
+ va_start (arg_ptr, fmt) ;
+ vfprintf (fp, fmt, arg_ptr );
+ va_end (arg_ptr);
+ return;
+ }
+
+ if (no_terminal)
+ return;
+
+ if( !initialized )
+ init_ttyfp();
+
+ va_start( arg_ptr, fmt ) ;
+#ifdef _WIN32
+ {
+ char *buf = NULL;
+ int n;
+ DWORD nwritten;
+
+ n = vasprintf(&buf, fmt, arg_ptr);
+ if( !buf )
+ log_bug("vasprintf() failed\n");
+
+ if( !WriteConsoleA( con.out, buf, n, &nwritten, NULL ) )
+ log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() );
+ if( n != nwritten )
+ log_fatal("WriteConsole failed: %d != %d\n", n, (int)nwritten );
+ last_prompt_len += n;
+ xfree (buf);
+ }
+#else
+ last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ;
+ fflush(ttyfp);
+#endif
+ va_end(arg_ptr);
+}
+
+
/****************
* Print a string, but filter all control characters out.
*/