on master help sign in
libyaml C library update (thanks @jgm)
commit583abc2f77fa9fb4dfb3c0e38faac08181851c42 authorMichael Snoyman <michael@snoyman.com> dateSun 2 Feb 2014, 17:47 (13 years ago) parent045e8cc
10 files changed+95−47
libyaml/api.c+5−1 libyaml/emitter.c+49−17 libyaml/loader.c+3−1 libyaml/parser.c+4−4 libyaml/reader.c+18−13 libyaml/scanner.c+5−3 libyaml/writer.c+2−2 libyaml/yaml.h+1−3 libyaml/yaml_private.h+7−2 yaml.cabal+1−1
libyaml/api.c+5−1
@@ -1367,7 +1367,8 @@ yaml_document_append_mapping_pair(yaml_document_t *document,
13671367 struct {
13681368 yaml_error_type_t error;
13691369 } context;
1370− yaml_node_pair_t pair = { key, value };
1370+
1371+ yaml_node_pair_t pair;
13711372
13721373 assert(document); /* Non-NULL document is required. */
13731374 assert(mapping > 0
@@ -1380,6 +1381,9 @@ yaml_document_append_mapping_pair(yaml_document_t *document,
13801381 assert(value > 0 && document->nodes.start + value <= document->nodes.top);
13811382 /* Valid value id is required. */
13821383
1384+ pair.key = key;
1385+ pair.value = value;
1386+
13831387 if (!PUSH(&context,
13841388 document->nodes.start[mapping-1].data.mapping.pairs, pair))
13851389 return 0;
libyaml/emitter.c+49−17
@@ -1154,7 +1154,7 @@ yaml_emitter_check_simple_key(yaml_emitter_t *emitter)
11541154 break;
11551155
11561156 case YAML_MAPPING_START_EVENT:
1157− if (!yaml_emitter_check_empty_sequence(emitter))
1157+ if (!yaml_emitter_check_empty_mapping(emitter))
11581158 return 0;
11591159 length += emitter->anchor_data.anchor_length
11601160 + emitter->tag_data.handle_length
@@ -1349,10 +1349,15 @@ static int
13491349yaml_emitter_analyze_tag_directive(yaml_emitter_t *emitter,
13501350 yaml_tag_directive_t tag_directive)
13511351{
1352− yaml_string_t handle = STRING(tag_directive.handle,
1353− strlen((char *)tag_directive.handle));
1354− yaml_string_t prefix = STRING(tag_directive.prefix,
1355− strlen((char *)tag_directive.prefix));
1352+ yaml_string_t handle;
1353+ yaml_string_t prefix;
1354+ size_t handle_length;
1355+ size_t prefix_length;
1356+
1357+ handle_length = strlen((char *)tag_directive.handle);
1358+ prefix_length = strlen((char *)tag_directive.prefix);
1359+ STRING_ASSIGN(handle, tag_directive.handle, handle_length);
1360+ STRING_ASSIGN(prefix, tag_directive.prefix, prefix_length);
13561361
13571362 if (handle.start == handle.end) {
13581363 return yaml_emitter_set_emitter_error(emitter,
@@ -1395,7 +1400,11 @@ static int
13951400yaml_emitter_analyze_anchor(yaml_emitter_t *emitter,
13961401 yaml_char_t *anchor, int alias)
13971402{
1398− yaml_string_t string = STRING(anchor, strlen((char *)anchor));
1403+ size_t anchor_length;
1404+ yaml_string_t string;
1405+
1406+ anchor_length = strlen((char *)anchor);
1407+ STRING_ASSIGN(string, anchor, anchor_length);
13991408
14001409 if (string.start == string.end) {
14011410 return yaml_emitter_set_emitter_error(emitter, alias ?
@@ -1427,9 +1436,13 @@ static int
14271436yaml_emitter_analyze_tag(yaml_emitter_t *emitter,
14281437 yaml_char_t *tag)
14291438{
1430− yaml_string_t string = STRING(tag, strlen((char *)tag));
1439+ size_t tag_length;
1440+ yaml_string_t string;
14311441 yaml_tag_directive_t *tag_directive;
14321442
1443+ tag_length = strlen((char *)tag);
1444+ STRING_ASSIGN(string, tag, tag_length);
1445+
14331446 if (string.start == string.end) {
14341447 return yaml_emitter_set_emitter_error(emitter,
14351448 "tag value must not be empty");
@@ -1466,7 +1479,7 @@ static int
14661479yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
14671480 yaml_char_t *value, size_t length)
14681481{
1469− yaml_string_t string = STRING(value, length);
1482+ yaml_string_t string;
14701483
14711484 int block_indicators = 0;
14721485 int flow_indicators = 0;
@@ -1485,6 +1498,8 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
14851498 int previous_space = 0;
14861499 int previous_break = 0;
14871500
1501+ STRING_ASSIGN(string, value, length);
1502+
14881503 emitter->scalar_data.value = value;
14891504 emitter->scalar_data.length = length;
14901505
@@ -1772,7 +1787,11 @@ yaml_emitter_write_indicator(yaml_emitter_t *emitter,
17721787 char *indicator, int need_whitespace,
17731788 int is_whitespace, int is_indention)
17741789{
1775− yaml_string_t string = STRING((yaml_char_t *)indicator, strlen(indicator));
1790+ size_t indicator_length;
1791+ yaml_string_t string;
1792+
1793+ indicator_length = strlen(indicator);
1794+ STRING_ASSIGN(string, (yaml_char_t *)indicator, indicator_length);
17761795
17771796 if (need_whitespace && !emitter->whitespace) {
17781797 if (!PUT(emitter, ' ')) return 0;
@@ -1793,7 +1812,8 @@ static int
17931812yaml_emitter_write_anchor(yaml_emitter_t *emitter,
17941813 yaml_char_t *value, size_t length)
17951814{
1796− yaml_string_t string = STRING(value, length);
1815+ yaml_string_t string;
1816+ STRING_ASSIGN(string, value, length);
17971817
17981818 while (string.pointer != string.end) {
17991819 if (!WRITE(emitter, string)) return 0;
@@ -1809,7 +1829,8 @@ static int
18091829yaml_emitter_write_tag_handle(yaml_emitter_t *emitter,
18101830 yaml_char_t *value, size_t length)
18111831{
1812− yaml_string_t string = STRING(value, length);
1832+ yaml_string_t string;
1833+ STRING_ASSIGN(string, value, length);
18131834
18141835 if (!emitter->whitespace) {
18151836 if (!PUT(emitter, ' ')) return 0;
@@ -1830,7 +1851,8 @@ yaml_emitter_write_tag_content(yaml_emitter_t *emitter,
18301851 yaml_char_t *value, size_t length,
18311852 int need_whitespace)
18321853{
1833− yaml_string_t string = STRING(value, length);
1854+ yaml_string_t string;
1855+ STRING_ASSIGN(string, value, length);
18341856
18351857 if (need_whitespace && !emitter->whitespace) {
18361858 if (!PUT(emitter, ' ')) return 0;
@@ -1876,10 +1898,12 @@ static int
18761898yaml_emitter_write_plain_scalar(yaml_emitter_t *emitter,
18771899 yaml_char_t *value, size_t length, int allow_breaks)
18781900{
1879− yaml_string_t string = STRING(value, length);
1901+ yaml_string_t string;
18801902 int spaces = 0;
18811903 int breaks = 0;
18821904
1905+ STRING_ASSIGN(string, value, length);
1906+
18831907 if (!emitter->whitespace) {
18841908 if (!PUT(emitter, ' ')) return 0;
18851909 }
@@ -1934,10 +1958,12 @@ static int
19341958yaml_emitter_write_single_quoted_scalar(yaml_emitter_t *emitter,
19351959 yaml_char_t *value, size_t length, int allow_breaks)
19361960{
1937− yaml_string_t string = STRING(value, length);
1961+ yaml_string_t string;
19381962 int spaces = 0;
19391963 int breaks = 0;
19401964
1965+ STRING_ASSIGN(string, value, length);
1966+
19411967 if (!yaml_emitter_write_indicator(emitter, "'", 1, 0, 0))
19421968 return 0;
19431969
@@ -1995,9 +2021,11 @@ static int
19952021yaml_emitter_write_double_quoted_scalar(yaml_emitter_t *emitter,
19962022 yaml_char_t *value, size_t length, int allow_breaks)
19972023{
1998− yaml_string_t string = STRING(value, length);
2024+ yaml_string_t string;
19992025 int spaces = 0;
20002026
2027+ STRING_ASSIGN(string, value, length);
2028+
20012029 if (!yaml_emitter_write_indicator(emitter, "\"", 1, 0, 0))
20022030 return 0;
20032031
@@ -2207,9 +2235,11 @@ static int
22072235yaml_emitter_write_literal_scalar(yaml_emitter_t *emitter,
22082236 yaml_char_t *value, size_t length)
22092237{
2210− yaml_string_t string = STRING(value, length);
2238+ yaml_string_t string;
22112239 int breaks = 1;
22122240
2241+ STRING_ASSIGN(string, value, length);
2242+
22132243 if (!yaml_emitter_write_indicator(emitter, "|", 1, 0, 0))
22142244 return 0;
22152245 if (!yaml_emitter_write_block_scalar_hints(emitter, string))
@@ -2244,10 +2274,12 @@ static int
22442274yaml_emitter_write_folded_scalar(yaml_emitter_t *emitter,
22452275 yaml_char_t *value, size_t length)
22462276{
2247− yaml_string_t string = STRING(value, length);
2277+ yaml_string_t string;
22482278 int breaks = 1;
22492279 int leading_spaces = 1;
22502280
2281+ STRING_ASSIGN(string, value, length);
2282+
22512283 if (!yaml_emitter_write_indicator(emitter, ">", 1, 0, 0))
22522284 return 0;
22532285 if (!yaml_emitter_write_block_scalar_hints(emitter, string))
libyaml/loader.c+3−1
@@ -225,11 +225,13 @@ static int
225225yaml_parser_register_anchor(yaml_parser_t *parser,
226226 int index, yaml_char_t *anchor)
227227{
228− yaml_alias_data_t data = { anchor, index, { 0, 0, 0 } };
228+ yaml_alias_data_t data;
229229 yaml_alias_data_t *alias_data;
230230
231231 if (!anchor) return 1;
232232
233+ data.anchor = anchor;
234+ data.index = index;
233235 data.mark = parser->document->nodes.start[index-1].start_mark;
234236
235237 for (alias_data = parser->aliases.start;
libyaml/parser.c+4−4
@@ -1280,10 +1280,10 @@ yaml_parser_process_directives(yaml_parser_t *parser,
12801280 }
12811281
12821282 else if (token->type == YAML_TAG_DIRECTIVE_TOKEN) {
1283− yaml_tag_directive_t value = {
1284− token->data.tag_directive.handle,
1285− token->data.tag_directive.prefix
1286− };
1283+ yaml_tag_directive_t value;
1284+ value.handle = token->data.tag_directive.handle;
1285+ value.prefix = token->data.tag_directive.prefix;
1286+
12871287 if (!yaml_parser_append_tag_directive(parser, value, 0,
12881288 token->start_mark))
12891289 goto error;
libyaml/reader.c+18−13
@@ -120,7 +120,7 @@ yaml_parser_update_raw_buffer(yaml_parser_t *parser)
120120
121121 if (!parser->read_handler(parser->read_handler_data, parser->raw_buffer.last,
122122 parser->raw_buffer.end - parser->raw_buffer.last, &size_read)) {
123− return yaml_parser_set_reader_error(parser, "Input error",
123+ return yaml_parser_set_reader_error(parser, "input error",
124124 parser->offset, -1);
125125 }
126126 parser->raw_buffer.last += size_read;
@@ -141,6 +141,8 @@ yaml_parser_update_raw_buffer(yaml_parser_t *parser)
141141YAML_DECLARE(int)
142142yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
143143{
144+ int first = 1;
145+
144146 assert(parser->read_handler); /* Read handler must be set. */
145147
146148 /* 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)
178180
179181 while (parser->unread < length)
180182 {
181− /* Fill the raw buffer. */
183+ /* Fill the raw buffer if necessary. */
182184
183− if (!yaml_parser_update_raw_buffer(parser)) return 0;
185+ if (!first || parser->raw_buffer.pointer == parser->raw_buffer.last) {
186+ if (!yaml_parser_update_raw_buffer(parser)) return 0;
187+ }
188+ first = 0;
184189
185190 /* Decode the raw buffer. */
186191
@@ -232,7 +237,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
232237
233238 if (!width)
234239 return yaml_parser_set_reader_error(parser,
235− "Invalid leading UTF-8 octet",
240+ "invalid leading UTF-8 octet",
236241 parser->offset, octet);
237242
238243 /* Check if the raw buffer contains an incomplete character. */
@@ -240,7 +245,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
240245 if (width > raw_unread) {
241246 if (parser->eof) {
242247 return yaml_parser_set_reader_error(parser,
243− "Incomplete UTF-8 octet sequence",
248+ "incomplete UTF-8 octet sequence",
244249 parser->offset, -1);
245250 }
246251 incomplete = 1;
@@ -264,7 +269,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
264269
265270 if ((octet & 0xC0) != 0x80)
266271 return yaml_parser_set_reader_error(parser,
267− "Invalid trailing UTF-8 octet",
272+ "invalid trailing UTF-8 octet",
268273 parser->offset+k, octet);
269274
270275 /* Decode the octet. */
@@ -279,14 +284,14 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
279284 (width == 3 && value >= 0x800) ||
280285 (width == 4 && value >= 0x10000)))
281286 return yaml_parser_set_reader_error(parser,
282− "Invalid length of a UTF-8 sequence",
287+ "invalid length of a UTF-8 sequence",
283288 parser->offset, -1);
284289
285290 /* Check the range of the value. */
286291
287292 if ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF)
288293 return yaml_parser_set_reader_error(parser,
289− "Invalid Unicode character",
294+ "invalid Unicode character",
290295 parser->offset, value);
291296
292297 break;
@@ -328,7 +333,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
328333 if (raw_unread < 2) {
329334 if (parser->eof) {
330335 return yaml_parser_set_reader_error(parser,
331− "Incomplete UTF-16 character",
336+ "incomplete UTF-16 character",
332337 parser->offset, -1);
333338 }
334339 incomplete = 1;
@@ -344,7 +349,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
344349
345350 if ((value & 0xFC00) == 0xDC00)
346351 return yaml_parser_set_reader_error(parser,
347− "Unexpected low surrogate area",
352+ "unexpected low surrogate area",
348353 parser->offset, value);
349354
350355 /* Check for a high surrogate area. */
@@ -358,7 +363,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
358363 if (raw_unread < 4) {
359364 if (parser->eof) {
360365 return yaml_parser_set_reader_error(parser,
361− "Incomplete UTF-16 surrogate pair",
366+ "incomplete UTF-16 surrogate pair",
362367 parser->offset, -1);
363368 }
364369 incomplete = 1;
@@ -374,7 +379,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
374379
375380 if ((value2 & 0xFC00) != 0xDC00)
376381 return yaml_parser_set_reader_error(parser,
377− "Expected low surrogate area",
382+ "expected low surrogate area",
378383 parser->offset+2, value2);
379384
380385 /* Generate the value of the surrogate pair. */
@@ -409,7 +414,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
409414 || (value >= 0xE000 && value <= 0xFFFD)
410415 || (value >= 0x10000 && value <= 0x10FFFF)))
411416 return yaml_parser_set_reader_error(parser,
412− "Control characters are not allowed",
417+ "control characters are not allowed",
413418 parser->offset, value);
414419
415420 /* Move the raw pointers. */
libyaml/scanner.c+5−3
@@ -1118,9 +1118,11 @@ yaml_parser_save_simple_key(yaml_parser_t *parser)
11181118
11191119 if (parser->simple_key_allowed)
11201120 {
1121− yaml_simple_key_t simple_key = { 1, required,
1122− parser->tokens_parsed + parser->tokens.tail - parser->tokens.head,
1123− { 0, 0, 0 } };
1121+ yaml_simple_key_t simple_key;
1122+ simple_key.possible = 1;
1123+ simple_key.required = required;
1124+ simple_key.token_number =
1125+ parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);
11241126 simple_key.mark = parser->mark;
11251127
11261128 if (!yaml_parser_remove_simple_key(parser)) return 0;
libyaml/writer.c+2−2
@@ -58,7 +58,7 @@ yaml_emitter_flush(yaml_emitter_t *emitter)
5858 return 1;
5959 }
6060 else {
61− return yaml_emitter_set_writer_error(emitter, "Write error");
61+ return yaml_emitter_set_writer_error(emitter, "write error");
6262 }
6363 }
6464
@@ -135,7 +135,7 @@ yaml_emitter_flush(yaml_emitter_t *emitter)
135135 return 1;
136136 }
137137 else {
138− return yaml_emitter_set_writer_error(emitter, "Write error");
138+ return yaml_emitter_set_writer_error(emitter, "write error");
139139 }
140140}
141141
libyaml/yaml.h+1−3
@@ -26,9 +26,7 @@ extern "C" {
2626
2727/** The public API declaration. */
2828
29−#define YAML_DECLARE_STATIC
30−
31−#ifdef WIN32
29+#ifdef _WIN32
3230# if defined(YAML_DECLARE_STATIC)
3331# define YAML_DECLARE(type) type
3432# elif defined(YAML_DECLARE_EXPORT)
libyaml/yaml_private.h+7−2
@@ -113,6 +113,11 @@ yaml_string_join(
113113
114114#define STRING(string,length) { (string), (string)+(length), (string) }
115115
116+#define STRING_ASSIGN(value,string,length) \
117+ ((value).start = (string), \
118+ (value).end = (string)+(length), \
119+ (value).pointer = (string))
120+
116121#define STRING_INIT(context,string,size) \
117122 (((string).start = yaml_malloc(size)) ? \
118123 ((string).pointer = (string).start, \
@@ -633,7 +638,7 @@ yaml_queue_extend(void **start, void **head, void **tail, void **end);
633638 (node).data.mapping.pairs.top = (node_pairs_start), \
634639 (node).data.mapping.style = (node_style))
635640
636−#define YAML_VERSION_STRING "0.1.2"
641+#define YAML_VERSION_STRING "0.1.4"
637642#define YAML_VERSION_MAJOR 0
638643#define YAML_VERSION_MINOR 1
639−#define YAML_VERSION_PATCH 2
644+#define YAML_VERSION_PATCH 4
yaml.cabal+1−1
@@ -1,5 +1,5 @@
11name: yaml
2−version: 0.8.5.4
2+version: 0.8.6
33license: BSD3
44license-file: LICENSE
55author: Michael Snoyman <michael@snoyman.com>, Anton Ageev <antage@gmail.com>,Kirill Simonov