tfix sim_add_grain, granular2vtk runs without errors - granular - granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/granular
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9f2040e9cae2ff9dd00420ee7dd234ba97bb8afb
 (DIR) parent 7e9eec953717ca34bfb7e4d1a49b93b0d1be1a31
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Thu, 25 Mar 2021 12:51:33 +0100
       
       fix sim_add_grain, granular2vtk runs without errors
       
       Diffstat:
         M Makefile                            |       1 +
         M simulation.c                        |      14 +++++++++++---
         M simulation.h                        |       2 +-
       
       3 files changed, 13 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -19,6 +19,7 @@ SRC = ${BIN:=.c} arrays.c grain.c granular.c packing.c simulation.c util.c
        HDR = \
                arg.h\
                arrays.h\
       +        compat.h\
                grain.h\
                granular.h\
                packing.h\
 (DIR) diff --git a/simulation.c b/simulation.c
       t@@ -1,6 +1,7 @@
        #include <stdio.h>
        #include <stdlib.h>
        #include <err.h>
       +#include <string.h>
        #include "grain.h"
        #include "simulation.h"
        #include "arrays.h"
       t@@ -28,6 +29,7 @@ sim_defaults(struct simulation *sim)
                sim->file_dt = 1.0;
                sim->n_file = 0;
                sim->np = 0;
       +        sim->grains = NULL;
        }
        
        void
       t@@ -37,14 +39,20 @@ sim_free(struct simulation *sim)
                free(sim->origo);
                free(sim->L);
                free(sim->grains);
       +        sim->grains = NULL;
       +        sim->np = 0;
        }
        
        void
       -sim_add_grain(struct simulation *sim, const struct grain *g)
       +sim_add_grain(struct simulation *sim, struct grain *g)
        {
       -        if (!(sim->grains = realloc(sim->grains, sim->np * sizeof(struct grain))))
       -                errx(1, "%s: sim.grains realloc", __func__);
       +        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;
                sim->grains[sim->np++] = *g;
        }
        
 (DIR) diff --git a/simulation.h b/simulation.h
       t@@ -36,7 +36,7 @@ struct simulation sim_new(void);
        void sim_defaults(struct simulation *sim);
        void sim_free(struct simulation *sim);
        
       -void sim_add_grain(struct simulation *sim, const struct grain *g);
       +void sim_add_grain(struct simulation *sim, struct grain *g);
        
        void sim_print_grains(FILE *stream, const struct grain *grains, size_t n);
        void sim_print_grains_vtk(FILE *stream, const struct grain *grains, size_t n);