TwlToolsRED/build/tools/sctools/common/src/error_report.c

123 lines
2.3 KiB
C

#include <twl.h>
#include "text.h"
#include "mprintf.h"
#include "logprintf.h"
#include "error_report.h"
typedef struct _ERROR_REPORT {
struct _ERROR_REPORT *next;
char *report_str;
} ERROR_REPORT;
static ERROR_REPORT *er_head;
static BOOL er_active = FALSE;
void Error_Report_Init(void)
{
er_active = TRUE;
er_head = NULL;
}
void Error_Report_End(void)
{
ERROR_REPORT *er_temp;
ERROR_REPORT *er_next;
if( er_active == FALSE ) {
return;
}
er_temp = er_head;
while( er_temp != NULL ) {
if( er_temp->report_str ) {
OS_Free( (void *)(er_temp->report_str) );
}
er_next = er_temp->next;
OS_Free( er_temp );
er_temp = er_next;
}
er_head = NULL;
er_active = FALSE;
}
BOOL Error_Report_Display(TEXT_CTRL *tc)
{
ERROR_REPORT *er_temp;
if( er_active == FALSE ) {
return FALSE;
}
if( er_head == NULL ) {
return FALSE;
}
er_temp = er_head;
while( er_temp != NULL ) {
if( er_temp->report_str ) {
mfprintf(tc, "%s", er_temp->report_str );
}
er_temp = er_temp->next;
}
return TRUE;
}
BOOL Error_Report_Add(char *str)
{
ERROR_REPORT *er_temp;
ERROR_REPORT **er_next;
char *str_buf;
u32 str_len;
if( er_active == FALSE ) {
return FALSE;
}
if( str == NULL ) {
return FALSE;
}
er_temp = (ERROR_REPORT *)OS_Alloc( sizeof(ERROR_REPORT) );
if( er_temp == NULL ) {
return FALSE;
}
str_len = (u32)STD_StrLen(str);
str_buf = (char *)OS_Alloc( str_len + 1 );
if( str_buf == NULL ) {
return FALSE;
}
STD_StrCpy(str_buf , str);
er_temp->report_str = str_buf;
str_buf += str_len;
*str_buf = '\0';
er_temp->next = NULL;
er_next = &er_head;
while( 1 ) {
if( *er_next == NULL ) {
*er_next = er_temp;
return TRUE;
}
er_next = &((*er_next)->next);
}
return FALSE;
}
BOOL Error_Report_Printf(const char *fmt, ...)
{
#define STR_BUF_LEN 200
char str_buf[STR_BUF_LEN];
int ret;
va_list vlist;
if( er_active == FALSE ) {
return FALSE;
}
va_start(vlist, fmt);
ret = STD_TVSNPrintf(str_buf, STR_BUF_LEN, fmt, vlist);
va_end(vlist);
OS_TPrintf( "%s len = %d\n",__FUNCTION__,ret);
// return ret;
return Error_Report_Add(str_buf);
}