diff --git a/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp b/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp index 087e7cb..d2dbb05 100644 --- a/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp +++ b/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp @@ -17,6 +17,7 @@ #include #include "SDMountManager.h" #include "FileName.h" +#include "HeapManager.h" namespace common { @@ -112,7 +113,7 @@ void SetInsertHandler(void (*func)()) s_SdInsertedEventFunc = func; } -SdLogger::SdLogger() : m_TryActivate(false), m_Permitted(false) +SdLogger::SdLogger() : m_BufferSize(0), m_TryActivate(false), m_Permitted(false) { } @@ -143,15 +144,25 @@ void SdLogger::Print(const char* fmt, ::std::va_list arg) { NN_LOG("SD Write Not Permitted\n"); m_Buffer.push_back(std::string(str)); + m_BufferSize += stringSize * sizeof(char); return; } // バッファリング済みならまず吐き出す - for(std::vector::iterator it = m_Buffer.begin(); it != m_Buffer.end(); it++) + if (m_BufferSize != 0) { - PrintCore(it->c_str(), it->size()); + HeapManager heap(m_BufferSize); + void* buf = heap.GetAddr(); + size_t strSize = 0; + for (std::vector::iterator it = m_Buffer.begin(); it != m_Buffer.end(); it++) + { + std::memcpy(reinterpret_cast(buf) + strSize, it->c_str(), it->size() * sizeof(char)); + strSize += it->size(); + } + PrintCore(reinterpret_cast(buf), m_BufferSize); + m_Buffer.clear(); + m_BufferSize = 0; } - m_Buffer.clear(); PrintCore(str, stringSize); diff --git a/trunk/ConsoleDataMigration/sources/common/SdLogger.h b/trunk/ConsoleDataMigration/sources/common/SdLogger.h index 103c5fc..b660b5f 100644 --- a/trunk/ConsoleDataMigration/sources/common/SdLogger.h +++ b/trunk/ConsoleDataMigration/sources/common/SdLogger.h @@ -48,6 +48,7 @@ private: nn::fs::FileOutputStream sd; std::vector m_Buffer; + size_t m_BufferSize; bool m_TryActivate; bool m_Permitted; NN_PADDING2;