diff --git a/code/AssxmlExporter.cpp b/code/AssxmlExporter.cpp index 2e1222fc1..b038ec667 100644 --- a/code/AssxmlExporter.cpp +++ b/code/AssxmlExporter.cpp @@ -65,13 +65,20 @@ namespace Assimp { namespace AssxmlExport { -int ioprintf( IOStream * io, const char * format, ... ) -{ - char sz[4096]; +// ----------------------------------------------------------------------------------- +int ioprintf( IOStream * io, const char *format, ... ) { + if ( nullptr == io ) { + return -1; + } + + static const size_t Size = 4096; + char sz[ Size ]; + size_t len( strlen( format ) ); + ::memset( sz, '\0', Size ); va_list va; va_start( va, format ); - int nSize = ai_snprintf( sz, 4096, format, va ); - ai_assert( nSize < 4096 ); + int nSize = std::vsnprintf( sz, Size-1, format, va ); + ai_assert( nSize < Size ); va_end( va ); io->Write( sz, sizeof(char), nSize ); @@ -175,10 +182,10 @@ static std::string encodeXML(const std::string& data) { // ----------------------------------------------------------------------------------- // Write a text model dump -void WriteDump(const aiScene* scene, IOStream* io, bool shortened) -{ - time_t tt = ::time(NULL); - tm* p = ::gmtime(&tt); +void WriteDump(const aiScene* scene, IOStream* io, bool shortened) { + time_t tt = ::time( NULL ); + tm* p = ::gmtime( &tt ); + ai_assert( nullptr != p ); // write header std::string header( @@ -189,13 +196,14 @@ void WriteDump(const aiScene* scene, IOStream* io, bool shortened) " %s\n" "-->" " \n\n" - "\n" + "\n" ); - ioprintf( io, header.c_str(), - aiGetVersionMajor(), aiGetVersionMinor(), aiGetVersionRevision(), asctime( p ), - scene->mFlags, - 0 /*globalImporter->GetEffectivePostProcessing()*/ ); + const unsigned int major( aiGetVersionMajor() ); + const unsigned int minor( aiGetVersionMinor() ); + const unsigned int rev( aiGetVersionRevision() ); + const char *curtime( asctime( p ) ); + ioprintf( io, header.c_str(), major, minor, rev, curtime, scene->mFlags, 0 ); // write the node graph WriteNode(scene->mRootNode, io, 0);