commit 3f78583426ba0c08dc342b84de08974347be1fc6
parent 1c3062ed61b83dd52a38ce569f47b4d4dd124ae2
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 2 Dec 2022 12:14:57 +0100
Fix building parsing
Diffstat:
1 file changed, 29 insertions(+), 9 deletions(-)
diff --git a/src/cg_parsing.c b/src/cg_parsing.c
@@ -222,6 +222,7 @@ parse_building
{
res_T res = RES_OK;
char* line = NULL;
+ int m;
(void)logger;
ERR(txtrdr_read_line(reader));
@@ -229,20 +230,22 @@ parse_building
size_t id = 0;
double height = 0;
char* value = NULL;
+ char* tmp;
- line = remove_spaces(txtrdr_get_line(reader));
+ tmp = txtrdr_get_line(reader);
+ line = remove_spaces(tmp);
ERR(strtolower(line, line));
+ value = malloc(( strlen(line )) * sizeof(char));
if (sscanf(line, "id=%lu", &id) == 1 ) {
building->id = id;
}
- if (sscanf(line, "height=%lf", &height) == 1 ) {
+ else if (sscanf(line, "height=%lf", &height) == 1 ) {
building->height = height;
}
- value = malloc(( strlen(line )) * sizeof(char));
- if (sscanf(line, "polygon=%s", value) == 1 ) {
+ else if (sscanf(line, "polygon=%s", value) == 1 ) {
struct polygon_context pg_ctx = {NULL, NULL, 0};
ERR(scpr_polygon_create(NULL, &building->pg));
@@ -265,21 +268,38 @@ parse_building
sa_release(pg_ctx.nvert);
}
- if (sscanf(line, "model=%s", value) == 1 ) {
- building->model = get_enum_value(value);
+ else if (sscanf(line, "model=model%d", &m) == 1 ) {
+ switch(m) {
+ case 0:
+ building->model = model0;
+ break;
+ case 1:
+ building->model = model1;
+ break;
+ default:
+ res = RES_BAD_ARG;
+ goto error;
+ }
}
- if (sscanf(line, "data=%s", value) == 1 ) {
+ else if (sscanf(line, "data=%s", value) == 1 ) {
building->data_name = malloc(sizeof(struct str));
str_init(NULL, building->data_name);
str_set(building->data_name, value);
}
- if (value) free(value);
/*if new section break*/
- if (sscanf(line, "[%[^]]", value) == 1 ) {
+ else if (sscanf(line, "[%[^]]", value) == 1 ) {
break;
}
+
+ else {
+ printf("===> %s \n", line);
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ free(value);
ERR(txtrdr_read_line(reader));
}