Index: trunk/src/font.c =================================================================== --- trunk/src/font.c (revision 32811) +++ trunk/src/font.c (revision 32812) @@ -334,28 +334,33 @@ return f; } -void pcb_font_free(pcb_font_t *f) +void pcb_font_free_symbol(pcb_symbol_t *s) { - int i; - for (i = 0; i <= PCB_MAX_FONTPOSITION; i++) { - pcb_poly_t *p; - pcb_arc_t *a; + pcb_poly_t *p; + pcb_arc_t *a; - free(f->Symbol[i].Line); + free(s->Line); - for(p = polylist_first(&f->Symbol[i].polys); p != NULL; p = polylist_first(&f->Symbol[i].polys)) { - polylist_remove(p); - pcb_poly_free_fields(p); - free(p); - } + for(p = polylist_first(&s->polys); p != NULL; p = polylist_first(&s->polys)) { + polylist_remove(p); + pcb_poly_free_fields(p); + free(p); + } - for(a = arclist_first(&f->Symbol[i].arcs); a != NULL; a = arclist_first(&f->Symbol[i].arcs)) { - arclist_remove(a); - free(a); - } - - memset (&f->Symbol[i], 0, sizeof(f->Symbol[0])); + for(a = arclist_first(&s->arcs); a != NULL; a = arclist_first(&s->arcs)) { + arclist_remove(a); + free(a); } + + memset (s, 0, sizeof(pcb_symbol_t)); +} + +void pcb_font_free(pcb_font_t *f) +{ + int i; + for (i = 0; i <= PCB_MAX_FONTPOSITION; i++) + pcb_font_free_symbol(&f->Symbol[i]); + free(f->name); f->name = NULL; f->id = -1; Index: trunk/src/font.h =================================================================== --- trunk/src/font.h (revision 32811) +++ trunk/src/font.h (revision 32812) @@ -81,6 +81,9 @@ void pcb_font_free(pcb_font_t *f); +/* Free all drawing primitives of a symbol, leaving it empty */ +void pcb_font_free_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);