vcs-svn: improve reporting of input errors
Catch input errors and exit early enough to print a reasonable diagnosis based on errno. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: David Barr <david.barr@cordelta.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
This commit is contained in:
@ -63,14 +63,23 @@ void fast_export_commit(uint32_t revision, uint32_t author, char *log,
|
||||
printf("progress Imported commit %"PRIu32".\n\n", revision);
|
||||
}
|
||||
|
||||
static void die_short_read(struct line_buffer *input)
|
||||
{
|
||||
if (buffer_ferror(input))
|
||||
die_errno("error reading dump file");
|
||||
die("invalid dump: unexpected end of file");
|
||||
}
|
||||
|
||||
void fast_export_blob(uint32_t mode, uint32_t mark, uint32_t len, struct line_buffer *input)
|
||||
{
|
||||
if (mode == REPO_MODE_LNK) {
|
||||
/* svn symlink blobs start with "link " */
|
||||
buffer_skip_bytes(input, 5);
|
||||
len -= 5;
|
||||
if (buffer_skip_bytes(input, 5) != 5)
|
||||
die_short_read(input);
|
||||
}
|
||||
printf("blob\nmark :%"PRIu32"\ndata %"PRIu32"\n", mark, len);
|
||||
buffer_copy_bytes(input, len);
|
||||
if (buffer_copy_bytes(input, len) != len)
|
||||
die_short_read(input);
|
||||
fputc('\n', stdout);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user