move fatal_printf logging to glog.c file with other logging that does the same thing.

This commit is contained in:
Kelvin Sherlock 2019-04-08 23:56:59 -04:00
parent e23f4494ca
commit 886a1a591a
5 changed files with 53 additions and 76 deletions

View File

@ -4,12 +4,20 @@
See COPYRIGHT.txt for Copyright information
See LICENSE.txt for license (GPL v2)
*/
#include <stdio.h>
#include <time.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#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;
}

View File

@ -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

View File

@ -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);

View File

@ -9,6 +9,8 @@
#include "defc.h"
#include "scc.h"
#include "glog.h"
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

View File

@ -209,11 +209,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;
@ -302,9 +298,6 @@ void sim65816_initglobals() {
g_testing = 0;
g_debug_file_fd = -1;
g_fatal_log = -1;
g_25sec_cntr = 0;
g_1sec_cntr = 0;
@ -2485,70 +2478,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;