commit dfd964a5bf5872c914fd5da8b5cb59bc8192c79e
parent 491e8ffbfec89d039acaaf8a38fdee407b246cfc
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Thu, 26 Jan 2017 16:13:11 +0100
Fix a possible issue on the creation of a geomtry node
Diffstat:
3 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/src/parser/solparser.c b/src/parser/solparser.c
@@ -2531,13 +2531,12 @@ parse_entity
SETUP_MASK(TRANSFORM, "transform");
res = parse_transform
(parser, doc, val, solent.translation, solent.rotation);
- } else if (!strcmp((char*) key->data.scalar.value, "primary")) {
+ } else if(!strcmp((char*) key->data.scalar.value, "primary")) {
long tmp;
SETUP_MASK(PRIMARY, "primary");
res = parse_integer(parser, val, 0, 1, &tmp);
solent.primary = (int)tmp;
- }
- else {
+ } else {
log_err(parser, key, "unknown entity parameter `%s'.\n",
key->data.scalar.value);
res = RES_BAD_ARG;
@@ -2556,26 +2555,20 @@ parse_entity
#define CHECK_PARAM(Flag, Name) \
if(!(mask & BIT(Flag))) { \
- log_err(parser, entity, "the entity "Name" is missing.\n"); \
+ log_err(parser, entity, "the entity "Name" parameter is missing.\n"); \
res = RES_BAD_ARG; \
goto error; \
} (void)0
- #define CHECK_NOPARAM(Flag, Name) \
- if(mask & BIT(Flag)) { \
- log_err(parser, entity, \
- "the entity "Name" is invalid in this context.\n"); \
- res = RES_BAD_ARG; \
- goto error; \
- } (void) 0
CHECK_PARAM(NAME, "name");
- if (solent.type == SOLPARSER_ENTITY_GEOMETRY) {
+ if(solent.type == SOLPARSER_ENTITY_GEOMETRY) {
CHECK_PARAM(PRIMARY, "primary");
- }
- else {
- CHECK_NOPARAM(PRIMARY, "primary");
+ } else if(mask & BIT(PRIMARY)) {
+ log_err(parser, entity,
+ "the entity primary parameter is invalid in this context.\n");
+ res = RES_BAD_ARG;
+ goto error;
}
#undef CHECK_PARAM
- #undef CHECK_NOPARAM
psolent = darray_entity_data_get(&parser->entities) + isolent;
res = solparser_entity_copy_and_clear(psolent, &solent);
diff --git a/src/solstice_entity.c b/src/solstice_entity.c
@@ -176,8 +176,6 @@ create_node(struct solstice* solstice, const struct solparser_entity* entity)
break;
case SOLPARSER_ENTITY_GEOMETRY:
node = create_geometry_node(solstice, entity);
- res = solstice_node_geometry_set_primary(node, entity->primary);
- if (res != RES_OK) goto error;
break;
case SOLPARSER_ENTITY_PIVOT:
node = create_pivot_node(solstice, entity);
@@ -189,6 +187,17 @@ create_node(struct solstice* solstice, const struct solparser_entity* entity)
goto error;
}
+ /* Setup the primary parameter for the geometry entity */
+ if(entity->type == SOLPARSER_ENTITY_GEOMETRY) {
+ res = solstice_node_geometry_set_primary(node, entity->primary);
+ if(res != RES_OK) {
+ fprintf(stderr,
+ "Could not define the primary parameter of the entity `%s'.\n",
+ str_cget(&entity->name));
+ goto error;
+ }
+ }
+
/* Setup the entity receiver flags */
rcv = htable_receiver_find(&solstice->receivers, &entity);
if(rcv) {
diff --git a/src/solstice_node.c b/src/solstice_node.c
@@ -223,8 +223,7 @@ solstice_node_ref_put(struct solstice_node* node)
res_T
solstice_node_geometry_set_primary
- (struct solstice_node* node,
- const int is_primary)
+ (struct solstice_node* node, const int is_primary)
{
ASSERT(node && (!is_primary || node->type == SOLSTICE_NODE_GEOMETRY));
return ssol_instance_sample(node->instance, is_primary);