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
commit9a426aa5047749a81a1b4af1bcb7625cd51d78c1 (patch)
tree3290c4dd3f9efb3bfbc5525ba38144206c6ba84f
parente0eaa175ac03f2bbcf3cbc61a760c47ade1e7778 (diff)
downloadlibyaml-git-9a426aa5047749a81a1b4af1bcb7625cd51d78c1.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. */