diff --git a/general.h b/general.h index 199b40d33b..86e0cffb1e 100644 --- a/general.h +++ b/general.h @@ -590,6 +590,9 @@ struct global #endif } file_state; + // If this is non-NULL. RARCH_LOG and friends will write to this file. + FILE *log_file; + bool error_in_init; char error_string[1024]; jmp_buf error_sjlj_context; diff --git a/gx/frontend/main.c b/gx/frontend/main.c index 9698edca96..fe80aad746 100644 --- a/gx/frontend/main.c +++ b/gx/frontend/main.c @@ -146,7 +146,7 @@ int gx_logger_net(struct _reent *r, int fd, const char *ptr, size_t len) #elif defined(HAVE_FILE_LOGGER) int gx_logger_file(struct _reent *r, int fd, const char *ptr, size_t len) { - fwrite(ptr, 1, len, log_fp); + fwrite(ptr, 1, len, g_extern.log_file); return len; } #endif @@ -489,7 +489,7 @@ int main(int argc, char *argv[]) dotab_stdout.write_r = gx_logger_net; #elif defined(HAVE_FILE_LOGGER) g_extern.verbose = true; - log_fp = fopen("/retroarch-log.txt", "w"); + g_extern.log_file = fopen("/retroarch-log.txt", "w"); devoptab_list[STD_OUT] = &dotab_stdout; devoptab_list[STD_ERR] = &dotab_stdout; dotab_stdout.write_r = gx_logger_file; @@ -608,7 +608,9 @@ begin_shutdown: #ifdef HAVE_LOGGER logger_shutdown(); #elif defined(HAVE_FILE_LOGGER) - fclose(log_fp); + if (g_extern.log_file) + fclose(g_extern.log_file); + g_extern.log_file = NULL; #endif if(g_extern.console.external_launch.enable) diff --git a/psp/frontend/main.c b/psp/frontend/main.c index d14707c078..0af71bf585 100644 --- a/psp/frontend/main.c +++ b/psp/frontend/main.c @@ -111,7 +111,7 @@ int main(int argc, char *argv[]) g_extern.verbose = true; #ifdef HAVE_FILE_LOGGER - log_fp = fopen("ms0:/retroarch-log.txt", "w"); + g_extern.log_file = fopen("ms0:/retroarch-log.txt", "w"); #endif get_environment_settings(argc, argv); @@ -185,7 +185,9 @@ begin_shutdown: g_extern.verbose = false; #ifdef HAVE_FILE_LOGGER - fclose(log_fp); + if (g_extern.log_file) + fclose(g_extern.log_file); + g_extern.log_file = NULL; #endif sceKernelExitGame(); diff --git a/retroarch.c b/retroarch.c index 6ec8c504ce..40d867ddf8 100644 --- a/retroarch.c +++ b/retroarch.c @@ -56,10 +56,6 @@ #define RARCH_PERFORMANCE_MODE #endif -#ifdef HAVE_FILE_LOGGER -FILE *log_fp; -#endif - // To avoid continous switching if we hold the button down, we require that the button must go from pressed, unpressed back to pressed to be able to toggle between then. static void set_fast_forward_button(bool new_button_state, bool new_hold_button_state) { @@ -2555,11 +2551,6 @@ static void init_state(void) g_extern.video_active = true; g_extern.audio_active = true; g_extern.game_type = RARCH_CART_NORMAL; - -#if defined(HAVE_FILE_LOGGER) && !defined(RARCH_CONSOLE) - snprintf(g_extern.default_log_file, sizeof(g_extern.default_log_file), "/retroarch-log.txt"); - log_fp = fopen(g_extern.default_log_file, "w"); -#endif } void rarch_main_clear_state(void) @@ -2568,6 +2559,10 @@ void rarch_main_clear_state(void) free(g_extern.system.environment); free(g_extern.system.environment_split); + + if (g_extern.log_file) + fclose(g_extern.log_file); + memset(&g_extern, 0, sizeof(g_extern)); init_state(); @@ -2873,10 +2868,6 @@ int rarch_main(int argc, char *argv[]) #endif rarch_main_clear_state(); - -#if defined(HAVE_FILE_LOGGER) && !defined(RARCH_CONSOLE) - fclose(log_fp); -#endif return 0; } diff --git a/retroarch_logger.h b/retroarch_logger.h index 0b121cfd02..3b60cb944f 100644 --- a/retroarch_logger.h +++ b/retroarch_logger.h @@ -21,12 +21,7 @@ #include #endif -#ifdef HAVE_FILE_LOGGER -extern FILE * log_fp; -#define STDERR_OUT (log_fp) -#else -#define STDERR_OUT (stderr) -#endif +#define LOG_FILE (g_extern.log_file ? g_extern.log_file : stderr) #if defined(RARCH_CONSOLE) && (defined(HAVE_LOGGER) || defined(_XBOX1)) #include @@ -34,18 +29,18 @@ extern FILE * log_fp; #ifndef RARCH_LOG #if defined(ANDROID) -#define RARCH_LOG(...) __android_log_print(ANDROID_LOG_INFO,"RetroArch: ",__VA_ARGS__) +#define RARCH_LOG(...) __android_log_print(ANDROID_LOG_INFO, "RetroArch: ", __VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_LOG(...) do { \ - fprintf(STDERR_OUT, "RetroArch Salamander: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch Salamander: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_LOG(...) do { \ if (g_extern.verbose) \ { \ - fprintf(STDERR_OUT, "RetroArch: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } \ } while (0) #endif @@ -56,15 +51,15 @@ extern FILE * log_fp; #define RARCH_LOG_OUTPUT(...) __android_log_print(ANDROID_LOG_INFO,"stderr: ",__VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_LOG_OUTPUT(...) do { \ - fprintf(STDERR_OUT, "stderr: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "stderr: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_LOG_OUTPUT(...) do { \ if (g_extern.verbose) \ { \ - fprintf(STDERR_OUT, __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, __VA_ARGS__); \ + fflush(LOG_FILE); \ } \ } while (0) #endif @@ -72,64 +67,64 @@ extern FILE * log_fp; #ifndef RARCH_ERR #if defined(ANDROID) -#define RARCH_ERR(...) __android_log_print(ANDROID_LOG_INFO, "RetroArch [ERROR] :: ",__VA_ARGS__) +#define RARCH_ERR(...) __android_log_print(ANDROID_LOG_INFO, "RetroArch [ERROR] :: ", __VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_ERR(...) do { \ - fprintf(STDERR_OUT, "RetroArch Salamander [ERROR] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch Salamander [ERROR] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_ERR(...) do { \ - fprintf(STDERR_OUT, "RetroArch [ERROR] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch [ERROR] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #endif #endif #ifndef RARCH_ERR_OUTPUT #if defined(ANDROID) -#define RARCH_ERR_OUTPUT(...) __android_log_print(ANDROID_LOG_INFO, "stderr [ERROR] :: ",__VA_ARGS__) +#define RARCH_ERR_OUTPUT(...) __android_log_print(ANDROID_LOG_INFO, "stderr [ERROR] :: ", __VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_ERR_OUTPUT(...) do { \ - fprintf(STDERR_OUT, "stderr [ERROR] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "stderr [ERROR] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_ERR_OUTPUT(...) do { \ - fprintf(STDERR_OUT, "stderr [ERROR] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "stderr [ERROR] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #endif #endif #ifndef RARCH_WARN #if defined(ANDROID) -#define RARCH_WARN(...) __android_log_print(ANDROID_LOG_INFO, "RetroArch [WARN] :: ",__VA_ARGS__) +#define RARCH_WARN(...) __android_log_print(ANDROID_LOG_INFO, "RetroArch [WARN] :: ", __VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_WARN(...) do { \ - fprintf(STDERR_OUT, "RetroArch Salamander [WARN] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch Salamander [WARN] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_WARN(...) do { \ - fprintf(STDERR_OUT, "RetroArch [WARN] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "RetroArch [WARN] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #endif #endif #ifndef RARCH_WARN #if defined(ANDROID) -#define RARCH_WARN_OUTPUT(...) __android_log_print(ANDROID_LOG_INFO, "stderr [WARN] :: ",__VA_ARGS__) +#define RARCH_WARN_OUTPUT(...) __android_log_print(ANDROID_LOG_INFO, "stderr [WARN] :: ", __VA_ARGS__) #elif defined(IS_SALAMANDER) #define RARCH_WARN_OUTPUT(...) do { \ - fprintf(STDERR_OUT, "stderr [WARN] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "stderr [WARN] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #else #define RARCH_WARN_OUTPUT(...) do { \ - fprintf(STDERR_OUT, "stderr [WARN] :: " __VA_ARGS__); \ - fflush(STDERR_OUT); \ + fprintf(LOG_FILE, "stderr [WARN] :: " __VA_ARGS__); \ + fflush(LOG_FILE); \ } while (0) #endif #endif