Kernel/logging - Slight cleanup
[tpg/acess2.git] / KernelLand / Kernel / logging.c
index b419be3..2905dd1 100644 (file)
@@ -69,14 +69,16 @@ EXPORT(Log_Debug);
 
 // === GLOBALS ===
 tShortSpinlock glLogOutput;
-#if USE_RING_BUFFER
+#if CACHE_MESSAGES
+# if USE_RING_BUFFER
 Uint8  gaLog_RingBufferData[sizeof(tRingBuffer)+RING_BUFFER_SIZE];
 tRingBuffer    *gpLog_RingBuffer = (void*)gaLog_RingBufferData;
-#else
+# else
 tMutex glLog;
 tLogList       gLog;
 tLogList       gLog_Levels[NUM_LOG_LEVELS];
-#endif
+# endif        // USE_RING_BUFFER
+#endif // CACHE_MESSAGES
 
 // === CODE ===
 /**
@@ -89,11 +91,9 @@ void Log_AddEvent(const char *Ident, int Level, const char *Format, va_list Args
        va_list args_tmp;
        
        if( Level >= NUM_LOG_LEVELS )   return;
-       
+
        va_copy(args_tmp, Args);
-       len = vsnprintf(NULL, 256, Format, args_tmp);
-       
-       //Log("len = %i", len);
+       len = vsnprintf(NULL, 0, Format, args_tmp);
        
        #if USE_RING_BUFFER || !CACHE_MESSAGES
        {
@@ -114,9 +114,7 @@ void Log_AddEvent(const char *Ident, int Level, const char *Format, va_list Args
        {
                #define LOG_HDR_LEN     (14+1+2+8+2)
                char    newData[ LOG_HDR_LEN + len + 2 + 1 ];
-               char    _ident[9];
-               strncpy(_ident, Ident, 9);
-               sprintf( newData, "%014lli%s [%-8s] ",
+               sprintf( newData, "%014lli%s [%-8.8s] ",
                        ent->Time, csaLevelCodes[Level], Ident);
                strcpy( newData + LOG_HDR_LEN, ent->Data );
                strcpy( newData + LOG_HDR_LEN + len, "\r\n" );
@@ -127,16 +125,14 @@ void Log_AddEvent(const char *Ident, int Level, const char *Format, va_list Args
        Mutex_Acquire( &glLog );
        
        ent->Next = gLog.Tail;
-       if(gLog.Head)
-               gLog.Tail = ent;
-       else
-               gLog.Tail = gLog.Head = ent;
+       tLogEntry       **pnp = (gLog.Tail ? &gLog.Tail->Next : &gLog.Head);
+       *pnp = ent;
+       gLog.Tail = ent;
        
        ent->LevelNext = gLog_Levels[Level].Tail;
-       if(gLog_Levels[Level].Head)
-               gLog_Levels[Level].Tail = ent;
-       else
-               gLog_Levels[Level].Tail = gLog_Levels[Level].Head = ent;
+       pnp = (gLog_Levels[Level].Tail ? &gLog_Levels[Level].Tail->LevelNext : &gLog_Levels[Level].Head);
+       *pnp = ent;
+       gLog_Levels[Level].Tail = ent;
        
        Mutex_Release( &glLog );
        # endif
@@ -156,13 +152,18 @@ void Log_AddEvent(const char *Ident, int Level, const char *Format, va_list Args
  */
 void Log_Int_PrintMessage(tLogEntry *Entry)
 {
+       if( CPU_HAS_LOCK(&glLogOutput) )
+               return ;        // TODO: Error?
        SHORTLOCK( &glLogOutput );
-       LogF("%s%014lli%s [%-8s] %i - %s",
+       LogF("%s%014lli",
                csaLevelColours[Entry->Level],
-               Entry->Time,
+               Entry->Time
+               );
+       LogF("%s [%-8s] %i - %.*s",
                csaLevelCodes[Entry->Level],
                Entry->Ident,
                Threads_GetTID(),
+               Entry->Length,
                Entry->Data
                );
        LogF("\x1B[0m\r\n");    // Separate in case Entry->Data is too long

UCC git Repository :: git.ucc.asn.au