mirror of
https://github.com/DarkMatterCore/nxdumptool.git
synced 2024-11-22 18:26:39 +00:00
Store last log message using a small stack buffer.
Will be used to print error messages down the road.
This commit is contained in:
parent
43f744326f
commit
8be5460229
10 changed files with 71 additions and 39 deletions
|
@ -757,16 +757,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleUserApplicationData user_app_data = {0};
|
||||
|
|
|
@ -915,17 +915,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
consoleRefresh();
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleUserApplicationData user_app_data = {0};
|
||||
|
|
|
@ -332,16 +332,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleUserApplicationData user_app_data = {0};
|
||||
|
|
|
@ -229,16 +229,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleInfo *cur_title_info = NULL;
|
||||
|
|
|
@ -192,16 +192,14 @@ int main(int argc, char *argv[])
|
|||
Menu *cur_menu = &g_rootMenu;
|
||||
u32 element_count = menuGetElementCount(cur_menu), page_size = 30;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
while(appletMainLoop())
|
||||
{
|
||||
consoleClear();
|
||||
|
|
|
@ -311,16 +311,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleUserApplicationData user_app_data = {0};
|
||||
|
|
|
@ -57,16 +57,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
int ret = 0;
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
consolePrint("initializing...\n");
|
||||
|
||||
if (!utilsInitializeResources())
|
||||
{
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
u32 app_count = 0;
|
||||
TitleApplicationMetadata **app_metadata = NULL;
|
||||
TitleUserApplicationData user_app_data = {0};
|
||||
|
|
40
source/log.c
40
source/log.c
|
@ -21,13 +21,15 @@
|
|||
#include "utils.h"
|
||||
|
||||
#define LOG_FILE_NAME APP_TITLE ".log"
|
||||
#define LOG_BUF_SIZE 0x400000 /* 4 MiB. */
|
||||
#define LOG_FORCE_FLUSH 0 /* Forces a log buffer flush each time the logfile is written to. */
|
||||
#define LOG_BUF_SIZE 0x400000 /* 4 MiB. */
|
||||
#define LOG_FORCE_FLUSH 0 /* Forces a log buffer flush each time the logfile is written to. */
|
||||
|
||||
/* Global variables. */
|
||||
|
||||
static Mutex g_logMutex = 0;
|
||||
|
||||
static char g_lastLogMsg[0x100] = {0};
|
||||
|
||||
static FsFile g_logFile = {0};
|
||||
static s64 g_logFileOffset = 0;
|
||||
|
||||
|
@ -41,7 +43,7 @@ static const char *g_logLineBreak = "\r\n";
|
|||
/* Function prototypes. */
|
||||
|
||||
static void _logWriteStringToLogFile(const char *src, bool lock);
|
||||
static void _logWriteFormattedStringToLogFile(const char *func_name, const char *fmt, va_list args, bool lock);
|
||||
static void _logWriteFormattedStringToLogFile(bool save, const char *func_name, const char *fmt, va_list args, bool lock);
|
||||
|
||||
static void _logFlushLogFile(bool lock);
|
||||
|
||||
|
@ -57,7 +59,7 @@ void logWriteFormattedStringToLogFile(const char *func_name, const char *fmt, ..
|
|||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
_logWriteFormattedStringToLogFile(func_name, fmt, args, true);
|
||||
_logWriteFormattedStringToLogFile(true, func_name, fmt, args, true);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
@ -144,7 +146,7 @@ void logWriteBinaryDataToLogFile(const void *data, size_t data_size, const char
|
|||
|
||||
/* Write formatted string. */
|
||||
va_start(args, fmt);
|
||||
_logWriteFormattedStringToLogFile(func_name, fmt, args, false);
|
||||
_logWriteFormattedStringToLogFile(false, func_name, fmt, args, false);
|
||||
va_end(args);
|
||||
|
||||
/* Write hex string representation. */
|
||||
|
@ -190,6 +192,13 @@ void logCloseLogFile(void)
|
|||
mutexUnlock(&g_logMutex);
|
||||
}
|
||||
|
||||
void logGetLastMessage(char *dst, size_t dst_size)
|
||||
{
|
||||
mutexLock(&g_logMutex);
|
||||
if (dst && dst_size > 1 && *g_lastLogMsg) snprintf(dst, dst_size, "%s", g_lastLogMsg);
|
||||
mutexUnlock(&g_logMutex);
|
||||
}
|
||||
|
||||
void logControlMutex(bool lock)
|
||||
{
|
||||
if (lock)
|
||||
|
@ -258,7 +267,7 @@ end:
|
|||
if (lock) mutexUnlock(&g_logMutex);
|
||||
}
|
||||
|
||||
static void _logWriteFormattedStringToLogFile(const char *func_name, const char *fmt, va_list args, bool lock)
|
||||
static void _logWriteFormattedStringToLogFile(bool save, const char *func_name, const char *fmt, va_list args, bool lock)
|
||||
{
|
||||
if (!func_name || !*func_name || !fmt || !*fmt) return;
|
||||
|
||||
|
@ -281,9 +290,6 @@ static void _logWriteFormattedStringToLogFile(const char *func_name, const char
|
|||
ts->tm_year += 1900;
|
||||
ts->tm_mon++;
|
||||
|
||||
/* Make sure we have allocated memory for the log buffer and opened the logfile. */
|
||||
if (!logAllocateLogBuffer() || !logOpenLogFile()) goto end;
|
||||
|
||||
/* Get formatted string length. */
|
||||
str1_len = snprintf(NULL, 0, g_logStrFormat, ts->tm_year, ts->tm_mon, ts->tm_mday, ts->tm_hour, ts->tm_min, ts->tm_sec, now.tv_nsec, func_name);
|
||||
if (str1_len <= 0) goto end;
|
||||
|
@ -293,6 +299,22 @@ static void _logWriteFormattedStringToLogFile(const char *func_name, const char
|
|||
|
||||
log_str_len = (size_t)(str1_len + str2_len + 2);
|
||||
|
||||
/* Save log message to our global stack buffer (if needed). */
|
||||
if (save)
|
||||
{
|
||||
tmp_len = (strlen(func_name) + 2);
|
||||
if ((tmp_len + (size_t)str2_len) < sizeof(g_lastLogMsg))
|
||||
{
|
||||
sprintf(g_lastLogMsg, "%s: ", func_name);
|
||||
vsprintf(g_lastLogMsg + tmp_len, fmt, args);
|
||||
}
|
||||
|
||||
tmp_len = 0;
|
||||
}
|
||||
|
||||
/* Make sure we have allocated memory for the log buffer and opened the logfile. */
|
||||
if (!logAllocateLogBuffer() || !logOpenLogFile()) goto end;
|
||||
|
||||
/* Check if the formatted string length is less than the log buffer size. */
|
||||
if (log_str_len < LOG_BUF_SIZE)
|
||||
{
|
||||
|
|
|
@ -47,6 +47,9 @@ void logFlushLogFile(void);
|
|||
/// Closes the logfile.
|
||||
void logCloseLogFile(void);
|
||||
|
||||
/// Stores the last log message in the provided buffer.
|
||||
void logGetLastMessage(char *dst, size_t dst_size);
|
||||
|
||||
/// (Un)locks the log mutex. Can be used to block other threads and prevent them from writing data to the logfile.
|
||||
/// Use with caution.
|
||||
void logControlMutex(bool lock);
|
||||
|
|
|
@ -69,6 +69,8 @@ static void utilsUnmountEmmcBisSystemPartitionStorage(void);
|
|||
|
||||
static void utilsOverclockSystemAppletHook(AppletHookType hook, void *param);
|
||||
|
||||
static void utilsPrintConsoleError(void);
|
||||
|
||||
bool utilsInitializeResources(void)
|
||||
{
|
||||
mutexLock(&g_resourcesMutex);
|
||||
|
@ -194,6 +196,8 @@ bool utilsInitializeResources(void)
|
|||
end:
|
||||
mutexUnlock(&g_resourcesMutex);
|
||||
|
||||
if (!ret) utilsPrintConsoleError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -750,6 +754,24 @@ static void utilsOverclockSystemAppletHook(AppletHookType hook, void *param)
|
|||
|
||||
if (hook != AppletHookType_OnOperationMode && hook != AppletHookType_OnPerformanceMode) return;
|
||||
|
||||
/* To do: read config here to actually know the value to use with utilsOverclockSystem. */
|
||||
/* TO DO: read config here to actually know the value to use with utilsOverclockSystem. */
|
||||
utilsOverclockSystem(false);
|
||||
}
|
||||
|
||||
static void utilsPrintConsoleError(void)
|
||||
{
|
||||
char msg[0x100] = {0};
|
||||
logGetLastMessage(msg, sizeof(msg));
|
||||
|
||||
consoleInit(NULL);
|
||||
|
||||
printf("An error occurred while initializing resources.\n\n");
|
||||
if (*msg) printf("%s\n\n", msg);
|
||||
printf("For more information, please check the logfile. Press any button to exit.");
|
||||
|
||||
consoleUpdate(NULL);
|
||||
|
||||
utilsWaitForButtonPress(0);
|
||||
|
||||
consoleExit(NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue