Index: trunk/src/font.c =================================================================== --- trunk/src/font.c (revision 36109) +++ trunk/src/font.c (revision 36110) @@ -345,13 +345,18 @@ return f; } -void pcb_font_free_symbol(pcb_symbol_t *s) +void pcb_font_clear_symbol(pcb_symbol_t *s) { pcb_poly_t *p; pcb_arc_t *a; - free(s->Line); + s->Valid = 0; + s->Width = 0; + s->Delta = 0; + + s->LineN = 0; + for(p = polylist_first(&s->polys); p != NULL; p = polylist_first(&s->polys)) { polylist_remove(p); pcb_poly_free_fields(p); @@ -363,6 +368,14 @@ free(a); } +} + +void pcb_font_free_symbol(pcb_symbol_t *s) +{ + + pcb_font_clear_symbol(s); + + free(s->Line); memset (s, 0, sizeof(pcb_symbol_t)); } Index: trunk/src/font.h =================================================================== --- trunk/src/font.h (revision 36109) +++ trunk/src/font.h (revision 36110) @@ -82,6 +82,11 @@ /* Free all drawing primitives of a symbol, leaving it empty */ void pcb_font_free_symbol(pcb_symbol_t *s); +/* Remove all content (primitives and geometry, except for ->Height) of + the symbol and mark it invalid */ +void pcb_font_clear_symbol(pcb_symbol_t *s); + + /*** font kit handling ***/ void pcb_fontkit_free(pcb_fontkit_t *fk); pcb_font_t *pcb_new_font(pcb_fontkit_t *fk, pcb_font_id_t id, const char *name);