summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Simonov <xi@resolvent.net>2009-08-29 21:26:11 +0000
committerKirill Simonov <xi@resolvent.net>2009-08-29 21:26:11 +0000
commit1893dabd78f6707d07882049997b7c2879bf02b9 (patch)
tree3290c4dd3f9efb3bfbc5525ba38144206c6ba84f
parent252c575a5cd67b2207ef79e6b29d6f4d12f21ada (diff)
downloadlibyaml-hg-1893dabd78f6707d07882049997b7c2879bf02b9.tar.gz
Do not update the raw buffer when not necessary (fixes #123).
-rw-r--r--src/reader.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/reader.c b/src/reader.c
index 6fc1a62..829e32d 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -141,6 +141,8 @@ yaml_parser_update_raw_buffer(yaml_parser_t *parser)
YAML_DECLARE(int)
yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
{
+ int first = 1;
+
assert(parser->read_handler); /* Read handler must be set. */
/* If the EOF flag is set and the raw buffer is empty, do nothing. */
@@ -178,9 +180,12 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
while (parser->unread < length)
{
- /* Fill the raw buffer. */
+ /* Fill the raw buffer if necessary. */
- if (!yaml_parser_update_raw_buffer(parser)) return 0;
+ if (!first || parser->raw_buffer.pointer == parser->raw_buffer.last) {
+ if (!yaml_parser_update_raw_buffer(parser)) return 0;
+ }
+ first = 0;
/* Decode the raw buffer. */