X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FDiskTool%2Fsrc%2Flogging.c;h=0cb3ed32a8e98485b6f6ea9baadcf71080eaa343;hb=04a050f42807686dc119838c82372409246d55bb;hp=8f627f2dcbfcd009c557de63eaf2a81923b5afda;hpb=aa3975dc61be78c0e6860cafad7278017fd456d5;p=tpg%2Facess2.git diff --git a/Tools/DiskTool/src/logging.c b/Tools/DiskTool/src/logging.c index 8f627f2d..0cb3ed32 100644 --- a/Tools/DiskTool/src/logging.c +++ b/Tools/DiskTool/src/logging.c @@ -4,20 +4,26 @@ #include #include #include +#include #include +#include +#include + +#define LOGHDR(col,type) fprintf(stderr, "\e["col"m[%-8.8s]"type" ", Ident) +#define LOGTAIL() fprintf(stderr, "\e[0m\n") #define PUTERR(col,type) {\ - fprintf(stderr, "\e["col"m[%-8.8s]"type" ", Ident); \ + LOGHDR(col,type);\ va_list args; va_start(args, Message);\ vfprintf(stderr, Message, args);\ va_end(args);\ - fprintf(stderr, "\e[0m\n"); \ + LOGTAIL();\ } // === CODE === void Log_KernelPanic(const char *Ident, const char *Message, ...) { PUTERR("35", "k") - exit(-1); + abort(); } void Log_Panic(const char *Ident, const char *Message, ...) PUTERR("34", "p") @@ -33,10 +39,166 @@ void Log_Debug(const char *Ident, const char *Message, ...) PUTERR("37", "d") void Warning(const char *Message, ...) { - const char *Ident = "WARNING"; - PUTERR("34", "W") + const char *Ident = ""; + PUTERR("33", "W") } void Log(const char *Message, ...) { - const char *Ident = "LOGLOG"; - PUTERR("31", "L") + const char *Ident = ""; + PUTERR("37", "L") +} + +void Debug_HexDump(const char *Prefix, const void *Data, size_t Length) +{ + const uint8_t *data = Data; + size_t ofs; + fprintf(stderr, "[HexDump ]d %s: %i bytes\n", Prefix, (int)Length); + for( ofs = 0; ofs + 16 <= Length; ofs += 16 ) + { + fprintf(stderr, "[HexDump ]d %s:", Prefix); + fprintf(stderr, " %02x %02x %02x %02x %02x %02x %02x %02x", + data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); + data += 8; + fprintf(stderr, " %02x %02x %02x %02x %02x %02x %02x %02x", + data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); + data += 8; + fprintf(stderr, "\n"); + } + + fprintf(stderr, "[HexDump ]d %s:", Prefix); + for( ; ofs < Length; ofs ++ ) + { + if( ofs % 8 == 0 ) fprintf(stderr, " "); + fprintf(stderr, " %02x", data[ofs%16]); + } + fprintf(stderr, "\n"); +} + + int giDebug_TraceLevel = 0; + +void Debug_TraceEnter(const char *Function, const char *Format, ...) +{ + const char *Ident = "Trace"; + LOGHDR("37","T"); + for( int i = 0; i < giDebug_TraceLevel; i ++ ) + fprintf(stderr, " "); + fprintf(stderr, "%s: (", Function); + + va_list args; + va_start(args, Format); + + int hasBeenPrev = 0; + while(*Format) + { + while( *Format && isblank(*Format) ) + Format ++; + if( !*Format ) break; + + char type = *Format++; + const char *start = Format; + while( *Format && !isblank(*Format) ) + Format ++; + + if(hasBeenPrev) + fprintf(stderr, ","); + hasBeenPrev = 1; + + fprintf(stderr, "%.*s=", (int)(Format-start), start); + switch(type) + { + case 'p': + fprintf(stderr, "%p", va_arg(args,const void *)); + break; + case 's': + fprintf(stderr, "\"%s\"", va_arg(args,const char *)); + break; + case 'i': + fprintf(stderr, "%i", va_arg(args,int)); + break; + case 'x': + fprintf(stderr, "0x%x", va_arg(args,unsigned int)); + break; + case 'X': + fprintf(stderr, "0x%"PRIx64, va_arg(args,uint64_t)); + break; + default: + va_arg(args,uintptr_t); + fprintf(stderr, "?"); + break; + } + } + + va_end(args); + + fprintf(stderr, ")"); + LOGTAIL(); + giDebug_TraceLevel ++; +} + +void Debug_TraceLog(const char *Function, const char *Format, ...) +{ + const char *Ident = "Trace"; + LOGHDR("37","T"); + + for( int i = 0; i < giDebug_TraceLevel; i ++ ) + fprintf(stderr, " "); + fprintf(stderr, "%s: ", Function); + + va_list args; + va_start(args, Format); + + vfprintf(stderr, Format, args); + + va_end(args); + LOGTAIL(); } + +void Debug_TraceLeave(const char *Function, char Type, ...) +{ + if( giDebug_TraceLevel == 0 ) { + Log_Error("Debug", "Function %s called LEAVE without ENTER", Function); + } + + const char *Ident = "Trace"; + LOGHDR("37","T"); + + va_list args; + va_start(args, Type); + + if( giDebug_TraceLevel > 0 ) + { + giDebug_TraceLevel --; + for( int i = 0; i < giDebug_TraceLevel; i ++ ) + fprintf(stderr, " "); + } + fprintf(stderr, "%s: RETURN", Function); + switch(Type) + { + case '-': + break; + case 'i': + fprintf(stderr, " %i", va_arg(args, int)); + break; + case 'x': + fprintf(stderr, " 0x%x", va_arg(args, unsigned int)); + break; + case 'X': + fprintf(stderr, " 0x%"PRIx64, va_arg(args,uint64_t)); + break; + case 's': + fprintf(stderr, " \"%s\"", va_arg(args, const char *)); + break; + case 'p': + fprintf(stderr, " %p", va_arg(args, const void *)); + break; + case 'n': + fprintf(stderr, " NULL"); + break; + default: + fprintf(stderr, " ?"); + break; + } + + va_end(args); + LOGTAIL(); +} +