diff --git a/apps/logfdisp.c b/apps/logfdisp.c old mode 100644 new mode 100755 index d55b3ba..da92f92 --- a/apps/logfdisp.c +++ b/apps/logfdisp.c @@ -83,10 +83,13 @@ bool logfdisplay(void) } memcpy(buffer, logfbuffer[index], columns); - if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE) - buffer[columns-1] = '>'; - else if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_MULTI_LINE) - buffer[columns-1] = '\0'; + if (columns > MAX_LOGF_ENTRY) + { + if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE) + buffer[MAX_LOGF_ENTRY] = '>'; + else if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_MULTI_LINE) + buffer[MAX_LOGF_ENTRY] = '\0'; + } buffer[columns] = '\0'; lcd_puts(0, i, buffer); @@ -136,7 +139,6 @@ bool logfdump(void) else break; /* done */ } - multiline = false; if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_MULTI_LINE) { @@ -150,7 +152,7 @@ bool logfdump(void) dumpwrap = true; } else - goto end_loop; + break; /* done */ } } while(logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE); index++; @@ -158,21 +160,19 @@ bool logfdump(void) index = 0; } - tindex = index-1; + index--; + tindex = index; ptr = buffer; do { tindex++; - memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY); - ptr += MAX_LOGF_ENTRY; if (tindex >= MAX_LOGF_LINES) tindex = 0; + memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY); + ptr += MAX_LOGF_ENTRY; } while(logfbuffer[tindex][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE); *ptr = '\0'; - fdprintf(fd, "%s\n", buffer); - index--; } -end_loop: close(fd); } return false; diff --git a/firmware/logf.c b/firmware/logf.c old mode 100644 new mode 100755 index 054baa1..c1a15af --- a/firmware/logf.c +++ b/firmware/logf.c @@ -145,16 +145,16 @@ void _logf(const char *format, ...) while(len > MAX_LOGF_ENTRY) { ptr = logfbuffer[logfindex]; - strncpy(ptr, buf + tlen, MAX_LOGF_ENTRY-1); + memcpy(ptr, buf + tlen, MAX_LOGF_ENTRY); ptr[MAX_LOGF_ENTRY] = LOGF_TERMINATE_CONTINUE_LINE; logfindex++; check_logfindex(); - len -= MAX_LOGF_ENTRY-1; - tlen += MAX_LOGF_ENTRY-1; + len -= MAX_LOGF_ENTRY; + tlen += MAX_LOGF_ENTRY; multiline = true; } ptr = logfbuffer[logfindex]; - strcpy(ptr, buf + tlen); + memcpy(ptr, buf + tlen, len); if(len < MAX_LOGF_ENTRY) /* pad with spaces up to the MAX_LOGF_ENTRY byte border */