URI:
       plop - saait - the most boring static page generator
  HTML git clone git://git.codemadness.org/saait
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 3d4e92f0764580313a324bd6f491c237be2279f5
   DIR parent e5c7047c90f5f373c60ed5a1427077490f7e57de
  HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Thu,  8 Dec 2016 23:48:55 +0100
       
       plop
       
       Diffstat:
         M saait.c                             |      15 +++++++++------
       
       1 file changed, 9 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/saait.c b/saait.c
       @@ -84,7 +84,7 @@ readfile(const char *file)
                buf = ecalloc(1, size + 1); /* always allocate an empty buffer */
                while (!feof(fp)) {
                        if (len + BUFSIZ + 1 > size) {
       -                        /* non-greedy allocation (common case is small textfiles) */
       +                        /* allocate size: common case is small textfiles */
                                size += (BUFSIZ * 10);
                                if (!(buf = realloc(buf, size + 1))) {
                                        fprintf(stderr, "realloc: %s\n", strerror(errno));
       @@ -121,7 +121,7 @@ newvar(const char *key, const char *value)
        void
        setvar(struct variable **vars, struct variable *var, int override)
        {
       -        struct variable *v;
       +        struct variable *p, *v;
        
                /* new */
                if (!*vars) {
       @@ -130,15 +130,17 @@ setvar(struct variable **vars, struct variable *var, int override)
                }
        
                /* search: set or append */
       -        for (v = *vars; v; v = v->next) {
       +        for (p = NULL, v = *vars; v; v = v->next) {
                        if (!strcmp(var->key, v->key)) {
                                if (!override)
                                        return;
       +                        /* NOTE: keep v->next */
       +                        var->next = v->next;
       +                        if (p)
       +                                p->next = var;
                                free(v->key);
                                free(v->value);
       -                        v->key = var->key;
       -                        v->value = var->value;
       -                        /* NOTE: keep v->next */
       +                        free(v);
                                return;
                        }
                        /* append */
       @@ -147,6 +149,7 @@ setvar(struct variable **vars, struct variable *var, int override)
                                v->next = var;
                                return;
                        }
       +                p = v;
                }
        }