Index: trunk/src/action_helper.c =================================================================== --- trunk/src/action_helper.c (revision 5279) +++ trunk/src/action_helper.c (revision 5280) @@ -122,7 +122,7 @@ static void AttachForCopy(pcb_coord_t PlaceX, pcb_coord_t PlaceY) { - pcb_box_t *box; + pcb_box_t box; pcb_coord_t mx = 0, my = 0; pcb_event(PCB_EVENT_RUBBER_RESET, NULL); @@ -143,12 +143,11 @@ pcb_crosshair.AttachedObject.State = PCB_CH_STATE_SECOND; /* get boundingbox of object and set cursor range */ - box = GetObjectBoundingBox(pcb_crosshair.AttachedObject.Type, - pcb_crosshair.AttachedObject.Ptr1, pcb_crosshair.AttachedObject.Ptr2, pcb_crosshair.AttachedObject.Ptr3); - pcb_crosshair_set_range(pcb_crosshair.AttachedObject.X - box->X1, - pcb_crosshair.AttachedObject.Y - box->Y1, - PCB->MaxWidth - (box->X2 - pcb_crosshair.AttachedObject.X), - PCB->MaxHeight - (box->Y2 - pcb_crosshair.AttachedObject.Y)); + GetObjectBoundingBox(pcb_crosshair.AttachedObject.Type, pcb_crosshair.AttachedObject.Ptr1, pcb_crosshair.AttachedObject.Ptr2, pcb_crosshair.AttachedObject.Ptr3, &box); + pcb_crosshair_set_range(pcb_crosshair.AttachedObject.X - box.X1, + pcb_crosshair.AttachedObject.Y - box.Y1, + PCB->MaxWidth - (box.X2 - pcb_crosshair.AttachedObject.X), + PCB->MaxHeight - (box.Y2 - pcb_crosshair.AttachedObject.Y)); /* get all attached objects if necessary */ if ((conf_core.editor.mode != PCB_MODE_COPY) && conf_core.editor.rubber_band_mode) Index: trunk/src/obj_common.c =================================================================== --- trunk/src/obj_common.c (revision 5279) +++ trunk/src/obj_common.c (revision 5280) @@ -38,7 +38,7 @@ /* returns a pointer to an objects bounding box; * data is valid until the routine is called again */ -pcb_box_t *GetObjectBoundingBox(int Type, void *Ptr1, void *Ptr2, void *Ptr3) +int GetObjectBoundingBox(int Type, void *Ptr1, void *Ptr2, void *Ptr3, pcb_box_t *res) { switch (Type) { case PCB_TYPE_LINE: @@ -48,19 +48,22 @@ case PCB_TYPE_PAD: case PCB_TYPE_PIN: case PCB_TYPE_ELEMENT_NAME: - return (pcb_box_t *) Ptr2; + *res = *(pcb_box_t *)Ptr2; + return 0; case PCB_TYPE_VIA: case PCB_TYPE_ELEMENT: - return (pcb_box_t *) Ptr1; + *res = *(pcb_box_t *)Ptr1; + return 0; case PCB_TYPE_POLYGON_POINT: case PCB_TYPE_LINE_POINT: - return (pcb_box_t *) Ptr3; + *res = *(pcb_box_t *)Ptr3; + return 0; case PCB_TYPE_ARC_POINT: /* abort();*/ - default: pcb_message(PCB_MSG_DEFAULT, "Request for bounding box of unsupported type %d\n", Type); - return (pcb_box_t *) Ptr2; + *res = *(pcb_box_t *)Ptr2; + return -1; } } Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 5279) +++ trunk/src/obj_common.h (revision 5280) @@ -45,7 +45,7 @@ pcb_coord_t X2, Y2; /* and lower right corner */ }; -pcb_box_t *GetObjectBoundingBox(int Type, void *Ptr1, void *Ptr2, void *Ptr3); +int GetObjectBoundingBox(int Type, void *Ptr1, void *Ptr2, void *Ptr3, pcb_box_t *res); /* memset object to 0, but keep the link field */ #define reset_obj_mem(type, obj) \