path: root/vcs-svn
diff options
authorJonathan Nieder <>2010-10-11 02:51:21 (GMT)
committerJonathan Nieder <>2011-03-07 07:32:51 (GMT)
commitefc749b48f729992d838484d652ba24f5291ee28 (patch)
treed1d410f8035f5632f5b286554df78af04c1c8250 /vcs-svn
parente75316de5340e0ba3ac75937c59fa2c9d6ab48d7 (diff)
vcs-svn: allow input errors to be detected promptly
The line_buffer library silently flags input errors until buffer_deinit time; unfortunately, by that point usually errno is invalid. Expose the error flag so callers can check for and report errors early for easy debugging. some_error_prone_operation(...); if (buffer_ferror(buf)) return error("input error: %s", strerror(errno)); Signed-off-by: Jonathan Nieder <> Signed-off-by: David Barr <> Signed-off-by: Jonathan Nieder <>
Diffstat (limited to 'vcs-svn')
2 files changed, 6 insertions, 0 deletions
diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c
index aedf105..eb8a6a7 100644
--- a/vcs-svn/line_buffer.c
+++ b/vcs-svn/line_buffer.c
@@ -59,6 +59,11 @@ long buffer_tmpfile_prepare_to_read(struct line_buffer *buf)
return pos;
+int buffer_ferror(struct line_buffer *buf)
+ return ferror(buf->infile);
int buffer_read_char(struct line_buffer *buf)
return fgetc(buf->infile);
diff --git a/vcs-svn/line_buffer.h b/vcs-svn/line_buffer.h
index 96ce966..3c9629e 100644
--- a/vcs-svn/line_buffer.h
+++ b/vcs-svn/line_buffer.h
@@ -21,6 +21,7 @@ int buffer_tmpfile_init(struct line_buffer *buf);
FILE *buffer_tmpfile_rewind(struct line_buffer *buf); /* prepare to write. */
long buffer_tmpfile_prepare_to_read(struct line_buffer *buf);
+int buffer_ferror(struct line_buffer *buf);
char *buffer_read_line(struct line_buffer *buf);
char *buffer_read_string(struct line_buffer *buf, uint32_t len);
int buffer_read_char(struct line_buffer *buf);