Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 8132) +++ trunk/src/board.c (revision 8133) @@ -69,8 +69,7 @@ /* allocate memory, switch all layers on and copy resources */ ptr = calloc(1, sizeof(pcb_board_t)); - ptr->Data = pcb_buffer_new(); - ptr->Data->pcb = ptr; + ptr->Data = pcb_buffer_new(ptr); ptr->ThermStyle = 4; ptr->IsleArea = 2.e8; Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 8132) +++ trunk/src/buffer.c (revision 8133) @@ -104,7 +104,7 @@ { if (Buffer && Buffer->Data) { pcb_data_free(Buffer->Data); - Buffer->Data->pcb = PCB; + Buffer->Data->pcb = pcb; } } @@ -329,11 +329,11 @@ /* --------------------------------------------------------------------------- * creates a new paste buffer */ -pcb_data_t *pcb_buffer_new(void) +pcb_data_t *pcb_buffer_new(pcb_board_t *pcb) { pcb_data_t *data; data = (pcb_data_t *) calloc(1, sizeof(pcb_data_t)); - data->pcb = (pcb_board_t *) PCB; + data->pcb = (pcb_board_t *)pcb; return data; } @@ -374,20 +374,20 @@ /* --------------------------------------------------------------------------- * initializes the buffers by allocating memory */ -void pcb_init_buffers(void) +void pcb_init_buffers(pcb_board_t *pcb) { int i; for (i = 0; i < PCB_MAX_BUFFER; i++) - pcb_buffers[i].Data = pcb_buffer_new(); + pcb_buffers[i].Data = pcb_buffer_new(pcb); } -void pcb_uninit_buffers(void) +void pcb_uninit_buffers(pcb_board_t *pcb) { int i; for (i = 0; i < PCB_MAX_BUFFER; i++) { - pcb_buffer_clear(PCB, pcb_buffers+i); + pcb_buffer_clear(pcb, pcb_buffers+i); free(pcb_buffers[i].Data); } } Index: trunk/src/buffer.h =================================================================== --- trunk/src/buffer.h (revision 8132) +++ trunk/src/buffer.h (revision 8133) @@ -53,8 +53,8 @@ void pcb_buffer_select_paste(int); void pcb_buffers_flip_side(void); void pcb_buffer_mirror(pcb_buffer_t *); -void pcb_init_buffers(void); -void pcb_uninit_buffers(void); +void pcb_init_buffers(pcb_board_t *pcb); +void pcb_uninit_buffers(pcb_board_t *pcb); void *pcb_move_obj_to_buffer(pcb_data_t *, pcb_data_t *, int, void *, void *, void *); void *pcb_copy_obj_to_buffer(pcb_data_t *, pcb_data_t *, int, void *, void *, void *); @@ -66,7 +66,7 @@ pcb_bool pcb_buffer_copy_to_layout(pcb_coord_t X, pcb_coord_t Y); -pcb_data_t *pcb_buffer_new(void); +pcb_data_t *pcb_buffer_new(pcb_board_t *pcb); /* sets currently active buffer */ void pcb_buffer_set_number(int Number); Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 8132) +++ trunk/src/main.c (revision 8133) @@ -241,7 +241,7 @@ if (conf_isdirty(CFR_USER)) conf_save_file(NULL, NULL, CFR_USER, NULL); - pcb_uninit_buffers(); + pcb_uninit_buffers(PCB); /* Free up memory allocated to the PCB. Why bother when we're about to exit ? * Because it removes some false positives from heap bug detectors such as @@ -509,7 +509,7 @@ if (pcb_gui->gui) pcb_crosshair_init(); InitHandler(); - pcb_init_buffers(); + pcb_init_buffers(PCB); pcb_crosshair_set_mode(PCB_MODE_ARROW); Index: trunk/src/undo.c =================================================================== --- trunk/src/undo.c (revision 8132) +++ trunk/src/undo.c (revision 8133) @@ -586,7 +586,7 @@ type = pcb_search_obj_by_id(PCB->Data, &ptr1, &ptr2, &ptr3, Entry->ID, Entry->Kind); if (type != PCB_TYPE_NONE) { if (!RemoveList) - RemoveList = pcb_buffer_new(); + RemoveList = pcb_buffer_new(PCB); if (andDraw) pcb_erase_obj(type, ptr1, ptr2); /* in order to make this re-doable we move it to the RemoveList */ @@ -1229,7 +1229,7 @@ return; if (!RemoveList) - RemoveList = pcb_buffer_new(); + RemoveList = pcb_buffer_new(PCB); GetUndoSlot(PCB_UNDO_REMOVE, PCB_OBJECT_ID(Ptr3), Type); pcb_move_obj_to_buffer(RemoveList, PCB->Data, Type, Ptr1, Ptr2, Ptr3); @@ -1292,7 +1292,7 @@ return; if (!RemoveList) - RemoveList = pcb_buffer_new(); + RemoveList = pcb_buffer_new(PCB); undo = GetUndoSlot(undo_type, PCB_OBJECT_ID(Ptr2), Type); copy = (pcb_any_obj_t *) pcb_copy_obj_to_buffer(RemoveList, PCB->Data, Type, Ptr1, Ptr2, Ptr3); Index: trunk/src_plugins/lib_gtk_common/dlg_propedit.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 8132) +++ trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 8133) @@ -321,7 +321,7 @@ */ memset(&preview_pcb, 0, sizeof(preview_pcb)); - preview_pcb.Data = pcb_buffer_new(); + preview_pcb.Data = pcb_buffer_new(&preview_pcb); preview_pcb.MaxWidth = preview_pcb.MaxHeight = PCB_MIL_TO_COORD(2000); pcb_colors_from_settings(&preview_pcb); pcb_font_create_default(&preview_pcb);