#define DRD64_ERROR_CODE_CLEAR 0x00000000
#define DRD64_ERROR_LOCATION_CLEAR 0x00000000
-/* [Error] Type Code ================== __*_______ */
+/* [Error] Type Code ================== *_______ */
+#define DRD64_ERROR_TYPE(n) (((DWord)(n))&0xf000000)
#define DRD64_ERROR_TYPE_FATAL 0x80000000
#define DRD64_ERROR_TYPE_ERROR 0x40000000
#define DRD64_ERROR_TYPE_WARNING 0x20000000
#define DRD64_ERROR_TYPE_INFO 0x10000000
#define DRD64_ERROR_TYPE_NONE 0x00000000
-/* [Error] Pattern Code =============== ____**____ */
+/* [Error] Pattern Code =============== __**____ */
+#define DRD64_ERROR_PTN(n) (((DWord)(n))&0x00ff0000)
#define DRD64_ERROR_PTN_NOERROR 0x00000000
#define DRD64_ERROR_PTN_PACKET 0x00010000
#define DRD64_ERROR_PTN_COMMAND 0x00020000
#define DRD64_ERROR_PTN_NOMEMORY 0x00070000
#define DRD64_ERROR_PTN_SOCKET 0x00080000
#define DRD64_ERROR_PTN_INETADDR 0x00090000
+#define DRD64_ERROR_PTN_NCURSES 0x000a0000
#define DRD64_ERROR_PTN_BUG 0x00ff0000
#define DRD64_ERROR_PTN_FUNCTION 0x00ff0000
+/* [Error] Error Code Level-1 ========= ____**__ */
+#define DRD64_ERROR_LEVEL1(n) ((((DWord)(n)&0x0000ff00))>>8)
-/* [Location] Module Level-1 Code ===== __*+______ */
+/* [Error] Error Code Level-2 ========= ______** */
+#define DRD64_ERROR_LEVEL2(n) (((DWord)(n))&0x000000ff)
+
+/* [Location] Module Level-1 Code ===== *+______ */
+#define DRD64_ERROR_MODULE(n) (((DWord)(n))&0xff000000)
+#define DRD64_ERROR_MODULE_NOARCH(n) (((DWord)(n))&0xff000000)
+#define DRD64_ERROR_MODULE_WITHARCH(n) (((DWord)(n))&0xf0000000)
+#define DRD64_ERROR_MODULE_IsArch(n) (((DWord)(n))&0x80000000)
#define DRD64_ERROR_MODULE_MARSHALD 0x01000000
#define DRD64_ERROR_MODULE_DEBUGD 0x02000000
#define DRD64_ERROR_MODULE_SERVER 0x03000000
#define DRD64_ERROR_MODULE_DRCC 0x20000000
#define DRD64_ERROR_MODULE_LIBEDITTEXT 0x31000000
#define DRD64_ERROR_MODULE_LIBFILETYPE 0x32000000
-#define DRD64_ERROR_MODULE_LIBGOBLIN 0x70000000
-#define DRD64_ERROR_MODULE_LIBASM 0x90000000
-#define DRD64_ERROR_MODULE_LIBARCH 0xa0000000
-#define DRD64_ERROR_MODULE_RESERVE 0xf0000000
-
-/* [Location] Archtechture Code ======= ___**_____ */
+#define DRD64_ERROR_MODULE_LIBGOBLIN 0x40000000
+#define DRD64_ERROR_MODULE_RESERVE 0x70000000
+#define DRD64_ERROR_MODULE_LIBASM 0x90000000 /* with ArchCode */
+#define DRD64_ERROR_MODULE_LIBARCH 0xa0000000 /* with ArchCode */
+#define DRD64_ERROR_MODULE_ARCHRESERVE 0xf0000000 /* with ArchCode */
+
+/* [Location] Archtechture Code ======= _+*_____ */
+#define DRD64_ERROR_ARCH(n) (((DWord)(n))&0x0ff00000)
#define DRD64_ERROR_ARCH_NODEPEND 0x00000000
#define DRD64_ERROR_ARCH_INTEL64 0x01100000
#define DRD64_ERROR_ARCH_INTEL32 0x01200000
#define DRD64_ERROR_ARCH_SPARC32 0x05200000
#define DRD64_ERROR_ARCH_MIPS 0x06100000
+/* [Location] Source File ID ========== ____**__ */
+#define DRD64_ERROR_SOURCE(n) ((((DWord)(n)&0x0000ff00))>>8)
+
+/* [Location] Function ID ============= ______** */
+#define DRD64_ERROR_FUNCTION(n) (((DWord)(n))&0x000000ff)
typedef struct {
DWord dw_error;
DWord dw_location;
int i_system_errno;
+ int i_srcline;
QWord qw_value[2];
} Drd64_ErrorInfo;
LIBBROWNIE_FUNC
int LibBrownie_Error_GetReferenceCount( void );
LIBBROWNIE_FUNC
- int LibBrownie_Error_DebugErrorInfoPrint( Drd64_ErrorInfo *p_errinfo, int i_id );
+ int LibBrownie_Error_DebugErrorInfoPrint( int i_id );
LIBBROWNIE_FUNC
int LibBrownie_Error_DebugAllInfoPrint( void );
LIBBROWNIE_FUNC
int LibBrownie_Error_SetErrorInfo(
DWord dw_errcode, DWord dw_errlocation, int i_syserrno,
- QWord qw_value1, QWord qw_value2 );
+ QWord qw_value1, QWord qw_value2, int i_srcline );
LIBBROWNIE_FUNC
Drd64_ErrorInfo *LibBrownie_Error_GetErrorInfo( int i_history_id );
LIBBROWNIE_FUNC
#define DRD64_SRC_LIBBROWNIE_ERROR
#include"drd64_libbrownie.h"
-static Drd64_ErrorInfo *gp_errorinfo_pool = NULL;
-static Drd64_ErrorInfo **gpp_errorinfo_history = NULL;
-static int gi_max_errorinfo = -1;
-static int gi_refcount = 0;
+static Drd64_ErrorInfo *gp_errorinfo = NULL;
+static int gi_max_errorinfo = -1;
+static int gi_refcount = 0;
+static int gi_now_errorinfo = 0;
/*----------------------------------------------------------------------
LIBBROWNIE_FUNC
int
LibBrownie_Error_DebugErrorInfoPrint(
- Drd64_ErrorInfo *p_errinfo,
int i_id )
{
+ char *pstr_errtype = NULL;
+ char *pstr_errptn = NULL;
+ char *pstr_module = NULL;
+ char *pstr_arch = NULL;
+ DWord dw_tmp;
+ DWord dw_errlv1;
+ DWord dw_errlv2;
+ DWord dw_srcid;
+ DWord dw_funcid;
+
+ Drd64_ErrorInfo *p_errinfo;
+ p_errinfo = LibBrownie_Error_GetErrorInfo( i_id );
assert( NULL != p_errinfo );
- if( -1 == i_id )
- { puts("[ErrorInfo] ---------------------------------------------------------"); }
- else
- { printf("[ErrorInfo] %2d ------------------------------------------------------\n", i_id ); }
- printf(" ErrCode : %08x \n", p_errinfo->dw_error );
- printf(" Location: %08x \n", p_errinfo->dw_location );
+ printf("[ErrorInfo] %2d ------------------------------------------------------------\n", i_id );
+ printf(" ErrCode : %08x h\n", p_errinfo->dw_error );
+
+ dw_tmp = DRD64_ERROR_TYPE( p_errinfo->dw_error );
+ switch( dw_tmp ) {
+ case DRD64_ERROR_TYPE_FATAL: pstr_errtype = "FATAL"; break;
+ case DRD64_ERROR_TYPE_ERROR: pstr_errtype = "ERROR"; break;
+ case DRD64_ERROR_TYPE_WARNING: pstr_errtype = "WARN."; break;
+ case DRD64_ERROR_TYPE_INFO: pstr_errtype = "INFO "; break;
+ case DRD64_ERROR_TYPE_NONE: pstr_errtype = "NONE "; break;
+ default: pstr_errtype = "(BUG)"; break;
+ }
+
+ dw_tmp = DRD64_ERROR_PTN( p_errinfo->dw_error );
+ switch( dw_tmp ) {
+ case DRD64_ERROR_PTN_PACKET: pstr_errptn = "Fail Packet"; break;
+ case DRD64_ERROR_PTN_COMMAND: pstr_errptn = "Fail Command"; break;
+ case DRD64_ERROR_PTN_LOG: pstr_errptn = "Log"; break;
+ case DRD64_ERROR_PTN_SYSCALL: pstr_errptn = "SysCall Error"; break;
+ case DRD64_ERROR_PTN_TIMEOUT: pstr_errptn = "TimeOut"; break;
+ case DRD64_ERROR_PTN_NOEXIST: pstr_errptn = "No File/Dir Exist."; break;
+ case DRD64_ERROR_PTN_NOMEMORY: pstr_errptn = "No engouh Memory"; break;
+ case DRD64_ERROR_PTN_SOCKET: pstr_errptn = "Socket Error"; break;
+ case DRD64_ERROR_PTN_INETADDR: pstr_errptn = "Fail IPaddr."; break;
+ case DRD64_ERROR_PTN_BUG: pstr_errptn = "BUG!!"; break;
+ case DRD64_ERROR_PTN_NOERROR: pstr_errptn = "(no error)"; break;
+ default: pstr_errptn = "(Undefined Ptn.)"; break;
+ }
+
+ dw_errlv1 = DRD64_ERROR_LEVEL1( p_errinfo->dw_error );
+ dw_errlv2 = DRD64_ERROR_LEVEL2( p_errinfo->dw_error );
+
+ printf(" (Type: %5s, Pattern: %25s, Lv1: %2x h, Lv2: %2x h)\n",
+ pstr_errtype, pstr_errptn, dw_errlv1, dw_errlv2 );
+
+ printf(" Location: %08x h\n", p_errinfo->dw_location );
+
+ if( DRD64_ERROR_MODULE_IsArch( p_errinfo->dw_location ) ) {
+ dw_tmp = DRD64_ERROR_MODULE_WITHARCH( p_errinfo->dw_location );
+
+ switch( dw_tmp ) {
+ case DRD64_ERROR_MODULE_MARSHALD:
+ pstr_module = "marshald"; break;
+ case DRD64_ERROR_MODULE_DEBUGD:
+ pstr_module = "debugd"; break;
+ case DRD64_ERROR_MODULE_SERVER:
+ pstr_module = "server"; break;
+ case DRD64_ERROR_MODULE_LIBDRD64:
+ pstr_module = "libdrd64"; break;
+ case DRD64_ERROR_MODULE_LIBBROWNIE:
+ pstr_module = "libbrownie"; break;
+ case DRD64_ERROR_MODULE_DRCC:
+ pstr_module = "drcc"; break;
+ case DRD64_ERROR_MODULE_LIBEDITTEXT:
+ pstr_module = "libedittext"; break;
+ case DRD64_ERROR_MODULE_LIBFILETYPE:
+ pstr_module = "libfiletype"; break;
+ case DRD64_ERROR_MODULE_LIBGOBLIN:
+ pstr_module = "libgoblin"; break;
+ default:
+ pstr_module = "(Undef. Mod.)"; break;
+ }
+
+ pstr_arch = "(Imdepend Arch.)";
+ }
+ else {
+ dw_tmp = DRD64_ERROR_MODULE_NOARCH( p_errinfo->dw_location );
+ switch( dw_tmp ) {
+ case DRD64_ERROR_MODULE_LIBASM:
+ pstr_module = "libasm"; break;
+ case DRD64_ERROR_MODULE_LIBARCH:
+ pstr_module = "libarch"; break;
+ default:
+ pstr_module = "(Undef. Mod.)"; break;
+ }
+
+ dw_tmp = DRD64_ERROR_ARCH( p_errinfo->dw_location );
+ switch( dw_tmp ) {
+ case DRD64_ERROR_ARCH_INTEL64:
+ pstr_arch = "INTEL64 (amd64/x86-64)"; break;
+ case DRD64_ERROR_ARCH_INTEL32:
+ pstr_arch = "IA32 (x86)"; break;
+ case DRD64_ERROR_ARCH_INTEL16:
+ pstr_arch = "IA32 (x86) 16bit-binary"; break;
+ case DRD64_ERROR_ARCH_POWERPC64:
+ pstr_arch = "IBM Power 64bit-arch"; break;
+ case DRD64_ERROR_ARCH_POWERPC32:
+ pstr_arch = "IBM Power 32bit-arch"; break;
+ case DRD64_ERROR_ARCH_ARM64:
+ pstr_arch = "ARM v8 (aarch64/arm64)"; break;
+ case DRD64_ERROR_ARCH_ARM32:
+ pstr_arch = "ARM v7 (arm 32bit)"; break;
+ case DRD64_ERROR_ARCH_SPARC64:
+ pstr_arch = "SPARC 64bit-arch"; break;
+ case DRD64_ERROR_ARCH_SPARC32:
+ pstr_arch = "SPARC 32bit-arch"; break;
+ case DRD64_ERROR_ARCH_MIPS:
+ pstr_arch = "MIPS arch"; break;
+ default:
+ pstr_arch = "(Undef. Arch.)"; break;
+ }
+ }
+
+ dw_srcid = DRD64_ERROR_SOURCE( p_errinfo->dw_location );
+ dw_funcid = DRD64_ERROR_FUNCTION( p_errinfo->dw_location );
+
+ printf(" (Module: %20s, Arch: %25s)\n", pstr_module, pstr_arch );
+ printf(" (SrcID: %2x h, FuncID: %2x h, SrcLine: %4d)\n",
+ dw_srcid, dw_funcid, p_errinfo->i_srcline);
+
printf(" errno : %d \n", p_errinfo->i_system_errno );
- printf(" Value 1 : %016lx (%lu) \n", p_errinfo->qw_value[0], p_errinfo->qw_value[0] );
- printf(" Value 2 : %016lx (%lu) \n", p_errinfo->qw_value[1], p_errinfo->qw_value[1] );
+ printf(" Value 1 : %016lx h (%lu) \n", p_errinfo->qw_value[0], p_errinfo->qw_value[0] );
+ printf(" Value 2 : %016lx h (%lu) \n", p_errinfo->qw_value[1], p_errinfo->qw_value[1] );
return 0x00;
}
void )
{
int i_cnt;
- Drd64_ErrorInfo *p_errinfo;
- puts("[ErrorInfo Dump]*****************************************************");
+ puts("[ErrorInfo Dump]***********************************************************");
for( i_cnt = 0; i_cnt < gi_max_errorinfo; i_cnt++ ) {
- p_errinfo = *(gpp_errorinfo_history + i_cnt);
-
- LibBrownie_Error_DebugErrorInfoPrint( p_errinfo, i_cnt );
+ LibBrownie_Error_DebugErrorInfoPrint( i_cnt );
}
- puts("*********************************************************************");
+ puts("***************************************************************************");
return 0x00;
}
DWord dw_errlocation,
int i_syserrno,
QWord qw_value1,
- QWord qw_value2 )
+ QWord qw_value2,
+ int i_srcline )
{
- int i_cnt;
Drd64_ErrorInfo *p_errinfo;
- p_errinfo = *(gpp_errorinfo_history + (gi_max_errorinfo - 1));
- for( i_cnt = gi_max_errorinfo - 1; i_cnt > 0; i_cnt-- ) {
- *(gpp_errorinfo_history + i_cnt)
- = *(gpp_errorinfo_history + (i_cnt - 1));
- }
+ gi_now_errorinfo = (gi_now_errorinfo + 1) % gi_max_errorinfo;
+
+ p_errinfo = (gp_errorinfo + gi_now_errorinfo);
+ assert( NULL != p_errinfo );
p_errinfo->dw_error = dw_errcode;
p_errinfo->dw_location = dw_errlocation;
p_errinfo->i_system_errno = i_syserrno;
+ p_errinfo->i_srcline = i_srcline;
p_errinfo->qw_value[0] = qw_value1;
p_errinfo->qw_value[1] = qw_value2;
- *(gpp_errorinfo_history + 0) = p_errinfo;
-
return 0x00;
}
LibBrownie_Error_GetErrorInfo(
int i_history_id )
{
+ int i_errinfo_id;
Drd64_ErrorInfo *p_errinfo;
if((gi_max_errorinfo <= i_history_id ) || ( 0 > i_history_id ))
{ return NULL; }
+
+ i_errinfo_id = ( (gi_now_errorinfo < i_history_id)
+ ? (gi_max_errorinfo + gi_now_errorinfo - i_history_id)
+ : (gi_now_errorinfo - i_history_id));
- p_errinfo = *(gpp_errorinfo_history + i_history_id);
+ p_errinfo = (gp_errorinfo + i_errinfo_id);
return p_errinfo;
}
LibBrownie_Error_InitErrorSystem(
void )
{
- int i_cnt;
Drd64_ErrorInfo *p_errinfo;
- Drd64_ErrorInfo **pp_errhistory;
- gp_errorinfo_pool = NULL;
- gpp_errorinfo_history = NULL;
- gi_max_errorinfo = 0;
+ gp_errorinfo = NULL;
+ gi_max_errorinfo = 0;
gi_refcount++;
if( 1 < gi_refcount ) { return 0x00; }
memset( p_errinfo, 0x00, sizeof( Drd64_ErrorInfo ) * LIBBROWNIE_ERROR_MAXERRORS );
-
- pp_errhistory = (Drd64_ErrorInfo **)malloc(
- sizeof( Drd64_ErrorInfo * ) * LIBBROWNIE_ERROR_MAXERRORS );
- if( NULL == pp_errhistory ) { return 0x02; }
-
- for( i_cnt = 0; i_cnt < LIBBROWNIE_ERROR_MAXERRORS; i_cnt++ )
- { *(pp_errhistory + i_cnt ) = (p_errinfo + i_cnt); }
-
- gp_errorinfo_pool = p_errinfo;
- gpp_errorinfo_history = pp_errhistory;
- gi_max_errorinfo = LIBBROWNIE_ERROR_MAXERRORS;
+ gp_errorinfo = p_errinfo;
+ gi_max_errorinfo = LIBBROWNIE_ERROR_MAXERRORS;
+ gi_now_errorinfo = LIBBROWNIE_ERROR_MAXERRORS - 1;
return 0x00;
}
gi_refcount--;
if( 0 < gi_refcount ) { return; }
- if( NULL != gp_errorinfo_pool ) {
- free( gp_errorinfo_pool );
- gp_errorinfo_pool = NULL;
- }
-
- if( NULL != gpp_errorinfo_history ) {
- free( gpp_errorinfo_history );
- gpp_errorinfo_history = NULL;
+ if( NULL != gp_errorinfo ) {
+ free( gp_errorinfo );
+ gp_errorinfo = NULL;
}
gi_max_errorinfo = 0;
dw_location = DRD64_ERR_LOCATION( DRD64_ERROR_MODULE_LIBBROWNIE, DRD64_ERROR_ARCH_NODEPEND, 0x12,0x34 );
qw_value = 0xfedcba0987654000;
p_test = &qw_value;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654001;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654002;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654003;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654004;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654005;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654006;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654007;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654008;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654009;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400a;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400b;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400c;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400d;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400e;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba098765400f;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
qw_value = 0xfedcba0987654010;
- LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test );
-
+ LibBrownie_Error_SetErrorInfo( dw_error, dw_location, -1, qw_value, (QWord)p_test, __LINE__ );
LibBrownie_Error_DebugAllInfoPrint();