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;
do {
tindex++;
memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY-1);
ptr += MAX_LOGF_ENTRY-1;
memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY);
ptr += MAX_LOGF_ENTRY;
if (tindex >= MAX_LOGF_LINES)
tindex = 0;
} 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)
{
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;
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-tlen);
if(len < MAX_LOGF_ENTRY)
/* pad with spaces up to the MAX_LOGF_ENTRY byte border */