summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxi <xi@18f92427-320e-0410-9341-c67f048884a3>2009-08-29 21:26:11 +0000
committerxi <xi@18f92427-320e-0410-9341-c67f048884a3>2009-08-29 21:26:11 +0000
commit0c68ad2a992bc8ffa963eff6d371db43856ecdd1 (patch)
tree3290c4dd3f9efb3bfbc5525ba38144206c6ba84f
parentf3625114940216f48a45441c05e51fb23d8497ad (diff)
downloadlibyaml-0c68ad2a992bc8ffa963eff6d371db43856ecdd1.tar.gz
Do not update the raw buffer when not necessary (fixes #123).
git-svn-id: http://svn.pyyaml.org/libyaml/branches/stable@352 18f92427-320e-0410-9341-c67f048884a3
-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. */