[PATCH 08/16] vcs-svn: Let callers peek ahead to find stream end

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jonathan Nieder
Date: Sunday, October 10, 2010 - 7:47 pm

The buffer_at_eof() function returns 1 if and only if all input from
the input stream has been exhausted (because of EOF or error).  The
implementation calls fgetc() followed by ungetc() to force an EOF
condition when there is no more input remaining.

Like many functions in the line_buffer API, this function is not
thread-safe.  It could be made to be so with a mutex if needed.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 vcs-svn/line_buffer.c |   10 ++++++++++
 vcs-svn/line_buffer.h |    1 +
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c
index 6dd0189..19caa21 100644
--- a/vcs-svn/line_buffer.c
+++ b/vcs-svn/line_buffer.c
@@ -27,6 +27,16 @@ int buffer_deinit(struct line_buffer *buf)
 	return err;
 }
 
+int buffer_at_eof(struct line_buffer *buf)
+{
+	int ch;
+	if ((ch = fgetc(buf->infile)) == EOF)
+		return 1;
+	if (ungetc(ch, buf->infile) == EOF)
+		return error("cannot unget %c: %s\n", ch, strerror(errno));
+	return 0;
+}
+
 /* Read a line without trailing newline. */
 char *buffer_read_line(struct line_buffer *buf)
 {
diff --git a/vcs-svn/line_buffer.h b/vcs-svn/line_buffer.h
index 873b0e4..0269aed 100644
--- a/vcs-svn/line_buffer.h
+++ b/vcs-svn/line_buffer.h
@@ -14,6 +14,7 @@ struct line_buffer {
 
 int buffer_init(struct line_buffer *buf, const char *filename);
 int buffer_deinit(struct line_buffer *buf);
+int buffer_at_eof(struct line_buffer *buf);
 char *buffer_read_line(struct line_buffer *buf);
 char *buffer_read_string(struct line_buffer *buf, uint32_t len);
 void buffer_read_binary(struct strbuf *sb, uint32_t len, struct line_buffer *f);
-- 
1.7.2.3

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/8] Resurrect rr/svn-export, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 1/8] Export parse_date_basic() to convert a date st ..., Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 2/8] Introduce vcs-svn lib, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 3/8] Add memory pool library, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 4/8] Add treap implementation, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 5/8] Add string-specific memory pool, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 6/8] Add stream helper library, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 7/8] Add infrastructure to write revisions in fast- ..., Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 8/8] Add SVN dump parser, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
Re: [PATCH 2/8] Introduce vcs-svn lib, Jonathan Nieder, (Thu Jul 15, 10:46 am)
Re: [PATCH 3/8] Add memory pool library, Jonathan Nieder, (Thu Jul 15, 11:57 am)
Re: [PATCH 4/8] Add treap implementation, Jonathan Nieder, (Thu Jul 15, 12:09 pm)
Re: [PATCH 3/8] Add memory pool library, Ramkumar Ramachandra, (Thu Jul 15, 12:12 pm)
Re: [PATCH 2/8] Introduce vcs-svn lib, Ramkumar Ramachandra, (Thu Jul 15, 12:15 pm)
Re: [PATCH 4/8] Add treap implementation, Ramkumar Ramachandra, (Thu Jul 15, 12:18 pm)
Re: [PATCH 6/8] Add stream helper library, Jonathan Nieder, (Thu Jul 15, 12:19 pm)
Re: [PATCH 8/8] Add SVN dump parser, Jonathan Nieder, (Thu Jul 15, 12:52 pm)
Re: [PATCH 8/8] Add SVN dump parser, Jonathan Nieder, (Thu Jul 15, 1:04 pm)
Re: [PATCH 0/8] Resurrect rr/svn-export, Jonathan Nieder, (Fri Jul 16, 3:13 am)
[PATCH 3/9] Add memory pool library, Jonathan Nieder, (Fri Jul 16, 3:16 am)
[PATCH 4/9] Add treap implementation, Jonathan Nieder, (Fri Jul 16, 3:23 am)
Re: [PATCH 4/9] Add treap implementation, Jonathan Nieder, (Fri Jul 16, 11:26 am)
[PATCH 0/10] rr/svn-export reroll, Jonathan Nieder, (Mon Aug 9, 2:57 pm)
[PATCH 02/10] Introduce vcs-svn lib, Jonathan Nieder, (Mon Aug 9, 3:04 pm)
[PATCH 03/10] Add memory pool library, Jonathan Nieder, (Mon Aug 9, 3:11 pm)
[PATCH 04/10] Add treap implementation, Jonathan Nieder, (Mon Aug 9, 3:17 pm)
[PATCH 05/10] Add string-specific memory pool, Jonathan Nieder, (Mon Aug 9, 3:34 pm)
[PATCH 06/10] Add stream helper library, Jonathan Nieder, (Mon Aug 9, 3:39 pm)
[PATCH 08/10] SVN dump parser, Jonathan Nieder, (Mon Aug 9, 3:55 pm)
PATCH 09/10] Update svn-fe manual, Jonathan Nieder, (Mon Aug 9, 3:55 pm)
Re: [PATCH 0/10] rr/svn-export reroll, Ramkumar Ramachandra, (Tue Aug 10, 5:53 am)
Re: [PATCH 0/10] rr/svn-export reroll, Jonathan Nieder, (Tue Aug 10, 6:53 pm)
Re: [PATCH 05/10] Add string-specific memory pool, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 04/10] Add treap implementation, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 08/10] SVN dump parser, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 05/10] Add string-specific memory pool, Jonathan Nieder, (Thu Aug 12, 2:30 pm)
Re: [PATCH 04/10] Add treap implementation, Jonathan Nieder, (Thu Aug 12, 3:02 pm)
Re: [PATCH 04/10] Add treap implementation, Jonathan Nieder, (Thu Aug 12, 3:11 pm)
Re: [PATCH 04/10] Add treap implementation, Junio C Hamano, (Thu Aug 12, 3:44 pm)
[PATCH/WIP 00/16] svn delta applier, Jonathan Nieder, (Sun Oct 10, 7:34 pm)
[PATCH 01/16] vcs-svn: Eliminate global byte_buffer[] array, Jonathan Nieder, (Sun Oct 10, 7:37 pm)
[PATCH 03/16] vcs-svn: Collect line_buffer data in a struct, Jonathan Nieder, (Sun Oct 10, 7:39 pm)
[PATCH 07/16] vcs-svn: Add binary-safe read() function, Jonathan Nieder, (Sun Oct 10, 7:47 pm)
[PATCH 08/16] vcs-svn: Let callers peek ahead to find stre ..., Jonathan Nieder, (Sun Oct 10, 7:47 pm)
[PATCH 10/16] vcs-svn: Allow character-oriented input, Jonathan Nieder, (Sun Oct 10, 7:52 pm)
[PATCH 13/16] vcs-svn: Learn to check for SVN\0 magic, Jonathan Nieder, (Sun Oct 10, 7:58 pm)
[PATCH 14/16] compat: helper for detecting unsigned overflow, Jonathan Nieder, (Sun Oct 10, 7:59 pm)
[PATCH/RFC 16'/16] vcs-svn: Add svn delta parser, Jonathan Nieder, (Sun Oct 10, 9:01 pm)
[PATCH/RFC 0/11] Building up the delta parser, Jonathan Nieder, (Wed Oct 13, 2:17 am)
[PATCH 02/11] vcs-svn: Skeleton of an svn delta parser, Jonathan Nieder, (Wed Oct 13, 2:21 am)
[PATCH 04/11] vcs-svn: Read inline data from deltas, Jonathan Nieder, (Wed Oct 13, 2:35 am)
[PATCH 05/11] vcs-svn: Read instructions from deltas, Jonathan Nieder, (Wed Oct 13, 2:38 am)
[PATCH 07/11] vcs-svn: Check declared number of output bytes, Jonathan Nieder, (Wed Oct 13, 2:41 am)
[PATCH 09/11] vcs-svn: Let deltas use data from postimage, Jonathan Nieder, (Wed Oct 13, 2:50 am)
[PATCH 11/11] vcs-svn: Allow deltas to copy from preimage, Jonathan Nieder, (Wed Oct 13, 2:58 am)
[PATCH 11/11] vcs-svn: Allow deltas to copy from preimage, Jonathan Nieder, (Wed Oct 13, 3:00 am)
Re: [PATCH/RFC 0/11] Building up the delta parser, Ramkumar Ramachandra, (Mon Oct 18, 10:00 am)
Re: [PATCH/RFC 0/11] Building up the delta parser, Jonathan Nieder, (Mon Oct 18, 10:03 am)