Index: src/report.c =================================================================== --- src/report.c (revision 1299) +++ src/report.c (revision 1300) @@ -123,7 +123,7 @@ { void *ptr1, *ptr2, *ptr3; int type; - char report[2048]; + char *report = NULL; type = SearchScreen(x, y, REPORT_TYPES, &ptr1, &ptr2, &ptr3); if (type == NO_TYPE) @@ -141,7 +141,7 @@ #endif via = (PinTypePtr) ptr2; if (TEST_FLAG(HOLEFLAG, via)) - pcb_sprintf(&report[0], "%m+VIA ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+VIA ID# %ld; Flags:%s\n" "(X,Y) = %$mD.\n" "It is a pure hole of diameter %$mS.\n" "Name = \"%s\"." @@ -148,7 +148,7 @@ "%s", USER_UNITMASK, via->ID, flags_to_string(via->Flags, VIA_TYPE), via->X, via->Y, via->DrillingHole, EMPTY(via->Name), TEST_FLAG(LOCKFLAG, via) ? "It is LOCKED.\n" : ""); else - pcb_sprintf(&report[0], "%m+VIA ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+VIA ID# %ld; Flags:%s\n" "(X,Y) = %$mD.\n" "Copper width = %$mS. Drill width = %$mS.\n" "Clearance width in polygons = %$mS.\n" @@ -185,7 +185,7 @@ } END_LOOP; if (TEST_FLAG(HOLEFLAG, Pin)) - pcb_sprintf(&report[0], "%m+PIN ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+PIN ID# %ld; Flags:%s\n" "(X,Y) = %$mD.\n" "It is a mounting hole. Drill width = %$mS.\n" "It is owned by element %$mS.\n" @@ -193,7 +193,7 @@ Pin->X, Pin->Y, Pin->DrillingHole, EMPTY(element->Name[1].TextString), TEST_FLAG(LOCKFLAG, Pin) ? "It is LOCKED.\n" : ""); else - pcb_sprintf(&report[0], + report = pcb_strdup_printf( "%m+PIN ID# %ld; Flags:%s\n" "(X,Y) = %$mD.\n" "Copper width = %$mS. Drill width = %$mS.\n" "Clearance width to Polygon = %$mS.\n" @@ -224,7 +224,7 @@ } #endif line = (LineTypePtr) ptr2; - pcb_sprintf(&report[0], "%m+LINE ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+LINE ID# %ld; Flags:%s\n" "FirstPoint(X,Y) = %$mD, ID = %ld.\n" "SecondPoint(X,Y) = %$mD, ID = %ld.\n" "Width = %$mS.\nClearance width in polygons = %$mS.\n" @@ -249,7 +249,7 @@ } #endif line = (RatTypePtr) ptr2; - pcb_sprintf(&report[0], "%m+RAT-LINE ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+RAT-LINE ID# %ld; Flags:%s\n" "FirstPoint(X,Y) = %$mD; ID = %ld; " "connects to layer group %d.\n" "SecondPoint(X,Y) = %$mD; ID = %ld; " @@ -273,7 +273,7 @@ Arc = (ArcTypePtr) ptr2; box = GetArcEnds(Arc); - pcb_sprintf(&report[0], "%m+ARC ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+ARC ID# %ld; Flags:%s\n" "CenterPoint(X,Y) = %$mD.\n" "Radius = %$mS, Thickness = %$mS.\n" "Clearance width in polygons = %$mS.\n" @@ -304,7 +304,7 @@ #endif Polygon = (PolygonTypePtr) ptr2; - pcb_sprintf(&report[0], "%m+POLYGON ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+POLYGON ID# %ld; Flags:%s\n" "Its bounding box is %$mD %$mD.\n" "It has %d points and could store %d more\n" " without using more memory.\n" @@ -341,7 +341,7 @@ } END_LOOP; len = Distance(Pad->Point1.X, Pad->Point1.Y, Pad->Point2.X, Pad->Point2.Y); - pcb_sprintf(&report[0], "%m+PAD ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+PAD ID# %ld; Flags:%s\n" "FirstPoint(X,Y) = %$mD; ID = %ld.\n" "SecondPoint(X,Y) = %$mD; ID = %ld.\n" "Width = %$mS. Length = %$mS.\n" @@ -376,7 +376,7 @@ } #endif element = (ElementTypePtr) ptr2; - pcb_sprintf(&report[0], "%m+ELEMENT ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+ELEMENT ID# %ld; Flags:%s\n" "BoundingBox %$mD %$mD.\n" "Descriptive Name \"%s\".\n" "Name on board \"%s\".\n" @@ -421,7 +421,7 @@ if (type == TEXT_TYPE) sprintf(laynum, "It is on layer %d.", GetLayerNumber(PCB->Data, (LayerTypePtr) ptr1)); - pcb_sprintf(&report[0], "%m+TEXT ID# %ld; Flags:%s\n" + report = pcb_strdup_printf("%m+TEXT ID# %ld; Flags:%s\n" "Located at (X,Y) = %$mD.\n" "Characters are %$mS tall.\n" "Value is \"%s\".\n" @@ -440,7 +440,7 @@ case POLYGONPOINT_TYPE: { PointTypePtr point = (PointTypePtr) ptr2; - pcb_sprintf(&report[0], "%m+POINT ID# %ld.\n" + report = pcb_strdup_printf("%m+POINT ID# %ld.\n" "Located at (X,Y) = %$mD.\n" "It belongs to a %s on layer %d.\n", USER_UNITMASK, point->ID, point->X, point->Y, @@ -452,17 +452,17 @@ break; default: - sprintf(&report[0], "Unknown\n"); + report = pcb_strdup_printf("Unknown\n"); break; } - if (report[0] == '\0') { + if ((report == NULL) || (report == '\0')) { Message(_("Nothing found to report on\n")); return 1; } /* create dialog box */ - gui->report_dialog("Report", &report[0]); - + gui->report_dialog("Report", report); + free(report); return 0; }