solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit 71680edef36d264e0f232d18fb7299c12d2cde1e
parent 07d5f2335467d8e5be4539d2aa95b657a63037bb
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri,  4 Nov 2016 15:37:59 +0100

Improve the error checking and the error messages

Diffstat:
Msrc/solstice_facility.c | 59++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 46 insertions(+), 13 deletions(-)

diff --git a/src/solstice_facility.c b/src/solstice_facility.c @@ -31,7 +31,7 @@ log_err ...) { va_list vargs_list; - ASSERT(node && fmt); + ASSERT(filename && node && fmt); fprintf(stderr, "%s:%lu:%lu: ", filename, @@ -53,7 +53,13 @@ parse_material_matte yaml_node_t* val; intptr_t n; res_T res = RES_OK; - ASSERT(matte->type == YAML_MAPPING_NODE); + ASSERT(doc && matte); + + if(matte->type != YAML_MAPPING_NODE) { + log_err(filename, matte, "expect a mapping of matte material attributes.\n"); + res = RES_BAD_ARG; + goto error; + } n = matte->data.mapping.pairs.top - matte->data.mapping.pairs.start; if(n != 1) { @@ -94,7 +100,14 @@ parse_material_mirror int mask = 0; /* Register the parsed attributes */ intptr_t i, n; res_T res = RES_OK; - ASSERT(mirror->type == YAML_MAPPING_NODE); + ASSERT(doc && mirror); + + if(mirror->type != YAML_MAPPING_NODE) { + log_err(filename, mirror, + "expect a mapping of mirror material attributes .\n"); + res = RES_BAD_ARG; + goto error; + } n = mirror->data.mapping.pairs.top - mirror->data.mapping.pairs.start; FOR_EACH(i, 0, n) { @@ -104,7 +117,7 @@ parse_material_mirror key = yaml_document_get_node(doc, mirror->data.mapping.pairs.start[i].key); val = yaml_document_get_node(doc, mirror->data.mapping.pairs.start[i].value); if(key->type != YAML_SCALAR_NODE) { - log_err(filename, key,"expect mirror material attributes.\n"); + log_err(filename, key, "expect a mirror material attribute.\n"); res = RES_BAD_ARG; goto error; } @@ -146,7 +159,13 @@ parse_material_descriptor yaml_node_t* val; intptr_t n; res_T res = RES_OK; - ASSERT(desc && desc->type == YAML_MAPPING_NODE); + ASSERT(doc && desc); + + if(desc->type != YAML_MAPPING_NODE) { + log_err(filename, desc, "expect a material descriptor.\n"); + res = RES_BAD_ARG; + goto error; + } n = desc->data.mapping.pairs.top - desc->data.mapping.pairs.start; if(n != 1) { @@ -168,7 +187,8 @@ parse_material_descriptor } else if(!strcmp((char*)key->data.scalar.value, "mirror")) { res = parse_material_mirror(filename, doc, val); } else { - log_err(filename, key, "unknown material `%s'.\n", key->data.scalar.value); + log_err(filename, key, "unknown material descriptor `%s'.\n", + key->data.scalar.value); res = RES_BAD_ARG; goto error; } @@ -188,7 +208,13 @@ parse_material intptr_t i, n; int mask = 0; /* Register the parsed attributes */ res_T res = RES_OK; - ASSERT(mtl && mtl->type == YAML_MAPPING_NODE); + ASSERT(doc && mtl); + + if(mtl->type != YAML_MAPPING_NODE) { + log_err(filename, mtl, "expect a material definition.\n"); + res = RES_BAD_ARG; + goto error; + } n = mtl->data.mapping.pairs.top - mtl->data.mapping.pairs.start; FOR_EACH(i, 0, n) { @@ -199,14 +225,15 @@ parse_material val = yaml_document_get_node(doc, mtl->data.mapping.pairs.start[i].value); if(key->type != YAML_SCALAR_NODE) { log_err(filename, key, - "expect a material or a double sided material definition.\n"); + "expect a material descriptor or a double sided material.\n"); res = RES_BAD_ARG; goto error; } #define SETUP_MASK(Flag, Name) { \ if(mask & BIT(Flag)) { \ - log_err(filename, key, "the "Name" material is already defined.\n"); \ + log_err(filename, key, \ + "the "Name" material descriptor is already defined.\n"); \ res = RES_BAD_ARG; \ goto error; \ } \ @@ -244,7 +271,13 @@ parse_object intptr_t i, n; int mask = 0; /* Register the parsed attributes */ res_T res = RES_OK; - ASSERT(object && object->type == YAML_MAPPING_NODE); + ASSERT(doc && object); + + if(object->type != YAML_MAPPING_NODE) { + log_err(filename, object, "expect an object definition.\n"); + res = RES_BAD_ARG; + goto error; + } n = object->data.mapping.pairs.top - object->data.mapping.pairs.start; FOR_EACH(i, 0, n) { @@ -315,7 +348,7 @@ parse_item yaml_node_t* val; intptr_t n; res_T res = RES_OK; - ASSERT(item && item->type == YAML_MAPPING_NODE); + ASSERT(doc && item && item->type == YAML_MAPPING_NODE); n = item->data.mapping.pairs.top - item->data.mapping.pairs.start; if(n != 1) { @@ -365,7 +398,7 @@ solstice_facility_load(const char* filename) yaml_document_t doc; yaml_node_t* root; FILE* file = NULL; - size_t i, n; + intptr_t i, n; int doc_is_init; res_T res = RES_OK; @@ -406,7 +439,7 @@ solstice_facility_load(const char* filename) goto error; } - n = (size_t)(root->data.sequence.items.top - root->data.sequence.items.start); + n = root->data.sequence.items.top - root->data.sequence.items.start; FOR_EACH(i, 0, n) { yaml_node_t* item;