From 95ac019c0063b6e281fe5eeefb7fe19b9b7be9b0 Mon Sep 17 00:00:00 2001 From: spog Date: Sun, 9 Apr 2006 18:16:41 +0000 Subject: [PATCH] limited win32 stack-trace size git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@46 8a3a26a2-13c4-0310-b231-cf6edde360e5 --- contrib/prtview/prtview.cpp | 5 +---- include/modulesystem.h | 11 ++++++++++ plugins/archivepak/plugin.cpp | 5 +---- plugins/archivewad/plugin.cpp | 5 +---- plugins/archivezip/plugin.cpp | 5 +---- plugins/entity/plugin.cpp | 5 +---- plugins/image/image.cpp | 5 +---- plugins/imagehl/imagehl.cpp | 5 +---- plugins/imagepng/plugin.cpp | 5 +---- plugins/imageq2/imageq2.cpp | 5 +---- plugins/mapq3/plugin.cpp | 5 +---- plugins/mapxml/plugin.cpp | 5 +---- plugins/md3model/plugin.cpp | 5 +---- plugins/model/plugin.cpp | 5 +---- plugins/sample/sample.cpp | 5 +---- plugins/shaders/plugin.cpp | 5 +---- plugins/vfspk3/vfspk3.cpp | 5 +---- radiant/console.cpp | 2 +- radiant/main.cpp | 38 ++++++++++++++++++++++++++++++++++- 19 files changed, 65 insertions(+), 66 deletions(-) diff --git a/contrib/prtview/prtview.cpp b/contrib/prtview/prtview.cpp index 2d4cebb0..34c6e70f 100644 --- a/contrib/prtview/prtview.cpp +++ b/contrib/prtview/prtview.cpp @@ -320,10 +320,7 @@ SingletonPrtViewPluginModule g_PrtViewPluginModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_PrtViewPluginModule.selfRegister(); } diff --git a/include/modulesystem.h b/include/modulesystem.h index 7cb6d3f5..4c5495d2 100644 --- a/include/modulesystem.h +++ b/include/modulesystem.h @@ -23,6 +23,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define INCLUDED_MODULESYSTEM_H #include "generic/static.h" +#include "debugging/debugging.h" #if defined(WIN32) #define RADIANT_DLLEXPORT __stdcall @@ -94,6 +95,16 @@ inline ModuleServer& globalModuleServer() } +inline void initialiseModule(ModuleServer& server) +{ + GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); + GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); + GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); + GlobalModuleServer::instance().set(server); +} + + + template class Modules { diff --git a/plugins/archivepak/plugin.cpp b/plugins/archivepak/plugin.cpp index c141523f..d73b0ef5 100644 --- a/plugins/archivepak/plugin.cpp +++ b/plugins/archivepak/plugin.cpp @@ -52,10 +52,7 @@ ArchivePakModule g_ArchivePakModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ArchivePakModule.selfRegister(); } diff --git a/plugins/archivewad/plugin.cpp b/plugins/archivewad/plugin.cpp index cf5f6919..a27c4599 100644 --- a/plugins/archivewad/plugin.cpp +++ b/plugins/archivewad/plugin.cpp @@ -52,10 +52,7 @@ ArchiveWadModule g_ArchiveWadModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ArchiveWadModule.selfRegister(); } diff --git a/plugins/archivezip/plugin.cpp b/plugins/archivezip/plugin.cpp index 59e2511e..82a5a2ab 100644 --- a/plugins/archivezip/plugin.cpp +++ b/plugins/archivezip/plugin.cpp @@ -75,10 +75,7 @@ ArchivePK4Module g_ArchivePK4Module; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ArchiveZipModule.selfRegister(); g_ArchivePK4Module.selfRegister(); diff --git a/plugins/entity/plugin.cpp b/plugins/entity/plugin.cpp index 947befb3..58ace895 100644 --- a/plugins/entity/plugin.cpp +++ b/plugins/entity/plugin.cpp @@ -151,10 +151,7 @@ EntityDoom3Module g_EntityDoom3Module; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_EntityQ3Module.selfRegister(); g_EntityWolfModule.selfRegister(); diff --git a/plugins/image/image.cpp b/plugins/image/image.cpp index 2a4afb23..4436dde4 100644 --- a/plugins/image/image.cpp +++ b/plugins/image/image.cpp @@ -149,10 +149,7 @@ ImageDDSModule g_ImageDDSModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ImageTGAModule.selfRegister(); g_ImageJPGModule.selfRegister(); diff --git a/plugins/imagehl/imagehl.cpp b/plugins/imagehl/imagehl.cpp index 7cbe07a3..af051044 100644 --- a/plugins/imagehl/imagehl.cpp +++ b/plugins/imagehl/imagehl.cpp @@ -105,10 +105,7 @@ ImageSpriteModule g_ImageSpriteModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ImageHLWModule.selfRegister(); g_ImageMipModule.selfRegister(); diff --git a/plugins/imagepng/plugin.cpp b/plugins/imagepng/plugin.cpp index 1247ba9b..426c4f06 100644 --- a/plugins/imagepng/plugin.cpp +++ b/plugins/imagepng/plugin.cpp @@ -198,10 +198,7 @@ ImagePNGModule g_ImagePNGModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ImagePNGModule.selfRegister(); } diff --git a/plugins/imageq2/imageq2.cpp b/plugins/imageq2/imageq2.cpp index 338b5e21..dfd64467 100644 --- a/plugins/imageq2/imageq2.cpp +++ b/plugins/imageq2/imageq2.cpp @@ -106,10 +106,7 @@ ImageM32Module g_ImageM32Module; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ImageWalModule.selfRegister(); g_ImageM8Module.selfRegister(); diff --git a/plugins/mapq3/plugin.cpp b/plugins/mapq3/plugin.cpp index 8e031edb..a11dc4a9 100644 --- a/plugins/mapq3/plugin.cpp +++ b/plugins/mapq3/plugin.cpp @@ -646,10 +646,7 @@ MapVMFModule g_MapVMFModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_MapDoom3Module.selfRegister(); g_MapQuake4Module.selfRegister(); diff --git a/plugins/mapxml/plugin.cpp b/plugins/mapxml/plugin.cpp index 083cef8f..6bb09be8 100644 --- a/plugins/mapxml/plugin.cpp +++ b/plugins/mapxml/plugin.cpp @@ -84,10 +84,7 @@ MapXMLModule g_MapXMLModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_MapXMLModule.selfRegister(); } diff --git a/plugins/md3model/plugin.cpp b/plugins/md3model/plugin.cpp index 42c2a92e..dbdff935 100644 --- a/plugins/md3model/plugin.cpp +++ b/plugins/md3model/plugin.cpp @@ -236,10 +236,7 @@ ModelMD5Module g_ModelMD5Module; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ModelMD3Module.selfRegister(); g_ModelMD2Module.selfRegister(); diff --git a/plugins/model/plugin.cpp b/plugins/model/plugin.cpp index 278388fd..e032e398 100644 --- a/plugins/model/plugin.cpp +++ b/plugins/model/plugin.cpp @@ -169,10 +169,7 @@ PicoModelModules g_PicoModelModules; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); pico_initialise(); diff --git a/plugins/sample/sample.cpp b/plugins/sample/sample.cpp index cec08ddd..80900b10 100644 --- a/plugins/sample/sample.cpp +++ b/plugins/sample/sample.cpp @@ -89,10 +89,7 @@ SingletonSamplePluginModule g_SamplePluginModule; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_SamplePluginModule.selfRegister(); } diff --git a/plugins/shaders/plugin.cpp b/plugins/shaders/plugin.cpp index 6732ca63..6ef23c37 100644 --- a/plugins/shaders/plugin.cpp +++ b/plugins/shaders/plugin.cpp @@ -149,10 +149,7 @@ ShadersQuake4Module g_ShadersQuake4Module; extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_ShadersQ3Module.selfRegister(); g_ShadersDoom3Module.selfRegister(); diff --git a/plugins/vfspk3/vfspk3.cpp b/plugins/vfspk3/vfspk3.cpp index ed250e39..e7fca372 100644 --- a/plugins/vfspk3/vfspk3.cpp +++ b/plugins/vfspk3/vfspk3.cpp @@ -79,10 +79,7 @@ ArchiveModules& FileSystemQ3API_getArchiveModules() extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) { - GlobalErrorStream::instance().setOutputStream(server.getErrorStream()); - GlobalOutputStream::instance().setOutputStream(server.getOutputStream()); - GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler()); - GlobalModuleServer::instance().set(server); + initialiseModule(server); g_FileSystemQ3Module.selfRegister(); } diff --git a/radiant/console.cpp b/radiant/console.cpp index f47c66da..f48a9877 100644 --- a/radiant/console.cpp +++ b/radiant/console.cpp @@ -155,7 +155,7 @@ public: std::size_t Sys_Print(int level, const char* buf, std::size_t length) { - bool contains_newline = strchr(buf, '\n') != 0; + bool contains_newline = std::find(buf, buf+length, '\n') != buf+length; if(level == SYS_ERR) { diff --git a/radiant/main.cpp b/radiant/main.cpp index dc764663..b66728a5 100644 --- a/radiant/main.cpp +++ b/radiant/main.cpp @@ -232,6 +232,41 @@ public: } }; +class LineLimitedTextOutputStream : public TextOutputStream +{ + TextOutputStream& outputStream; + std::size_t count; +public: + LineLimitedTextOutputStream(TextOutputStream& outputStream, std::size_t count) + : outputStream(outputStream), count(count) + { + } + std::size_t write(const char* buffer, std::size_t length) + { + if(count != 0) + { + const char* p = buffer; + const char* end = buffer+length; + for(;;) + { + p = std::find(p, end, '\n'); + if(p == end) + { + break; + } + ++p; + if(--count == 0) + { + length = p - buffer; + break; + } + } + outputStream.write(buffer, length); + } + return length; + } +}; + class PopupDebugMessageHandler : public DebugMessageHandler { StringOutputStream m_buffer; @@ -248,7 +283,8 @@ public: bool handleMessage() { getOutputStream() << "----------------\n"; - write_stack_trace(getOutputStream()); + LineLimitedTextOutputStream outputStream(getOutputStream(), 24); + write_stack_trace(outputStream); getOutputStream() << "----------------\n"; if(!m_lock.locked()) { -- 2.39.2