From 308363c47ad7809356e1c7e3c2583b85ddf1ddf0 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Mon, 8 Apr 2019 23:56:59 -0400 Subject: [PATCH] move fatal_printf logging to glog.c file with other logging that does the same thing. --- src/glog.c | 49 +++++++++++++++++++++++++++-- src/glog.h | 4 +++ src/protos.h | 4 --- src/scc_socket_driver.c | 2 ++ src/sim65816.c | 70 ----------------------------------------- 5 files changed, 53 insertions(+), 76 deletions(-) diff --git a/src/glog.c b/src/glog.c index 55f7f01..856fca6 100644 --- a/src/glog.c +++ b/src/glog.c @@ -4,12 +4,20 @@ See COPYRIGHT.txt for Copyright information See LICENSE.txt for license (GPL v2) */ -#include -#include #include +#include +#include +#include +#include #include "glog.h" + +#define MAX_FATAL_LOGS 20 + +int g_fatal_log = 0; +char *g_fatal_log_strs[MAX_FATAL_LOGS]; + int glog(const char *s) { time_t timer; char buffer[26]; @@ -45,3 +53,40 @@ int glogf(const char *fmt, ...) { fputc('\n', stdout); return 0; } + + +int fatal_printf(const char *fmt, ...) { + static char buffer[4096]; + va_list ap; + int ret; + + va_start(ap, fmt); + + if(g_fatal_log < 0) { + g_fatal_log = 0; + } + + ret = vsnprintf(buffer, sizeof(buffer), fmt, ap); + + glog(buffer); + + if (g_fatal_log < MAX_FATAL_LOGS) { + g_fatal_log_strs[g_fatal_log++] = strdup(buffer); + } + + + va_end(ap); + return ret; +} + + + +void clear_fatal_logs() { + int i; + + for(i = 0; i < g_fatal_log; i++) { + free(g_fatal_log_strs[i]); + g_fatal_log_strs[i] = 0; + } + g_fatal_log = 0; +} \ No newline at end of file diff --git a/src/glog.h b/src/glog.h index db005c3..479403b 100644 --- a/src/glog.h +++ b/src/glog.h @@ -3,6 +3,10 @@ extern "C" { #endif int glog(const char *s); int glogf(const char *s, ...); + + int fatal_printf(const char *fmt, ...); + void clear_fatal_logs(void); + #ifdef __cplusplus } #endif diff --git a/src/protos.h b/src/protos.h index 23932ff..cfb569f 100644 --- a/src/protos.h +++ b/src/protos.h @@ -403,10 +403,6 @@ void do_wdm(word32 arg); void do_wai(void); void do_stp(void); void size_fail(int val, word32 v1, word32 v2); -int fatal_printf(const char *fmt, ...); -int gsport_vprintf(const char *fmt, va_list ap); -void must_write(int fd, char *bufptr, int len); -void clear_fatal_logs(void); char *gsplus_malloc_str(char *in_str); diff --git a/src/scc_socket_driver.c b/src/scc_socket_driver.c index bf43bfd..ce5c4d3 100644 --- a/src/scc_socket_driver.c +++ b/src/scc_socket_driver.c @@ -9,6 +9,8 @@ #include "defc.h" #include "scc.h" +#include "glog.h" + #include #include #ifndef UNDER_CE //OG diff --git a/src/sim65816.c b/src/sim65816.c index 56e2a2e..2650897 100644 --- a/src/sim65816.c +++ b/src/sim65816.c @@ -196,11 +196,7 @@ int g_engine_doc_int = 0; int g_testing = 0; -#define MAX_FATAL_LOGS 20 -int g_debug_file_fd = -1; -int g_fatal_log = -1; -char *g_fatal_log_strs[MAX_FATAL_LOGS]; word32 stop_run_at; @@ -289,9 +285,6 @@ void sim65816_initglobals() { g_testing = 0; - g_debug_file_fd = -1; - g_fatal_log = -1; - g_25sec_cntr = 0; g_1sec_cntr = 0; @@ -2571,70 +2564,7 @@ void size_fail(int val, word32 v1, word32 v2) { halt_printf("Size failure, val: %08x, %08x %08x\n", val, v1, v2); } -int gsplus_vprintf(const char *fmt, va_list ap) { - char *bufptr, *buf2ptr; - int len; - int ret; - bufptr = (char*)malloc(4096); // OG Added Cast - ret = vsnprintf(bufptr, 4090, fmt, ap); - - // OG Display warning - printf("Warning:%s",bufptr); - - len = strlen(bufptr); - if(g_fatal_log >= 0 && g_fatal_log < MAX_FATAL_LOGS) { - buf2ptr = (char*)malloc(len+1); // OG Added Cast - memcpy(buf2ptr, bufptr, len+1); - g_fatal_log_strs[g_fatal_log++] = buf2ptr; - } - must_write(1, bufptr, len); - if(g_debug_file_fd >= 0) { - must_write(g_debug_file_fd, bufptr, len); - } - free(bufptr); - - return ret; -} - - -int fatal_printf(const char *fmt, ...) { - va_list ap; - int ret; - - va_start(ap, fmt); - - if(g_fatal_log < 0) { - g_fatal_log = 0; - } - ret = gsplus_vprintf(fmt, ap); - va_end(ap); - - return ret; -} - -void must_write(int fd, char *bufptr, int len) { - int ret; - while(len > 0) { - ret = write(fd, bufptr, len); - if(ret >= 0) { - len -= ret; - bufptr += ret; - } else if(errno != EAGAIN && errno != EINTR) { - return; // just get out - } - } -} - -void clear_fatal_logs() { - int i; - - for(i = 0; i < g_fatal_log; i++) { - free(g_fatal_log_strs[i]); - g_fatal_log_strs[i] = 0; - } - g_fatal_log = -1; -} char *gsplus_malloc_str(char *in_str) { char *str;