diff options
author | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2009-08-29 21:26:11 +0000 |
---|---|---|
committer | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2009-08-29 21:26:11 +0000 |
commit | 0c68ad2a992bc8ffa963eff6d371db43856ecdd1 (patch) | |
tree | 3290c4dd3f9efb3bfbc5525ba38144206c6ba84f | |
parent | f3625114940216f48a45441c05e51fb23d8497ad (diff) | |
download | libyaml-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.c | 9 |
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. */ |