Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 20430) +++ trunk/src/obj_pstk.h (revision 20431) @@ -259,6 +259,8 @@ NULL is returned. The caller needs to call free() on the returned array. */ pcb_cardinal_t *pcb_pstk_proto_used_all(pcb_data_t *data, pcb_cardinal_t *len_out); +/* Remove a prototype: free all fields and mark it unused */ +void pcb_pstk_proto_del(pcb_data_t *data, pcb_cardinal_t proto_id); /*** layer info ***/ typedef struct pcb_proto_layer_s { Index: trunk/src/obj_pstk_proto.c =================================================================== --- trunk/src/obj_pstk_proto.c (revision 20430) +++ trunk/src/obj_pstk_proto.c (revision 20431) @@ -49,6 +49,7 @@ void pcb_pstk_proto_free_fields(pcb_pstk_proto_t *dst) { #warning TODO: do a full field free here + dst->in_use = 0; } void pcb_pstk_proto_update(pcb_pstk_proto_t *dst) @@ -1135,6 +1136,14 @@ pcb_pstk_proto_del_shape_idx(proto, idx); } +void pcb_pstk_proto_del(pcb_data_t *data, pcb_cardinal_t proto_id) +{ + pcb_pstk_proto_t *proto = pcb_vtpadstack_proto_get(&data->ps_protos, proto_id, 0); + if (proto == NULL) + return; + pcb_pstk_proto_free_fields(proto); +} + pcb_cardinal_t *pcb_pstk_proto_used_all(pcb_data_t *data, pcb_cardinal_t *len_out) { pcb_cardinal_t len, n, *res;