vcs-svn: teach line_buffer to handle multiple input files
Collect the line_buffer state in a newly public line_buffer struct. Callers can use multiple line_buffers to manage input from multiple files at a time. svn-fe's delta applier will use this to stream a delta from svnrdump and the preimage it applies to from fast-import at the same time. The tests don't take advantage of the new features, but I think that's okay. It is easier to find lingering examples of nonreentrant code by searching for "static" in line_buffer.c. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
This commit is contained in:
@ -22,25 +22,26 @@ static uint32_t strtouint32(const char *s)
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct line_buffer buf = LINE_BUFFER_INIT;
|
||||
char *s;
|
||||
|
||||
if (argc != 1)
|
||||
usage("test-line-buffer < input.txt");
|
||||
if (buffer_init(NULL))
|
||||
if (buffer_init(&buf, NULL))
|
||||
die_errno("open error");
|
||||
while ((s = buffer_read_line())) {
|
||||
s = buffer_read_string(strtouint32(s));
|
||||
while ((s = buffer_read_line(&buf))) {
|
||||
s = buffer_read_string(&buf, strtouint32(s));
|
||||
fputs(s, stdout);
|
||||
fputc('\n', stdout);
|
||||
buffer_skip_bytes(1);
|
||||
if (!(s = buffer_read_line()))
|
||||
buffer_skip_bytes(&buf, 1);
|
||||
if (!(s = buffer_read_line(&buf)))
|
||||
break;
|
||||
buffer_copy_bytes(strtouint32(s) + 1);
|
||||
buffer_copy_bytes(&buf, strtouint32(s) + 1);
|
||||
}
|
||||
if (buffer_deinit())
|
||||
if (buffer_deinit(&buf))
|
||||
die("input error");
|
||||
if (ferror(stdout))
|
||||
die("output error");
|
||||
buffer_reset();
|
||||
buffer_reset(&buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user