summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/stuff.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/stuff.cc')
-rw-r--r--crawl-ref/source/stuff.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/crawl-ref/source/stuff.cc b/crawl-ref/source/stuff.cc
index 9ac888df8b..e4c6c64d43 100644
--- a/crawl-ref/source/stuff.cc
+++ b/crawl-ref/source/stuff.cc
@@ -463,28 +463,51 @@ bool see_grid(unsigned char grx, unsigned char gry)
return false;
} // end see_grid()
-void io_cleanup()
+static bool io_inited = false;
+void cio_init()
{
#ifdef UNIX
+ unixcurses_startup();
+#endif
+
+#ifdef WIN32CONSOLE
+ init_libw32c();
+#endif
+
+#ifdef DOS
+ init_libdos();
+#endif
+
+ io_inited = true;
+}
+
+void cio_cleanup()
+{
+ if (!io_inited)
+ return;
+
+#ifdef UNIX
unixcurses_shutdown();
#endif
#ifdef WIN32CONSOLE
deinit_libw32c();
#endif
+
+ io_inited = false;
}
void end(int exit_code, bool print_error, const char *format, ...)
{
std::string error = print_error? strerror(errno) : "";
- io_cleanup();
+ cio_cleanup();
if (format)
{
va_list arg;
va_start(arg, format);
- char buffer[500];
+ char buffer[100];
vsnprintf(buffer, sizeof buffer, format, arg);
va_end(arg);