From 252c575a5cd67b2207ef79e6b29d6f4d12f21ada Mon Sep 17 00:00:00 2001 From: Kirill Simonov Date: Mon, 23 Feb 2009 19:59:19 +0000 Subject: [PATCH] Fixed non-ANSI initializations (fixes #115). --- src/api.c | 6 ++++- src/emitter.c | 64 ++++++++++++++++++++++++++++++++++------------ src/loader.c | 4 ++- src/parser.c | 8 +++--- src/scanner.c | 8 +++--- src/yaml_private.h | 5 ++++ 6 files changed, 70 insertions(+), 25 deletions(-) diff --git a/src/api.c b/src/api.c index 02e7b14..0c4732e 100644 --- a/src/api.c +++ b/src/api.c @@ -1365,7 +1365,8 @@ yaml_document_append_mapping_pair(yaml_document_t *document, struct { yaml_error_type_t error; } context; - yaml_node_pair_t pair = { key, value }; + + yaml_node_pair_t pair; assert(document); /* Non-NULL document is required. */ assert(mapping > 0 @@ -1378,6 +1379,9 @@ yaml_document_append_mapping_pair(yaml_document_t *document, assert(value > 0 && document->nodes.start + value <= document->nodes.top); /* Valid value id is required. */ + pair.key = key; + pair.value = value; + if (!PUSH(&context, document->nodes.start[mapping-1].data.mapping.pairs, pair)) return 0; diff --git a/src/emitter.c b/src/emitter.c index e4e3d26..9a5b3fa 100644 --- a/src/emitter.c +++ b/src/emitter.c @@ -1349,10 +1349,15 @@ static int yaml_emitter_analyze_tag_directive(yaml_emitter_t *emitter, yaml_tag_directive_t tag_directive) { - yaml_string_t handle = STRING(tag_directive.handle, - strlen((char *)tag_directive.handle)); - yaml_string_t prefix = STRING(tag_directive.prefix, - strlen((char *)tag_directive.prefix)); + yaml_string_t handle; + yaml_string_t prefix; + size_t handle_length; + size_t prefix_length; + + handle_length = strlen((char *)tag_directive.handle); + prefix_length = strlen((char *)tag_directive.prefix); + STRING_ASSIGN(handle, tag_directive.handle, handle_length); + STRING_ASSIGN(prefix, tag_directive.prefix, prefix_length); if (handle.start == handle.end) { return yaml_emitter_set_emitter_error(emitter, @@ -1395,7 +1400,11 @@ static int yaml_emitter_analyze_anchor(yaml_emitter_t *emitter, yaml_char_t *anchor, int alias) { - yaml_string_t string = STRING(anchor, strlen((char *)anchor)); + size_t anchor_length; + yaml_string_t string; + + anchor_length = strlen((char *)anchor); + STRING_ASSIGN(string, anchor, anchor_length); if (string.start == string.end) { return yaml_emitter_set_emitter_error(emitter, alias ? @@ -1427,9 +1436,13 @@ static int yaml_emitter_analyze_tag(yaml_emitter_t *emitter, yaml_char_t *tag) { - yaml_string_t string = STRING(tag, strlen((char *)tag)); + size_t tag_length; + yaml_string_t string; yaml_tag_directive_t *tag_directive; + tag_length = strlen((char *)tag); + STRING_ASSIGN(string, tag, tag_length); + if (string.start == string.end) { return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty"); @@ -1466,7 +1479,7 @@ static int yaml_emitter_analyze_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int block_indicators = 0; int flow_indicators = 0; @@ -1485,6 +1498,8 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter, int previous_space = 0; int previous_break = 0; + STRING_ASSIGN(string, value, length); + emitter->scalar_data.value = value; emitter->scalar_data.length = length; @@ -1772,7 +1787,11 @@ yaml_emitter_write_indicator(yaml_emitter_t *emitter, char *indicator, int need_whitespace, int is_whitespace, int is_indention) { - yaml_string_t string = STRING((yaml_char_t *)indicator, strlen(indicator)); + size_t indicator_length; + yaml_string_t string; + + indicator_length = strlen(indicator); + STRING_ASSIGN(string, (yaml_char_t *)indicator, indicator_length); if (need_whitespace && !emitter->whitespace) { if (!PUT(emitter, ' ')) return 0; @@ -1793,7 +1812,8 @@ static int yaml_emitter_write_anchor(yaml_emitter_t *emitter, yaml_char_t *value, size_t length) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; + STRING_ASSIGN(string, value, length); while (string.pointer != string.end) { if (!WRITE(emitter, string)) return 0; @@ -1809,7 +1829,8 @@ static int yaml_emitter_write_tag_handle(yaml_emitter_t *emitter, yaml_char_t *value, size_t length) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; + STRING_ASSIGN(string, value, length); if (!emitter->whitespace) { if (!PUT(emitter, ' ')) return 0; @@ -1830,7 +1851,8 @@ yaml_emitter_write_tag_content(yaml_emitter_t *emitter, yaml_char_t *value, size_t length, int need_whitespace) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; + STRING_ASSIGN(string, value, length); if (need_whitespace && !emitter->whitespace) { if (!PUT(emitter, ' ')) return 0; @@ -1876,10 +1898,12 @@ static int yaml_emitter_write_plain_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length, int allow_breaks) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int spaces = 0; int breaks = 0; + STRING_ASSIGN(string, value, length); + if (!emitter->whitespace) { if (!PUT(emitter, ' ')) return 0; } @@ -1934,10 +1958,12 @@ static int yaml_emitter_write_single_quoted_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length, int allow_breaks) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int spaces = 0; int breaks = 0; + STRING_ASSIGN(string, value, length); + if (!yaml_emitter_write_indicator(emitter, "'", 1, 0, 0)) return 0; @@ -1995,9 +2021,11 @@ static int yaml_emitter_write_double_quoted_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length, int allow_breaks) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int spaces = 0; + STRING_ASSIGN(string, value, length); + if (!yaml_emitter_write_indicator(emitter, "\"", 1, 0, 0)) return 0; @@ -2207,9 +2235,11 @@ static int yaml_emitter_write_literal_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int breaks = 1; + STRING_ASSIGN(string, value, length); + if (!yaml_emitter_write_indicator(emitter, "|", 1, 0, 0)) return 0; if (!yaml_emitter_write_block_scalar_hints(emitter, string)) @@ -2244,10 +2274,12 @@ static int yaml_emitter_write_folded_scalar(yaml_emitter_t *emitter, yaml_char_t *value, size_t length) { - yaml_string_t string = STRING(value, length); + yaml_string_t string; int breaks = 1; int leading_spaces = 1; + STRING_ASSIGN(string, value, length); + if (!yaml_emitter_write_indicator(emitter, ">", 1, 0, 0)) return 0; if (!yaml_emitter_write_block_scalar_hints(emitter, string)) diff --git a/src/loader.c b/src/loader.c index 3c96116..9d3d912 100644 --- a/src/loader.c +++ b/src/loader.c @@ -225,11 +225,13 @@ static int yaml_parser_register_anchor(yaml_parser_t *parser, int index, yaml_char_t *anchor) { - yaml_alias_data_t data = { anchor, index, { 0, 0, 0 } }; + yaml_alias_data_t data; yaml_alias_data_t *alias_data; if (!anchor) return 1; + data.anchor = anchor; + data.index = index; data.mark = parser->document->nodes.start[index-1].start_mark; for (alias_data = parser->aliases.start; diff --git a/src/parser.c b/src/parser.c index 4d4d3b7..eb2a2c7 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1280,10 +1280,10 @@ yaml_parser_process_directives(yaml_parser_t *parser, } else if (token->type == YAML_TAG_DIRECTIVE_TOKEN) { - yaml_tag_directive_t value = { - token->data.tag_directive.handle, - token->data.tag_directive.prefix - }; + yaml_tag_directive_t value; + value.handle = token->data.tag_directive.handle; + value.prefix = token->data.tag_directive.prefix; + if (!yaml_parser_append_tag_directive(parser, value, 0, token->start_mark)) goto error; diff --git a/src/scanner.c b/src/scanner.c index f96a9f4..86e2050 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -1118,9 +1118,11 @@ yaml_parser_save_simple_key(yaml_parser_t *parser) if (parser->simple_key_allowed) { - yaml_simple_key_t simple_key = { 1, required, - parser->tokens_parsed + parser->tokens.tail - parser->tokens.head, - { 0, 0, 0 } }; + yaml_simple_key_t simple_key; + simple_key.possible = 1; + simple_key.required = required; + simple_key.token_number = + parser->tokens_parsed + parser->tokens.tail - parser->tokens.head; simple_key.mark = parser->mark; if (!yaml_parser_remove_simple_key(parser)) return 0; diff --git a/src/yaml_private.h b/src/yaml_private.h index 6320caf..ed5ea66 100644 --- a/src/yaml_private.h +++ b/src/yaml_private.h @@ -113,6 +113,11 @@ yaml_string_join( #define STRING(string,length) { (string), (string)+(length), (string) } +#define STRING_ASSIGN(value,string,length) \ + ((value).start = (string), \ + (value).end = (string)+(length), \ + (value).pointer = (string)) + #define STRING_INIT(context,string,size) \ (((string).start = yaml_malloc(size)) ? \ ((string).pointer = (string).start, \ -- 2.45.2