diff --git a/cube/User/Src/logger.c b/cube/User/Src/logger.c index d23cff9..439255f 100644 --- a/cube/User/Src/logger.c +++ b/cube/User/Src/logger.c @@ -66,27 +66,37 @@ static void flashGreenLed(void *handle) { static int innerLogMsg(const char *pre, const char *post, bool syslogToo, const char *format, va_list vl) { const static char SYSLOG_HEADER[] = "<133>1 "; + #define MAX_PREFIX_SIZE 20 int res = -1; int offset = 0; - char msgBuffer[MSGBUFFER_SIZE+20]; - memset(msgBuffer, 0, MSGBUFFER_SIZE+20); + char msgBuffer[MSGBUFFER_SIZE+MAX_PREFIX_SIZE]; + char *bufferStart; + memset(msgBuffer, 0, MSGBUFFER_SIZE+MAX_PREFIX_SIZE); - - strcpy(msgBuffer, SYSLOG_HEADER); - offset += strlen(SYSLOG_HEADER); - if (pre) { - strcpy(msgBuffer+offset, pre); - offset += strlen(pre); + uint16_t syslogHeaderSize = strlen(SYSLOG_HEADER); + uint16_t preSize = (pre) ? strlen(pre) : 0; + uint16_t prefixSize = (syslogHeaderSize > preSize) ? syslogHeaderSize : preSize; + if (prefixSize > MAX_PREFIX_SIZE) { + return -1; } - int vcnt = vsnprintf(msgBuffer+offset, MSGBUFFER_SIZE, format, vl); + bufferStart = msgBuffer + prefixSize; + int vcnt = vsnprintf(bufferStart, MSGBUFFER_SIZE, format, vl); if (vcnt < MSGBUFFER_SIZE) { + if (true || syslogToo) { + memcpy(bufferStart - syslogHeaderSize, SYSLOG_HEADER, syslogHeaderSize); + syslog(bufferStart - syslogHeaderSize); + } + + if (pre) { + memcpy(bufferStart - preSize, pre, preSize); + } if (post) { - strcat(msgBuffer, post); + strcat(bufferStart - preSize, post); } HAL_NVIC_DisableIRQ(UART4_IRQn); - res = ringbufferPut(&logBuffer, (uint8_t*) msgBuffer, strlen(msgBuffer)); + res = ringbufferPut(&logBuffer, (uint8_t*) (bufferStart - preSize), strlen(bufferStart - preSize)); HAL_NVIC_EnableIRQ(UART4_IRQn); if (-1 == res) { @@ -95,11 +105,8 @@ static int innerLogMsg(const char *pre, const char *post, bool syslogToo, const schAdd(flashGreenLed, NULL, 100, 0); } debugTxCpltCallback(NULL); - - if (true) { - syslog(msgBuffer); - } } + return res; }