From 575a05c713082ac67582708d4d22b888c88c1061 Mon Sep 17 00:00:00 2001 From: N2614 Date: Fri, 11 Nov 2011 04:38:57 +0000 Subject: [PATCH] =?UTF-8?q?SD=E3=82=AB=E3=83=BC=E3=83=89=E6=9C=AA=E6=8C=BF?= =?UTF-8?q?=E5=85=A5=E6=99=82=E3=81=AE=E3=83=AD=E3=82=B0=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=82=92=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=81=97=E3=81=A6=E3=81=8A=E3=81=84=E3=81=A6=E3=80=81?= =?UTF-8?q?=E6=8C=BF=E5=85=A5=E5=BE=8C=E3=81=AE=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E9=96=A2=E6=95=B0=E5=AE=9F=E8=A1=8C=E6=99=82=E3=81=AB?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=80=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@497 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleBackup/ConsoleBackup.cpp | 1 + .../sources/ConsoleBackup/Controller.cpp | 5 +++ .../sources/ConsoleBackup/Controller.h | 3 ++ .../sources/common/SdLogger.cpp | 35 ++++++++++++++----- .../sources/common/SdLogger.h | 5 +++ 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/ConsoleBackup.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/ConsoleBackup.cpp index 7aa50a4..39406b6 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/ConsoleBackup.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/ConsoleBackup.cpp @@ -135,6 +135,7 @@ extern "C" void nnMain(void) // RenderSystemを作ってからログが出せる common::Logger::InitializeEjectThread(); common::Logger::SetEjectHandler(OnSdEjected); + common::Logger::SetInsertHandler(OnSdInserted); // 起動時に削除 common::Logger::GetLoggerInstance()->ClearSdLog(); diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp index 3e94453..8d5da7d 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp @@ -489,6 +489,11 @@ void OnSdEjected() } } +void OnSdInserted() +{ + common::Logger::GetLoggerInstance()->ClearSdLog(); +} + void InitializeState() { s_BackupState = STARTUP; diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.h b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.h index 0308307..ef10878 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.h @@ -54,6 +54,9 @@ bool IsBackupWarning(); // SDカードが抜き出されたときに実行したい関数 void OnSdEjected(); +// SDカードが挿し込まれたときに実行する処理 +void OnSdInserted(); + // 状態を初期化する void InitializeState(); diff --git a/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp b/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp index 9851395..5ce9d4b 100644 --- a/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp +++ b/trunk/ConsoleDataMigration/sources/common/SdLogger.cpp @@ -82,6 +82,7 @@ void SdmcInsertedEventThreadFunc() { s_SdInsertedEventFunc(); } + SdMountManager::ForceUnmount(); s_SdInsertedEvent.ClearSignal(); s_SdLogger.Inactivate(); } @@ -124,12 +125,6 @@ SdLogger* GetSdInstance() void SdLogger::Print(const char* fmt, ::std::va_list arg) { Activate(); - if(!m_Permitted) - { - NN_LOG("SD Write Not Permitted\n"); - return; - } - nn::Result result; result = SdMountManager::Mount(); if (result.IsFailure()) @@ -143,6 +138,29 @@ void SdLogger::Print(const char* fmt, ::std::va_list arg) stringSize = nn::nstd::TVSNPrintf(str, sizeof(str), fmt, arg); + // 書き込み不可であればバッファリングのみ行う + if(!m_Permitted) + { + NN_LOG("SD Write Not Permitted\n"); + m_Buffer.push_back(std::string(str)); + return; + } + + // バッファリング済みならまず吐き出す + for(std::vector::iterator it = m_Buffer.begin(); it != m_Buffer.end(); it++) + { + PrintCore(it->c_str(), it->size()); + } + m_Buffer.clear(); + + PrintCore(str, stringSize); + + SdMountManager::Unmount(); +} + +nn::Result SdLogger::PrintCore(const char* str, size_t size) +{ + nn::Result result; ::std::wstring log(common::SDMC_ROOT_DIRECTORY_PATH); log += common::LOG_PATHNAME; @@ -168,7 +186,7 @@ void SdLogger::Print(const char* fmt, ::std::va_list arg) if (result.IsSuccess()) { s32 writeSize; - result = sd.TryWrite(&writeSize, str, stringSize, true); + result = sd.TryWrite(&writeSize, str, size, true); if (result.IsSuccess()) { result = sd.TryFlush(); @@ -204,7 +222,8 @@ void SdLogger::Print(const char* fmt, ::std::va_list arg) dir.Finalize(); sd.Finalize(); - SdMountManager::Unmount(); + + return nn::ResultSuccess(); } void SdLogger::Clear() diff --git a/trunk/ConsoleDataMigration/sources/common/SdLogger.h b/trunk/ConsoleDataMigration/sources/common/SdLogger.h index 6d543f2..103c5fc 100644 --- a/trunk/ConsoleDataMigration/sources/common/SdLogger.h +++ b/trunk/ConsoleDataMigration/sources/common/SdLogger.h @@ -17,6 +17,8 @@ #define SDLOGGER_H_ #include +#include +#include namespace common { @@ -42,7 +44,10 @@ public: private: void Activate(); + nn::Result PrintCore(const char* str, size_t size); + nn::fs::FileOutputStream sd; + std::vector m_Buffer; bool m_TryActivate; bool m_Permitted; NN_PADDING2;