Fix logf() multilines handling

Each line (of MAX_LOGF_ENTRY characters) would be marked with
LOGF_TERMINATE_CONTINUE_LINE, but still be padded with a '\0'

This also reverts r22250 which worked around the problem in logfdump()

Flyspray: FS#10513
Author: Amaury Pouly

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22253 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Rafaël Carré 2009-08-11 16:12:03 +00:00
parent e74ba2b63d
commit 9a5174c8a3
2 changed files with 7 additions and 6 deletions

View file

@ -190,8 +190,8 @@ bool logfdump(void)
ptr = buffer; ptr = buffer;
do { do {
tindex++; tindex++;
memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY-1); memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY);
ptr += MAX_LOGF_ENTRY-1; ptr += MAX_LOGF_ENTRY;
if (tindex >= MAX_LOGF_LINES) if (tindex >= MAX_LOGF_LINES)
tindex = 0; tindex = 0;
} while(logfbuffer[tindex][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE); } while(logfbuffer[tindex][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE);

View file

@ -145,16 +145,17 @@ void _logf(const char *format, ...)
while(len > MAX_LOGF_ENTRY) while(len > MAX_LOGF_ENTRY)
{ {
ptr = logfbuffer[logfindex]; ptr = logfbuffer[logfindex];
strlcpy(ptr, buf + tlen, MAX_LOGF_ENTRY); memcpy(ptr, buf + tlen, MAX_LOGF_ENTRY);
ptr[MAX_LOGF_ENTRY] = LOGF_TERMINATE_CONTINUE_LINE; ptr[MAX_LOGF_ENTRY] = LOGF_TERMINATE_CONTINUE_LINE;
logfindex++; logfindex++;
check_logfindex(); check_logfindex();
len -= MAX_LOGF_ENTRY-1; len -= MAX_LOGF_ENTRY;
tlen += MAX_LOGF_ENTRY-1; tlen += MAX_LOGF_ENTRY;
multiline = true; multiline = true;
} }
ptr = logfbuffer[logfindex]; ptr = logfbuffer[logfindex];
strcpy(ptr, buf + tlen); memcpy(ptr, buf + tlen,len-tlen);
if(len < MAX_LOGF_ENTRY) if(len < MAX_LOGF_ENTRY)
/* pad with spaces up to the MAX_LOGF_ENTRY byte border */ /* pad with spaces up to the MAX_LOGF_ENTRY byte border */