| tuse portable reallocarray instead of calloc when appending grains - granular - granular dynamics simulation |
| git clone git://src.adamsgaard.dk/granular |
| Log |
| Files |
| Refs |
| README |
| LICENSE |
| --- |
| commit 422756f899e08157157233654041678a5512b9e5 |
| parent cb1a16972c2a61f0229980932fe3e451ba53d22d |
| Author: Anders Damsgaard |
| Date: Thu, 25 Mar 2021 17:39:25 +0100
use portable reallocarray instead of calloc when appending grains
Diffstat:
M simulation.c | 9 ++-------
M util.c | 18 ++++++++++++++++++
M util.h | 2 ++
3 files changed, 22 insertions(+), 7 deletions(-)
--- |
| diff --git a/simulation.c b/simulation.c |
| t@@ -46,13 +46,8 @@ sim_free(struct simulation *sim)
void
sim_add_grain(struct simulation *sim, struct grain *g)
{
- struct grain *tmp = NULL;
-
- if (!(tmp = calloc(sim->np + 1, sizeof(*g))))
- err(1, "%s: sim.grains calloc", __func__);
- memcpy(tmp, sim->grains, sim->np * sizeof(*g));
- free(sim->grains);
- sim->grains = tmp;
+ if (!(sim->grains = xreallocarray(sim->grains, sim->np + 1, sizeof(*g))))
+ err(1, "%s: sim.grains reallocarray", __func__);
sim->grains[sim->np++] = *g;
}
|
| diff --git a/util.c b/util.c |
| t@@ -1,6 +1,7 @@
#include
#include
#include
+#include
#include "granular.h"
void
t@@ -105,3 +106,20 @@ random_value_powerlaw(double min, double max)
return pow((pow(max, power + 1.0) - pow(min, power + 1.0)) * randomval()
+ pow(min, power + 1.0), 1.0 / (power + 1.0));
}
+
+void *
+xreallocarray(void *m, size_t n, size_t s)
+{
+ void *nm;
+
+ if (n == 0 || s == 0) {
+ free(m);
+ return NULL;
+ }
+ if (s && n > (size_t) - 1 / s)
+ err(1, "realloc: overflow");
+ if (!(nm = realloc(m, n * s)))
+ err(1, "realloc");
+
+ return nm;
+} |
| diff --git a/util.h b/util.h |
| t@@ -15,4 +15,6 @@ double residual(const double new_val, const double old_val);
double random_value_uniform(double min, double max);
double random_value_powerlaw(double power, double min, double max);
+void * xreallocarray(void *m, size_t n, size_t s);
+
#endif |