Changeset 264 for libyaml/trunk/src/reader.c
- Timestamp:
- 12/27/07 12:14:01 (5 years ago)
- File:
-
- 1 edited
-
libyaml/trunk/src/reader.c (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libyaml/trunk/src/reader.c
r263 r264 36 36 /* Ensure that we had enough bytes in the raw buffer. */ 37 37 38 while (!parser->is_eof && parser->raw_input. capacity< 3) {38 while (!parser->is_eof && parser->raw_input.length < 3) { 39 39 if (!yaml_parser_update_raw_buffer(parser)) { 40 40 return 0; … … 44 44 /* Determine the encoding. */ 45 45 46 if (parser->raw_input. capacity>= 246 if (parser->raw_input.length >= 2 47 47 && !memcmp(parser->raw_input.buffer, BOM_UTF16LE, 2)) { 48 48 parser->encoding = YAML_UTF16LE_ENCODING; … … 50 50 parser->offset = 2; 51 51 } 52 else if (parser->raw_input. capacity>= 252 else if (parser->raw_input.length >= 2 53 53 && !memcmp(parser->raw_input.buffer, BOM_UTF16BE, 2)) { 54 54 parser->encoding = YAML_UTF16BE_ENCODING; … … 56 56 parser->offset = 2; 57 57 } 58 else if (parser->raw_input. capacity>= 358 else if (parser->raw_input.length >= 3 59 59 && !memcmp(parser->raw_input.buffer, BOM_UTF8, 3)) { 60 60 parser->encoding = YAML_UTF8_ENCODING; … … 81 81 82 82 if (parser->raw_input.pointer == 0 && 83 parser->raw_input. capacity == RAW_INPUT_BUFFER_CAPACITY)83 parser->raw_input.length == parser->raw_input.capacity) 84 84 return 1; 85 85 … … 92 92 93 93 if (parser->raw_input.pointer > 0 && 94 parser->raw_input.pointer < parser->raw_input. capacity) {94 parser->raw_input.pointer < parser->raw_input.length) { 95 95 memmove(parser->raw_input.buffer, 96 96 parser->raw_input.buffer + parser->raw_input.pointer, 97 parser->raw_input. capacity- parser->raw_input.pointer);98 } 99 parser->raw_input. capacity-= parser->raw_input.pointer;97 parser->raw_input.length - parser->raw_input.pointer); 98 } 99 parser->raw_input.length -= parser->raw_input.pointer; 100 100 parser->raw_input.pointer = 0; 101 101 … … 103 103 104 104 if (!parser->reader(parser->reader_data, 105 parser->raw_input.buffer + parser->raw_input. capacity,106 RAW_INPUT_BUFFER_CAPACITY - parser->raw_input.capacity,105 parser->raw_input.buffer + parser->raw_input.length, 106 parser->raw_input.capacity - parser->raw_input.length, 107 107 &length)) { 108 return READER_ERROR_INIT(parser, " Inputerror", parser->offset);109 } 110 parser->raw_input. capacity+= length;108 return READER_ERROR_INIT(parser, "read handler error", parser->offset); 109 } 110 parser->raw_input.length += length; 111 111 if (!length) { 112 112 parser->is_eof = 1; … … 126 126 yaml_parser_update_buffer(yaml_parser_t *parser, size_t length) 127 127 { 128 size_t old_capacity;129 130 128 assert(parser->reader); /* Read handler must be set. */ 131 129 132 130 /* If the EOF flag is set and the raw buffer is empty, do nothing. */ 133 131 134 if (parser->is_eof && parser->raw_input.pointer == parser->raw_input. capacity)132 if (parser->is_eof && parser->raw_input.pointer == parser->raw_input.length) 135 133 return 1; 136 134 … … 150 148 151 149 if (parser->input.pointer > 0 && 152 parser->input.pointer < parser->input. capacity) {150 parser->input.pointer < parser->input.length) { 153 151 memmove(parser->input.buffer, 154 152 parser->input.buffer + parser->input.pointer, 155 parser->input. capacity- parser->input.pointer);156 parser->input. capacity-= parser->input.pointer;157 } 158 else if (parser->input.pointer == parser->input. capacity) {159 parser->input. capacity= 0;160 } 161 162 /* S et the pointer to the end of the buffer. */163 164 parser->input.pointer = parser->input. capacity;153 parser->input.length - parser->input.pointer); 154 parser->input.length -= parser->input.pointer; 155 } 156 else if (parser->input.pointer == parser->input.length) { 157 parser->input.length = 0; 158 } 159 160 /* Switch the buffer to the output mode. */ 161 162 parser->input.pointer = parser->input.length; 165 163 166 164 /* Fill the buffer until it has enough characters. */ … … 174 172 /* Decode the raw buffer. */ 175 173 176 while (parser->raw_input.pointer != parser->raw_input.capacity)174 while (parser->raw_input.pointer < parser->raw_input.length) 177 175 { 178 176 size_t raw_unread = 179 parser->raw_input. capacity- parser->raw_input.pointer;177 parser->raw_input.length - parser->raw_input.pointer; 180 178 unsigned int value = 0, value2 = 0; 181 179 int is_incomplete = 0; … … 223 221 if (!width) 224 222 return DECODER_ERROR_INIT(parser, 225 " Invalid leading UTF-8 octet",223 "invalid leading UTF-8 octet", 226 224 parser->offset, octet); 227 225 … … 231 229 if (parser->is_eof) { 232 230 return DECODER_ERROR_INIT(parser, 233 " Incomplete UTF-8 octet sequence",231 "incomplete UTF-8 octet sequence", 234 232 parser->offset, -1); 235 233 } … … 255 253 if ((octet & 0xC0) != 0x80) 256 254 return DECODER_ERROR_INIT(parser, 257 " Invalid trailing UTF-8 octet",255 "invalid trailing UTF-8 octet", 258 256 parser->offset+idx, octet); 259 257 … … 270 268 (width == 4 && value >= 0x10000))) 271 269 return DECODER_ERROR_INIT(parser, 272 " Invalid length of a UTF-8 sequence",270 "invalid length of a UTF-8 sequence", 273 271 parser->offset, -1); 274 272 … … 277 275 if ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF) 278 276 return DECODER_ERROR_INIT(parser, 279 " Invalid Unicode character",277 "invalid Unicode character", 280 278 parser->offset, value); 281 279 … … 319 317 if (parser->is_eof) { 320 318 return DECODER_ERROR_INIT(parser, 321 " Incomplete UTF-16 character",319 "incomplete UTF-16 character", 322 320 parser->offset, -1); 323 321 } … … 335 333 if ((value & 0xFC00) == 0xDC00) 336 334 return DECODER_ERROR_INIT(parser, 337 " Unexpected low surrogate area",335 "unexpected low surrogate area", 338 336 parser->offset, value); 339 337 … … 349 347 if (parser->is_eof) { 350 348 return DECODER_ERROR_INIT(parser, 351 " Incomplete UTF-16 surrogate pair",349 "incomplete UTF-16 surrogate pair", 352 350 parser->offset, -1); 353 351 } … … 365 363 if ((value2 & 0xFC00) != 0xDC00) 366 364 return DECODER_ERROR_INIT(parser, 367 " Expected low surrogate area",365 "expected low surrogate area", 368 366 parser->offset+2, value2); 369 367 … … 380 378 381 379 default: 382 assert( 1); /* Impossible. */380 assert(0); /* Impossible. */ 383 381 } 384 382 … … 401 399 || (value >= 0x10000 && value <= 0x10FFFF))) 402 400 return DECODER_ERROR_INIT(parser, 403 " Control characters are not allowed",401 "control characters are not allowed", 404 402 parser->offset, value); 405 403 … … 446 444 447 445 } 448 /* Swap the pointer with the end of the buffer. */ 449 450 old_capacity = parser->input.capacity; 451 parser->input. capacity= parser->input.pointer;452 parser->input.pointer = old_capacity;446 447 /* Switch the the buffer back to the input mode. */ 448 449 parser->input.length = parser->input.pointer; 450 parser->input.pointer = 0; 453 451 454 452 return 1;
Note: See TracChangeset
for help on using the changeset viewer.
