]> git.neil.brown.name Git - edlib.git/commitdiff
Fix a few bugs found by valgrind
authorNeilBrown <neil@brown.name>
Sat, 21 Nov 2015 08:17:59 +0000 (19:17 +1100)
committerNeilBrown <neil@brown.name>
Sat, 21 Nov 2015 08:17:59 +0000 (19:17 +1100)
Signed-off-by: NeilBrown <neil@brown.name>
core-attr.c
core-doc.c
core-mark.c
core-pane.c
doc-text.c
lib-view.c

index db2b89607f5372eae5e6278d20a5f3d7cca1765e..2851ab9548aed3463779b269d440ddfe5c2922ba 100644 (file)
@@ -183,7 +183,7 @@ int attr_del(struct attrset **setp, char *key)
        len += strlen(set->attrs + offset + len) + 1;
        memmove(set->attrs + offset,
                set->attrs + offset + len,
-               set->len - offset);
+               set->len - (offset + len));
        set->len -= len;
        if (set->len == 0) {
                *setp = set->next;
@@ -228,7 +228,7 @@ int attr_set_str(struct attrset **setp, char *key, char *val, int keynum)
                len += strlen(set->attrs + offset + len) + 1;
                memmove(set->attrs + offset,
                        set->attrs + offset + len,
-                       set->len - offset);
+                       set->len - (offset + len));
                set->len -= len;
        }
        if (!val)
index f1d987f1fc05dbead0213d81a6cb0dc6ab4c4c9e..b30440cf675593d923f2a71d4d5c0b78252ba2e6 100644 (file)
@@ -47,6 +47,7 @@ int doc_add_view(struct doc *d, struct command *c)
                        tlist_add(&g[i].head, GRP_HEAD, &d->views[i].head);
                        tlist_del(&d->views[i].head);
                        g[i].notify = d->views[i].notify;
+                       g[i].space = d->views[i].space;
                }
                for (; i < d->nviews; i++) {
                        INIT_TLIST_HEAD(&g[i].head, GRP_HEAD);
index 0af52b038b26f41d67cef786aaa267cdf45975cd..4b145b58905b1facbb23bc08237d6814c1633e5e 100644 (file)
@@ -116,6 +116,7 @@ void mark_free(struct mark *m)
 void point_free(struct point *p)
 {
        int i;
+       *p->owner = NULL;
        for (i = 0; i < p->size; i++)
                tlist_del_init(&p->lists[i]);
        mark_delete(&p->m);
index 4efb5c6bfb1ff64c462d1d0a95582b5be9f20cf3..0a80fea27098f21579b91fe9763f2f3bdd4666a9 100644 (file)
@@ -154,6 +154,7 @@ void pane_close(struct pane *p)
        pane_damaged(p->parent, DAMAGED_SIZE);
        attr_free(&p->attrs);
 /* FIXME who destroys 'point'*/
+       ASSERT(p->point == NULL);
        free(p);
 }
 
index 1498a2d4032db1979baa71b78c1733b7e2846691..d458b618f6c6f5b0fe8f6bebe8a2b3503145ba81 100644 (file)
@@ -1459,6 +1459,8 @@ DEF_CMD(render_line_prev)
                mark_free(boundary);
                return 1;
        }
+       if (boundary)
+               mark_free(boundary);
        if (ch == WEOF && rpt)
                return -1;
        if (ch == '\n')
index f6a571ec283242fed5c8f334f702f56e85000641..c032e4512f67d8e3deda91e2b14c60fb7c8ebe88 100644 (file)
@@ -143,6 +143,7 @@ DEF_CMD(view_handle)
        if (strcmp(ci->key, "Close") == 0) {
                pt = *ci->pointp;
                doc_del_view(pt->doc, &vd->ch_notify);
+               point_free(pt);
                free(vd);
                return 1;
        }
@@ -213,11 +214,13 @@ DEF_CMD(view_notify)
                struct point *pt;
                struct pane *p, *c;
 
-               pt = editor_choose_doc(ed);
                doc_del_view(d, &vd->ch_notify);
                c = pane_child(vd->pane);
                if (c)
                        pane_close(c);
+               pt = vd->pane->point;
+               point_free(pt);
+               pt = editor_choose_doc(ed);
                p = view_reattach(vd->pane, pt);
                render_attach(NULL, p);
        }