summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/corefile.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-03-09 18:02:13 +1100
committer Vas Crabb <vas@vastheman.com>2016-03-09 23:04:12 +1100
commit5aea0893a03648efe27025f88d6b98cd48129869 (patch)
treea60611742f99e96efd2bf0106a8aac1356fbdaad /src/lib/util/corefile.cpp
parent262fc7035a2f5328b97adea11cae1a7d58cd8653 (diff)
Use type-safe printf for core_file and emu_file, surprisingly few knock-on effects
Properly fix up a couple of places I64FMT was being used, still more to deal with
Diffstat (limited to 'src/lib/util/corefile.cpp')
-rw-r--r--src/lib/util/corefile.cpp36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/lib/util/corefile.cpp b/src/lib/util/corefile.cpp
index b4a246d81f6..fd98c8be59f 100644
--- a/src/lib/util/corefile.cpp
+++ b/src/lib/util/corefile.cpp
@@ -8,14 +8,15 @@
***************************************************************************/
-#include <assert.h>
-
#include "corefile.h"
+
#include "unicode.h"
+#include "vecstream.h"
+
#include <zlib.h>
#include <algorithm>
-#include <cstdarg>
+#include <cassert>
#include <cstring>
#include <ctype.h>
@@ -157,7 +158,7 @@ public:
virtual std::uint32_t write(const void *buffer, std::uint32_t length) override { return m_file.write(buffer, length); }
virtual int puts(const char *s) override { return m_file.puts(s); }
- virtual int vprintf(const char *fmt, va_list va) override { return m_file.vprintf(fmt, va); }
+ virtual int vprintf(util::format_argument_pack<std::ostream> const &args) override { return m_file.vprintf(args); }
virtual file_error truncate(std::uint64_t offset) override { return m_file.truncate(offset); }
virtual file_error flush() override { return m_file.flush(); }
@@ -184,7 +185,7 @@ public:
virtual int ungetc(int c) override;
virtual char *gets(char *s, int n) override;
virtual int puts(char const *s) override;
- virtual int vprintf(char const *fmt, va_list va) override;
+ virtual int vprintf(util::format_argument_pack<std::ostream> const &args) override;
protected:
core_text_file(std::uint32_t openflags)
@@ -192,6 +193,7 @@ protected:
, m_text_type(text_file_type::OSD)
, m_back_char_head(0)
, m_back_char_tail(0)
+ , m_printf_buffer()
{
}
@@ -208,6 +210,7 @@ private:
char m_back_chars[UTF8_CHAR_MAX]; // buffer to hold characters for ungetc
int m_back_char_head; // head of ungetc buffer
int m_back_char_tail; // tail of ungetc buffer
+ ovectorstream m_printf_buffer; // persistent buffer for formatted output
};
@@ -608,11 +611,12 @@ int core_text_file::puts(char const *s)
vprintf - vfprintf to a text file
-------------------------------------------------*/
-int core_text_file::vprintf(char const *fmt, va_list va)
+int core_text_file::vprintf(util::format_argument_pack<std::ostream> const &args)
{
- char buf[1024];
- vsnprintf(buf, sizeof(buf), fmt, va);
- return puts(buf);
+ m_printf_buffer.seekp(0, ovectorstream::beg);
+ util::stream_format<std::ostream, std::ostream>(m_printf_buffer, args);
+ m_printf_buffer.put('\0');
+ return puts(&m_printf_buffer.vec()[0]);
}
@@ -1249,20 +1253,6 @@ file_error core_file::load(char const *filename, dynamic_buffer &data)
/*-------------------------------------------------
- printf - printf to a text file
--------------------------------------------------*/
-
-int CLIB_DECL core_file::printf(char const *fmt, ...)
-{
- va_list va;
- va_start(va, fmt);
- auto const rc = vprintf(fmt, va);
- va_end(va);
- return rc;
-}
-
-
-/*-------------------------------------------------
protected constructor
-------------------------------------------------*/