aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/interface-curses.cpp17
-rw-r--r--src/interface.cpp8
2 files changed, 17 insertions, 8 deletions
diff --git a/src/interface-curses.cpp b/src/interface-curses.cpp
index e46af51..c3216ce 100644
--- a/src/interface-curses.cpp
+++ b/src/interface-curses.cpp
@@ -384,20 +384,21 @@ InterfaceCurses::vmsg_impl(MessageType type, const gchar *fmt, va_list ap)
{
attr_t attr;
+ if (!msg_window) { /* batch mode */
+ stdio_vmsg(type, fmt, ap);
+ return;
+ }
+
/*
* On most platforms we can write to stdout/stderr
* even in interactive mode.
*/
#if defined(XCURSES) || defined(PDCURSES_WIN32A) || \
defined(NCURSES_UNIX) || defined(NCURSES_WIN32)
- stdio_vmsg(type, fmt, ap);
- if (!msg_window) /* batch mode */
- return;
-#else
- if (!msg_window) { /* batch mode */
- stdio_vmsg(type, fmt, ap);
- return;
- }
+ va_list aq;
+ va_copy(aq, ap);
+ stdio_vmsg(type, fmt, aq);
+ va_end(aq);
#endif
switch (type) {
diff --git a/src/interface.cpp b/src/interface.cpp
index 41cc93d..0bcdf28 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -107,6 +107,14 @@ Interface<InterfaceImpl, ViewImpl>::UndoTokenInfoUpdate<Type>::run(void)
interface.info_update(obj);
}
+/**
+ * Print a message to the appropriate stdio streams.
+ *
+ * This method has similar semantics to `vprintf`, i.e.
+ * it leaves `ap` undefined. Therefore to pass the format
+ * string and arguments to another `vprintf`-like function,
+ * you have to copy the arguments via `va_copy`.
+ */
template <class InterfaceImpl, class ViewImpl>
void
Interface<InterfaceImpl, ViewImpl>::stdio_vmsg(MessageType type, const gchar *fmt, va_list ap)