diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-09-02 09:51:39 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-09-02 09:51:39 -0700 |
commit | c207b329654cc3a5efa58127f43477cd915a941d (patch) | |
tree | 6a86c47fe215f8ccb653e7fbabc79a322155a227 | |
parent | d73df8d9b10490b2e09623972cf4d8d5f7b84162 (diff) |
modules/flow: minor cleanup of ff_new()/ff_free()
Simplify ff_new() failure path by using ff_free(), also make
ff_free() more ergonomic by returning NULL.
-rw-r--r-- | src/modules/flow/ff.c | 31 | ||||
-rw-r--r-- | src/modules/flow/ff.h | 2 |
2 files changed, 16 insertions, 17 deletions
diff --git a/src/modules/flow/ff.c b/src/modules/flow/ff.c index 18b55d2..a0ab56c 100644 --- a/src/modules/flow/ff.c +++ b/src/modules/flow/ff.c @@ -26,6 +26,19 @@ void ff_populate(ff_t *ff, unsigned idx) } +ff_t * ff_free(ff_t *ff) +{ + if (ff) { + for (int i = 0; i < 2; i++) + free(ff->fields[i]); + + free(ff); + } + + return NULL; +} + + ff_t * ff_new(unsigned size, void (*populator)(void *context, unsigned size, const v3f_t *other, v3f_t *field), void *context) { ff_t *ff; @@ -36,13 +49,8 @@ ff_t * ff_new(unsigned size, void (*populator)(void *context, unsigned size, con for (int i = 0; i < 2; i++) { ff->fields[i] = calloc(size * size * size, sizeof(v3f_t)); - if (!ff->fields[i]) { - for (int j = 0; j < i; j++) - free(ff->fields[j]); - - free(ff); - return NULL; - } + if (!ff->fields[i]) + return ff_free(ff); } ff->size = size; @@ -56,15 +64,6 @@ ff_t * ff_new(unsigned size, void (*populator)(void *context, unsigned size, con } -void ff_free(ff_t *ff) -{ - for (int i = 0; i < 2; i++) - free(ff->fields[i]); - - free(ff); -} - - static inline v3f_t ff_sample(v3f_t *field, size_t size, v3f_t *min, v3f_t *max, v3f_t *t) { v3f_t *a, *b, *c, *d, *e, *f, *g, *h; diff --git a/src/modules/flow/ff.h b/src/modules/flow/ff.h index 4d30143..0324ea0 100644 --- a/src/modules/flow/ff.h +++ b/src/modules/flow/ff.h @@ -6,7 +6,7 @@ typedef struct ff_t ff_t; ff_t * ff_new(unsigned size, void (*populator)(void *context, unsigned size, const v3f_t *other, v3f_t *field), void *context); -void ff_free(ff_t *ff); +ff_t * ff_free(ff_t *ff); v3f_t ff_get(ff_t *ff, v3f_t *coordinate, float w); void ff_populate(ff_t *ff, unsigned idx); |