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); | 
