mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
x1000-installer: xf_stream_read_lines bugfixes
- Only treat EOF as newline if the line is non-empty to suppress a useless empty line after the end of a file. - Deal with 0- and 1-byte line buffers safely. - Remove whitespace stripping and comment handling which was left over from refactoring. Move it to xf_map_parse() where it belongs. Change-Id: I9f05f4e18ca6dd011ca4cd231f0b5ea37c784778
This commit is contained in:
parent
420d545018
commit
4879891da3
2 changed files with 12 additions and 11 deletions
|
@ -193,6 +193,10 @@ int map_parse_line_cb(int n, char* buf, void* arg)
|
||||||
|
|
||||||
struct map_parse_args* args = arg;
|
struct map_parse_args* args = arg;
|
||||||
|
|
||||||
|
/* skip whitespace */
|
||||||
|
while(*buf && isspace(*buf))
|
||||||
|
++buf;
|
||||||
|
|
||||||
/* ignore comments and blank lines */
|
/* ignore comments and blank lines */
|
||||||
if(*buf == '#' || *buf == '\0')
|
if(*buf == '#' || *buf == '\0')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -159,6 +159,9 @@ int xf_stream_read_lines(struct xf_stream* s, char* buf, size_t bufsz,
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
bool at_eof = false;
|
bool at_eof = false;
|
||||||
|
|
||||||
|
if(bufsz <= 1)
|
||||||
|
return XF_E_LINE_TOO_LONG;
|
||||||
|
|
||||||
while(!at_eof) {
|
while(!at_eof) {
|
||||||
bytes_read = xf_stream_read(s, &buf[pos], bufsz - pos - 1);
|
bytes_read = xf_stream_read(s, &buf[pos], bufsz - pos - 1);
|
||||||
if(bytes_read < 0)
|
if(bytes_read < 0)
|
||||||
|
@ -183,20 +186,14 @@ int xf_stream_read_lines(struct xf_stream* s, char* buf, size_t bufsz,
|
||||||
else
|
else
|
||||||
break; /* read ahead to look for newline */
|
break; /* read ahead to look for newline */
|
||||||
} else {
|
} else {
|
||||||
endp = &buf[pos]; /* treat EOF as a newline */
|
if(startp == &buf[pos])
|
||||||
|
break; /* nothing left to do */
|
||||||
|
else
|
||||||
|
endp = &buf[pos]; /* last line missing a newline -
|
||||||
|
* treat EOF as newline */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip whitespace */
|
|
||||||
while(*startp && isspace(*startp))
|
|
||||||
++startp;
|
|
||||||
|
|
||||||
/* ignore blank lines and comment lines */
|
|
||||||
if(*startp == '#' || *startp == '\0') {
|
|
||||||
startp = endp + 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = callback(n++, startp, arg);
|
rc = callback(n++, startp, arg);
|
||||||
if(rc != 0)
|
if(rc != 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue