always keep the key and value together - ics2txt - convert icalendar .ics file to plain text
 (HTM) git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
       ---
 (DIR) commit 7a6ceff37018ad2f867397aee9f3b3289f16427f
 (DIR) parent 775c76c450eed349600344550bbb6c140bdf1811
 (HTM) Author: Josuah Demangeon <me@josuah.net>
       Date:   Sun, 28 Jun 2020 20:41:06 +0200
       
       always keep the key and value together
       
       Diffstat:
         M ics2tree.c                          |      39 ++++++++++++-------------------
         M src/map.c                           |       5 ++---
       
       2 files changed, 17 insertions(+), 27 deletions(-)
       ---
 (DIR) diff --git a/ics2tree.c b/ics2tree.c
       @@ -7,12 +7,18 @@
        #include "util.h"
        
        void
       +print_ruler(int level)
       +{
       +        for (int i = 0; i < level; i++)
       +                fprintf(stdout, ": ");
       +}
       +
       +void
        print_ical_tree_param(struct map_entry *entry, int level)
        {
                if (entry == NULL)
                        return;
       -        for (int i = 0; i < level; i++)
       -                printf(": ");
       +        print_ruler(level);
                fprintf(stdout, "param %s=%s\n", entry->key, (char *)entry->value);
        }
        
       @@ -21,8 +27,7 @@ print_ical_tree_value(struct ical_value *value, int level)
        {
                if (value == NULL)
                        return;
       -        for (int i = 0; i < level; i++)
       -                printf(": ");
       +        print_ruler(level);
                fprintf(stdout, "value %s:%s\n", value->name, value->value);
                for (size_t i = 0; i < value->param.len; i++)
                        print_ical_tree_param(value->param.entry + i, level + 1);
       @@ -34,12 +39,13 @@ print_ical_tree_vnode(struct ical_vnode *node, int level)
        {
                if (node == NULL)
                        return;
       -        for (int i = 0; i < level; i++)
       -                printf(": ");
       -        fprintf(stdout, "node %p %s child=%p next=%p\n", node, node->name, node->child, node->next);
       +        print_ruler(level);
       +        fprintf(stdout, "node %p %s child=%lu next=%p\n",
       +          (void *)node, node->name, node->child.len, (void *)node->next);
                for (size_t i = 0; i < node->values.len; i++)
                        print_ical_tree_value(node->values.entry[i].value, level + 1);
       -        print_ical_tree_vnode(node->child, level + 1);
       +        for (size_t i = 0; i < node->child.len; i++)
       +                print_ical_tree_vnode(node->child.entry[i].value, level + 1);
                print_ical_tree_vnode(node->next, level);
        }
        
       @@ -53,31 +59,16 @@ print_ical_tree(FILE *fp)
                        die("reading ical file: %s", ical_strerror(e));
        
                print_ical_tree_vnode(vcal.root, 0);
       -        fprintf(stdout, ".\n");
       +        fprintf(stdout, ": end\n");
                fflush(stdout);
        
                ical_free_vcalendar(&vcal);
                return 0;
        }
        
       -void
       -print_header(void)
       -{
       -        char *fields[] = { "", NULL };
       -
       -        printf("%s\t%s", "beg", "end");
       -
       -        for (char **f = fields; *f != NULL; f++) {
       -                fprintf(stdout, "\t%s", *f);
       -        }
       -        fprintf(stdout, "\n");
       -}
       -
        int
        main(int argc, char **argv)
        {
       -        print_header();
       -
                log_arg0 = *argv++;
        
                if (*argv == NULL) {
 (DIR) diff --git a/src/map.c b/src/map.c
       @@ -50,9 +50,8 @@ map_set(struct map *map, char *key, void *value)
                map->len++;
        
                insert = map->entry + i;
       -        e = map->entry + map->len - 1 - 1;
       -        for (; e >= insert; e--)
       -                e[1].key = e[0].key;
       +        for (e = map->entry + map->len - 2; e >= insert; e--)
       +                e[1] = e[0];
        
                insert->key = key;
                insert->value = value;