Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 20154) +++ trunk/src/data.c (revision 20155) @@ -151,14 +151,11 @@ pcb_loop_pstk(pcb, ctx, pscb); } -void pcb_data_free(pcb_data_t * data) +void pcb_data_uninit(pcb_data_t *data) { pcb_layer_t *layer; int i, subc; - if (data == NULL) - return; - subc = (data->parent_type == PCB_PARENT_SUBC); PCB_SUBC_LOOP(data); @@ -184,10 +181,17 @@ for (layer = data->Layer, i = 0; i < PCB_MAX_LAYER; layer++, i++) free((char *)layer->name); - /* clear struct */ memset(data, 0, sizeof(pcb_data_t)); } +void pcb_data_free(pcb_data_t *data) +{ + if (data == NULL) + return; + + pcb_data_uninit(data); +} + pcb_bool pcb_data_is_empty(pcb_data_t *Data) { pcb_cardinal_t i; @@ -355,10 +359,16 @@ } } +void pcb_data_init(pcb_data_t *data) +{ + memset(data, 0, sizeof(pcb_data_t)); +} + pcb_data_t *pcb_data_new(pcb_board_t *parent) { pcb_data_t *data; - data = (pcb_data_t *) calloc(1, sizeof(pcb_data_t)); + data = malloc(sizeof(pcb_data_t)); + pcb_data_init(data); if (parent != NULL) PCB_SET_PARENT(data, board, parent); pcb_data_set_layer_parents(data); Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 20154) +++ trunk/src/data.h (revision 20155) @@ -42,7 +42,6 @@ #include "obj_pstk_list.h" #include "vtpadstack.h" - /* Generic container object that can hold subcircuits with layer-global objects (e.g. vias and rats) and layer-locals (lines, arcs) */ struct pcb_data_s { @@ -116,8 +115,18 @@ pcb_pstk_cb_t pscb ); +/* Initialize the fields of data */ +void pcb_data_init(pcb_data_t *data); + +/* Allocate new data and initialize all fields */ pcb_data_t *pcb_data_new(pcb_board_t *parent); + +/* Uninitialize and free the fields of data (doesn't free data) */ +void pcb_data_uninit(pcb_data_t *data); + +/* Calls pcb_data_uninit() and */ void pcb_data_free(pcb_data_t *); + pcb_bool pcb_data_is_empty(pcb_data_t *); /* gets minimum and maximum coordinates