summaryrefslogtreecommitdiff
path: root/src/geometry/geometry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/geometry/geometry.c')
-rw-r--r--src/geometry/geometry.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/geometry/geometry.c b/src/geometry/geometry.c
index 1d26a70..7046f1e 100644
--- a/src/geometry/geometry.c
+++ b/src/geometry/geometry.c
@@ -6,24 +6,36 @@
#include "geometry.h"
-void kai_parse_float_array(struct ka_float_array_t *dest, ezxml_t src)
+int kai_parse_float_array(struct ka_float_array_t *dest, ezxml_t src)
{
+ /* get count */
+ const char *count = ezxml_attr(src, "count");
+ if (count == NULL) {
+ fprintf(stderr, "[kalmia] ERROR: required \"count\" parameter not present for float_array\n");
+ return -1;
+ }
+ char *end;
+ dest->count = strtol(count, &end, 10);
+
/* get id, if present */
const char *id = ezxml_attr(src, "id");
if (id != NULL) {
size_t id_len = strlen(id) + 1;
- dest->id = malloc(sizeof(char) * id_len);
+ dest->id = kai_alloc(sizeof(char) * id_len, "float_array id");
+ if (dest->id == NULL) {
+ return -1;
+ }
strncpy(dest->id, id, id_len);
}
else {
dest->id = NULL;
}
- /* get count */
- const char *count = ezxml_attr(src, "count");
- dest->count = strtol(count, NULL, 10);
-
/* parse floats */
- dest->data = malloc(sizeof(ka_real_t) * dest->count);
+ dest->data = kai_alloc(sizeof(ka_real_t) * dest->count, "float_array data");
+ if (dest->data == NULL) {
+ free(dest->id);
+ return -1;
+ }
kai_text_to_reals(dest->data, ezxml_txt(src), dest->count);
}