Compare commits

..

No commits in common. "master" and "8.3.578" have entirely different histories.

91 changed files with 312 additions and 1036 deletions

View File

@ -16,7 +16,6 @@ jobs:
- uses: actions/checkout@v4
- name: Get Dependencies
run: |
sudo apt-get update
sudo apt-get install -y tcl-dev tk-dev libcairo-dev
- name: Build
run: |

View File

@ -10,8 +10,8 @@ on:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
simple_build_macos15:
runs-on: macos-15-intel # only and last supported intel MacOS
simple_build_macos13:
runs-on: macos-13
timeout-minutes: 45 # x86_64 seems non-SSD based (slower)
steps:
- name: Checkout
@ -235,10 +235,10 @@ jobs:
cp *.mak dist/BUILD-INFO/
cp *.LOG dist/BUILD-INFO/
- name: Upload archive magic-macos15
- name: Upload archive magic-macos13
uses: actions/upload-artifact@v4
with:
name: magic-macos15
name: magic-macos13
path: |
${{ github.workspace }}/dist

View File

@ -1 +1 @@
8.3.585
8.3.578

View File

@ -93,7 +93,7 @@ static BinArray *bpBinArrayNew(int dx, /* x diameter of bins */
/* allocate array */
size = sizeof(BinArray) + numBins*(sizeof(void *));
new = (BinArray *)callocMagic(1, size);
new = (BinArray *)callocMagic(size);
/* initial */
new->ba_bbox = *bbox;

View File

@ -360,14 +360,12 @@ calmaElementBoundary(void)
}
/* Paint the rectangles (if any) */
free_magic1_t mm1 = freeMagic1_init();
for (; rp != NULL ; rp = rp->r_next)
{
if (plane)
DBPaintPlane(plane, &rp->r_r, CIFPaintTable, (PaintUndoInfo *)NULL);
freeMagic1(&mm1, (char *) rp);
freeMagic((char *) rp);
}
freeMagic1_end(&mm1);
if (cifCurReadPlanes == cifEditCellPlanes)
{

View File

@ -1400,10 +1400,8 @@ calmaOutFunc(
{
pllist[i].pl_label = ll->ll_label;
pllist[i].pl_port = (unsigned int)ll->ll_attr;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, ll);
freeMagic(ll);
ll = ll->ll_next;
freeMagic1_end(&mm1);
i++;
}
@ -2424,27 +2422,19 @@ calmaProcessBoundary(
/* Free the LinkedBoundary list */
lbref = listtop;
while (lbref->lb_next != listtop)
{
free_magic1_t mm1 = freeMagic1_init();
lbref = listtop;
while (lbref->lb_next != listtop)
{
freeMagic1(&mm1, lbref);
lbref = lbref->lb_next;
}
freeMagic1(&mm1, lbref);
freeMagic1_end(&mm1);
freeMagic(lbref);
lbref = lbref->lb_next;
}
freeMagic(lbref);
}
/* Free the BoundaryTop list */
{
free_magic1_t mm1 = freeMagic1_init();
for (bounds = blist; bounds != NULL; bounds = bounds->bt_next)
freeMagic1(&mm1, bounds);
freeMagic1_end(&mm1);
}
for (bounds = blist; bounds != NULL; bounds = bounds->bt_next)
freeMagic(bounds);
}
/*
@ -2510,10 +2500,8 @@ calmaMergePaintFunc(
lb = edge;
while (lb->lb_next != edge) lb = lb->lb_next;
lb->lb_next = edge->lb_next;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, edge);
freeMagic(edge);
edge = edge->lb_next;
freeMagic1_end(&mm1);
}
}
else
@ -2732,13 +2720,11 @@ done_searches:
if (num_points != 4)
{
free_magic1_t mm1 = freeMagic1_init();
for (i = 0; i < num_points; i++)
{
freeMagic1(&mm1, edge);
freeMagic(edge);
edge = edge->lb_next;
}
freeMagic1_end(&mm1);
edge = NULL;
}
if (!StackEmpty(SegStack))

View File

@ -1324,10 +1324,8 @@ calmaOutFuncZ(
{
pllist[i].pl_label = ll->ll_label;
pllist[i].pl_port = (unsigned int)ll->ll_attr;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, ll);
freeMagic(ll);
ll = ll->ll_next;
freeMagic1_end(&mm1);
i++;
}
@ -1859,27 +1857,19 @@ calmaProcessBoundaryZ(
/* Free the LinkedBoundary list */
lbref = listtop;
while (lbref->lb_next != listtop)
{
free_magic1_t mm1 = freeMagic1_init();
lbref = listtop;
while (lbref->lb_next != listtop)
{
freeMagic1(&mm1, lbref);
lbref = lbref->lb_next;
}
freeMagic1(&mm1, lbref);
freeMagic1_end(&mm1);
freeMagic(lbref);
lbref = lbref->lb_next;
}
freeMagic(lbref);
}
/* Free the BoundaryTop list */
{
free_magic1_t mm1 = freeMagic1_init();
for (bounds = blist; bounds != NULL; bounds = bounds->bt_next)
freeMagic1(&mm1, bounds);
freeMagic1_end(&mm1);
}
for (bounds = blist; bounds != NULL; bounds = bounds->bt_next)
freeMagic(bounds);
}
/*
@ -1945,10 +1935,8 @@ calmaMergePaintFuncZ(
lb = edge;
while (lb->lb_next != edge) lb = lb->lb_next;
lb->lb_next = edge->lb_next;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, edge);
freeMagic(edge);
edge = edge->lb_next;
freeMagic1_end(&mm1);
}
}
else
@ -2167,13 +2155,11 @@ done_searches:
if (num_points != 4)
{
free_magic1_t mm1 = freeMagic1_init();
for (i = 0; i < num_points; i++)
{
freeMagic1(&mm1, edge);
freeMagic(edge);
edge = edge->lb_next;
}
freeMagic1_end(&mm1);
edge = NULL;
}
if (!StackEmpty(SegStack))

View File

@ -2783,10 +2783,8 @@ cifSquaresFillArea(
DBPaintPlane(plane, &stripList->area, CIFEraseTable,
(PaintUndoInfo *) NULL);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, stripList);
freeMagic(stripList);
stripList = stripList->strip_next;
freeMagic1_end(&mm1);
}
/* 2nd pass: Search the plane for unmarked tiles */
@ -3127,10 +3125,8 @@ cifSlotsFillArea(
DBPaintPlane(plane, &stripList->area, CIFEraseTable,
(PaintUndoInfo *) NULL);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, stripList);
freeMagic(stripList);
stripList = stripList->strip_next;
freeMagic1_end(&mm1);
}
/* 2nd pass: Search the plane for unmarked tiles */
@ -4751,6 +4747,9 @@ cifInteractingRegions(
/* Get tile area for interaction search */
TiToRect(t, &rect);
/* Ignore tiles outside of the search area */
if (!GEO_SURROUND(area, &rect)) continue;
/* "interacting" includes touching as well as overlapping, so expand
* search by one unit in every direction and then check overlap.
* NOTE: This catches catecorner-touching material, which is

View File

@ -851,11 +851,9 @@ CIFPaintCurrent(
freeMagic(propstr);
}
propstr = newstr;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, lrec);
freeMagic(lrec);
lrec = lrec->r_next;
freeMagic1_end(&mm1);
}
}
/* NOTE: propstr is transferred to the CellDef and should
* not be free'd here.
*/

View File

@ -338,20 +338,18 @@ CIFPaintWirePath(
pathp = pathheadp->cifp_next;
if (pathp != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
while (pathp->cifp_next != NULL)
{
if (pathp->cifp_next->cifp_x == pathp->cifp_x &&
pathp->cifp_next->cifp_y == pathp->cifp_y)
{
previousp->cifp_next = pathp->cifp_next;
freeMagic1(&mm1, pathp);
freeMagic(pathp);
}
else
previousp = pathp;
pathp = pathp->cifp_next;
}
freeMagic1_end(&mm1);
}
previousp = pathheadp;
@ -488,13 +486,11 @@ CIFPaintWirePath(
rectp = CIFPolyToRects(polypath, plane, ptable, ui, FALSE);
CIFFreePath(polypath);
free_magic1_t mm1 = freeMagic1_init();
for (; rectp != NULL ; rectp = rectp->r_next)
{
DBPaintPlane(plane, &rectp->r_r, ptable, ui);
freeMagic1(&mm1, (char *) rectp);
freeMagic((char *) rectp);
}
freeMagic1_end(&mm1);
polypath = NULL;
}
else
@ -592,13 +588,11 @@ PaintPolygon(
rectlist = CIFPolyToRects(cifpath, plane, ptable, ui, FALSE);
CIFFreePath(cifpath);
free_magic1_t mm1 = freeMagic1_init();
for (rectp = rectlist; rectp != NULL ; rectp = rectp->r_next)
{
DBPaintPlane(plane, &rectp->r_r, ptable, ui);
if (!keep) freeMagic1(&mm1, (char *) rectp);
if (!keep) freeMagic((char *) rectp);
}
freeMagic1_end(&mm1);
return (keep) ? rectlist : (LinkedRect *)NULL;
}
@ -827,13 +821,11 @@ CIFParsePoly(void)
CIFSkipToSemi();
return FALSE;
}
free_magic1_t mm1 = freeMagic1_init();
for (; rectp != NULL ; rectp = rectp->r_next)
{
DBPaintPlane(cifReadPlane, &rectp->r_r, CIFPaintTable,
(PaintUndoInfo *) NULL);
freeMagic1(&mm1, (char *) rectp);
freeMagic((char *) rectp);
}
freeMagic1_end(&mm1);
return TRUE;
}

View File

@ -329,10 +329,8 @@ cifNewReadStyle(void)
layer = cifCurReadStyle->crs_layers[i];
if (layer != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
for (op = layer->crl_ops; op != NULL; op = op->co_next)
freeMagic1(&mm1, (char *)op);
freeMagic1_end(&mm1);
freeMagic((char *)op);
freeMagic((char *)layer);
}
}
@ -410,13 +408,11 @@ CIFReadTechInit(void)
/* forget the list of styles */
free_magic1_t mm1 = freeMagic1_init();
for (style = cifReadStyleList; style != NULL; style = style->crs_next)
{
freeMagic(style->crs_name);
freeMagic1(&mm1, style);
freeMagic(style);
}
freeMagic1_end(&mm1);
cifReadStyleList = NULL;
}

View File

@ -1338,13 +1338,11 @@ void
CIFFreePath(
CIFPath *path) /* Path to be freed. */
{
free_magic1_t mm1 = freeMagic1_init();
while (path != NULL)
{
freeMagic1(&mm1, (char *) path);
freeMagic((char *) path);
path = path->cifp_next;
}
freeMagic1_end(&mm1);
}
/*

View File

@ -100,7 +100,6 @@ cifTechFreeStyle(void)
layer = CIFCurStyle->cs_layers[i];
if (layer != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
for (op = layer->cl_ops; op != NULL; op = op->co_next)
{
if (op->co_client != (ClientData)NULL)
@ -121,9 +120,8 @@ cifTechFreeStyle(void)
break;
}
}
freeMagic1(&mm1, (char *)op);
freeMagic((char *)op);
}
freeMagic1_end(&mm1);
freeMagic((char *)layer);
}
}
@ -390,13 +388,11 @@ CIFTechInit(void)
/* forget the list of styles */
free_magic1_t mm1 = freeMagic1_init();
for (style = CIFStyleList; style != NULL; style = style->cs_next)
{
freeMagic(style->cs_name);
freeMagic1(&mm1, style);
freeMagic(style);
}
freeMagic1_end(&mm1);
CIFStyleList = NULL;
}

View File

@ -530,15 +530,11 @@ badusage:
}
freelist:
la = lahead;
while (la != NULL)
{
la = lahead;
while (la != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *)la);
la = la->ar_next;
freeMagic1_end(&mm1);
}
freeMagic((char *)la);
la = la->ar_next;
}
return;
}

View File

@ -2455,7 +2455,6 @@ CmdContact(
rmask = DBResidueMask(type);
free_magic1_t mm1 = freeMagic1_init();
while (lr != NULL)
{
GeoClip(&lr->r_r, &area);
@ -2466,10 +2465,9 @@ CmdContact(
if (TTMaskHasType(rmask, rtype))
DBPaint(EditCellUse->cu_def, &lr->r_r, rtype);
freeMagic1(&mm1, lr);
freeMagic(lr);
lr = lr->r_next;
}
freeMagic1_end(&mm1);
/* Refresh the layout drawing */
DBWAreaChanged(EditCellUse->cu_def, &area, DBW_ALLWINDOWS, &smask);
@ -2506,16 +2504,14 @@ CmdContact(
DBSrPaintArea((Tile *) NULL, EditCellUse->cu_def->cd_planes[DBPlane(rtype)],
&area, &smask, cmdContactFunc, (ClientData) &ccs);
free_magic1_t mm1 = freeMagic1_init();
while (ccs.lhead != NULL)
{
TTMaskSetOnlyType(&smask, type);
TTMaskAndMask(&smask, &DBActiveLayerBits);
DBPaintMask(EditCellUse->cu_def, &ccs.lhead->r_r, &smask);
freeMagic1(&mm1, ccs.lhead);
freeMagic(ccs.lhead);
ccs.lhead = ccs.lhead->r_next;
}
freeMagic1_end(&mm1);
/* Refresh the layout drawing */
DBWAreaChanged(EditCellUse->cu_def, &area, DBW_ALLWINDOWS, &smask);
@ -2956,22 +2952,14 @@ CmdCorner(
rectp = CIFPolyToRects(cmdPathList.pathlist->pathhead, plane,
resultTbl, &ui, FALSE);
for (; rectp != NULL; rectp = rectp->r_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (; rectp != NULL; rectp = rectp->r_next)
{
DBPaintPlane(plane, &rectp->r_r, resultTbl, &ui);
freeMagic1(&mm1, (char *)rectp);
}
freeMagic1_end(&mm1);
DBPaintPlane(plane, &rectp->r_r, resultTbl, &ui);
freeMagic((char *)rectp);
}
CIFFreePath(cmdPathList.pathlist->pathhead);
{
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *)cmdPathList.pathlist);
cmdPathList.pathlist = cmdPathList.pathlist->cpl_next;
freeMagic1_end(&mm1);
}
freeMagic((char *)cmdPathList.pathlist);
cmdPathList.pathlist = cmdPathList.pathlist->cpl_next;
}
}
else
@ -2989,16 +2977,14 @@ CmdCorner(
/* Now that we've got all the material, scan over the list
* painting the material and freeing up the entries on the list.
*/
free_magic1_t mm1 = freeMagic1_init();
while (cmdCornerList != NULL)
{
DBPaint(EditCellUse->cu_def, &cmdCornerList->cca_area,
cmdCornerList->cca_type);
freeMagic1(&mm1, (char *) cmdCornerList);
freeMagic((char *) cmdCornerList);
cmdCornerList = cmdCornerList->cca_next;
}
freeMagic1_end(&mm1);
}
}
SelectClear();
DBAdjustLabels(EditCellUse->cu_def, &editBox);
@ -3657,10 +3643,8 @@ cmdBevelFunc(
GeoClip(&r3, &cmdCornerRootBox);
if (GEO_RECTNULL(&r2) || GEO_RECTNULL(&r3))
{
free_magic1_t mm1 = freeMagic1_init();
for (pptr = pathhead; pptr != NULL; pptr = pptr->cifp_next)
freeMagic1(&mm1, (char *)pptr);
freeMagic1_end(&mm1);
freeMagic((char *)pptr);
return 0;
}
@ -4170,7 +4154,6 @@ CmdDrc(
rootUse = (CellUse *) window->w_surfaceID;
dcl = DRCCount(rootUse, &rootArea, doforall);
free_magic1_t mm1 = freeMagic1_init();
while (dcl != NULL)
{
if (count_total >= 0)
@ -4200,10 +4183,9 @@ CmdDrc(
}
#endif
}
freeMagic1(&mm1, (char *)dcl);
freeMagic((char *)dcl);
dcl = dcl->dcl_next;
}
freeMagic1_end(&mm1);
#ifdef MAGIC_WRAPPER
if ((count_total >= 0) || (!dolist))
@ -4326,8 +4308,6 @@ CmdDrc(
#endif
TxPrintf("Error area #%d:\n", result);
if (DRCWhy(dolist, rootUse, &area, findonly)) break;
/* Check for interrupt or this will go into an infinite loop */
else if (SigInterruptPending) break;
drc_nth++;
}
else if (result < 0)
@ -4354,14 +4334,12 @@ CmdDrc(
}
if (findonly)
{
free_magic1_t mm1 = freeMagic1_init();
/* Delete temporary rules */
while (DRCIgnoreRules != NULL)
{
freeMagic1(&mm1, DRCIgnoreRules);
freeMagic(DRCIgnoreRules);
DRCIgnoreRules = DRCIgnoreRules->li_next;
}
freeMagic1_end(&mm1);
/* Replace temporary set of rules */
DRCIgnoreRules = DRCSaveRules;
}
@ -4444,10 +4422,8 @@ CmdDrc(
{
while (DRCIgnoreRules != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, DRCIgnoreRules);
freeMagic(DRCIgnoreRules);
DRCIgnoreRules = DRCIgnoreRules->li_next;
freeMagic1_end(&mm1);
}
}
else

View File

@ -581,15 +581,13 @@ CmdFill(
/* Now that we've got all the material, scan over the list
* painting the material and freeing up the entries on the list.
*/
free_magic1_t mm1 = freeMagic1_init();
while (cmdFillList != NULL)
{
DBPaint(EditCellUse->cu_def, &cmdFillList->cfa_area,
cmdFillList->cfa_type);
freeMagic1(&mm1, (char *) cmdFillList);
freeMagic((char *) cmdFillList);
cmdFillList = cmdFillList->cfa_next;
}
freeMagic1_end(&mm1);
SelectClear();
DBAdjustLabels(EditCellUse->cu_def, &editBox);

View File

@ -1256,17 +1256,15 @@ CmdSelect(
/* of rlist) */
SelectClear();
free_magic1_t mm1 = freeMagic1_init();
while (rlist != NULL)
{
/* Paint rlist back into SelectDef */
DBPaint(SelectDef, &rlist->r_r, rlist->r_type);
/* cleanup as we go */
freeMagic1(&mm1, rlist);
freeMagic(rlist);
rlist = rlist->r_next;
}
freeMagic1_end(&mm1);
/* Force erase and redraw of the selection */
DBReComputeBbox(SelectDef);

View File

@ -1103,13 +1103,11 @@ CmdWhat(
}
#endif
free_magic1_t mm1 = freeMagic1_init();
while (lid != NULL)
{
freeMagic1(&mm1, lid);
while (lid != NULL)
{
freeMagic(lid);
lid = lid->lid_next;
}
freeMagic1_end(&mm1);
#ifdef MAGIC_WRAPPER
if (doListAll)
Tcl_ListObjAppendElement(magicinterp, paintobj,

View File

@ -108,55 +108,25 @@ DBCellFindDup(use, parent)
"DBCellFindDup");
while ((dupUse = BPEnumNext(&bpe)))
if (dupUse->cu_def == use->cu_def)
{
bool transMatch, arrayMatch, notXarray, notYarray;
/* Transforms must be equal---Aligned bounding boxes are
* an insufficient measure of exact overlap. Also, array
* counts and separation must match for arrayed devices
*/
transMatch = ((dupUse->cu_transform.t_a == use->cu_transform.t_a) &&
if ((dupUse->cu_transform.t_a == use->cu_transform.t_a) &&
(dupUse->cu_transform.t_b == use->cu_transform.t_b) &&
(dupUse->cu_transform.t_c == use->cu_transform.t_c) &&
(dupUse->cu_transform.t_d == use->cu_transform.t_d) &&
(dupUse->cu_transform.t_e == use->cu_transform.t_e) &&
(dupUse->cu_transform.t_f == use->cu_transform.t_f));
/* First check if both use and dupUse are not arrays. */
notXarray = (dupUse->cu_xhi == dupUse->cu_xlo) &&
(use->cu_xhi == use->cu_xlo);
notYarray = (dupUse->cu_yhi == dupUse->cu_ylo) &&
(use->cu_yhi == use->cu_ylo);
arrayMatch = (notXarray && notYarray);
/* If they are arrays, then the array parameters must match. */
if (!notXarray && notYarray)
{
arrayMatch = ((dupUse->cu_xhi - dupUse->cu_xlo) ==
(use->cu_xhi - use->cu_xlo)) &&
(dupUse->cu_xsep == use->cu_xsep);
}
else if (!notYarray && notXarray)
{
arrayMatch = ((dupUse->cu_yhi - dupUse->cu_ylo) ==
(use->cu_yhi - use->cu_ylo)) &&
(dupUse->cu_ysep == use->cu_ysep);
}
else if (!notYarray && !notXarray)
{
arrayMatch = (((dupUse->cu_xhi - dupUse->cu_xlo) ==
(dupUse->cu_transform.t_f == use->cu_transform.t_f) &&
((dupUse->cu_xhi > dupUse->cu_xlo) &&
((dupUse->cu_xhi - dupUse->cu_xlo) ==
(use->cu_xhi - use->cu_xlo)) &&
(dupUse->cu_xsep == use->cu_xsep)) &&
(((dupUse->cu_yhi - dupUse->cu_ylo) ==
((dupUse->cu_yhi > dupUse->cu_ylo) &&
((dupUse->cu_yhi - dupUse->cu_ylo) ==
(use->cu_yhi - use->cu_ylo)) &&
(dupUse->cu_ysep == use->cu_ysep));
}
if (transMatch && arrayMatch)
(dupUse->cu_ysep == use->cu_ysep)))
break;
}
BPEnumTerm(&bpe);
return dupUse;

View File

@ -320,7 +320,6 @@ DBCellDelete(cellname, force)
/* use. If so, load the window with (UNNAMED). */
UndoDisable();
free_magic1_t mm1 = freeMagic1_init();
for (celluse = celldef->cd_parents; celluse != (CellUse *) NULL;
celluse = celluse->cu_nextuse)
{
@ -329,9 +328,8 @@ DBCellDelete(cellname, force)
WindUnload(celluse);
freeMagic(celluse->cu_id);
}
freeMagic1(&mm1, (char *)celluse);
freeMagic((char *)celluse);
}
freeMagic1_end(&mm1);
celldef->cd_parents = (CellUse *)NULL;
DBWResetBox(celldef);
@ -2008,10 +2006,8 @@ DBCellDefFree(cellDef)
cellDef->cd_planes[pNum] = (Plane *) NULL;
}
free_magic1_t mm1 = freeMagic1_init();
for (lab = cellDef->cd_labels; lab; lab = lab->lab_next)
freeMagic1(&mm1, (char *) lab);
freeMagic1_end(&mm1);
freeMagic((char *) lab);
SigEnableInterrupts();
HashKill(&cellDef->cd_idHash);

View File

@ -1516,14 +1516,13 @@ DBScaleEverything(scalen, scaled)
}
/* Free the linked CellDef list */
free_magic1_t mm1 = freeMagic1_init();
lcd = lhead;
while (lcd != NULL)
{
freeMagic1(&mm1, (char *)lcd);
freeMagic((char *)lcd);
lcd = lcd->cd_next;
}
freeMagic1_end(&mm1);
/* Scale all elements */
DBWScaleElements(scalen, scaled);
@ -1770,14 +1769,12 @@ DBSrCellUses(cellDef, func, arg)
}
/* Free this linked cellUse structure */
free_magic1_t mm1 = freeMagic1_init();
lu = luhead;
while (lu != NULL)
{
freeMagic1(&mm1, (char *)lu);
freeMagic((char *)lu);
lu = lu->cu_next;
}
freeMagic1_end(&mm1);
return retval;
}
@ -2005,14 +2002,12 @@ dbScaleCell(cellDef, scalen, scaled)
BPFree(cellPlaneOrig);
/* Free this linked cellUse structure */
free_magic1_t mm1 = freeMagic1_init();
lu = luhead;
while (lu != NULL)
{
freeMagic1(&mm1, (char *)lu);
freeMagic((char *)lu);
lu = lu->cu_next;
}
freeMagic1_end(&mm1);
/* Scale all of the paint tiles in this cell by creating a new plane */
/* and copying all tiles into the new plane at scaled dimensions. */
@ -2215,14 +2210,12 @@ DBMoveCell(cellDef, origx, origy)
BPFree(cellPlaneOrig);
/* Free this linked cellUse structure */
free_magic1_t mm1 = freeMagic1_init();
lu = luhead;
while (lu != NULL)
{
freeMagic1(&mm1, (char *)lu);
freeMagic((char *)lu);
lu = lu->cu_next;
}
freeMagic1_end(&mm1);
/* Move all of the paint tiles in this cell by creating a new plane */
/* and copying all tiles into the new plane at the new position. */

View File

@ -218,10 +218,8 @@ DBCellClearDef(cellDef)
cellDef->cd_bbox.r_xtop = cellDef->cd_bbox.r_ytop = 1;
cellDef->cd_extended.r_xbot = cellDef->cd_extended.r_ybot = 0;
cellDef->cd_extended.r_xtop = cellDef->cd_extended.r_ytop = 1;
free_magic1_t mm1 = freeMagic1_init();
for (lab = cellDef->cd_labels; lab; lab = lab->lab_next)
freeMagic1(&mm1, (char *) lab);
freeMagic1_end(&mm1);
freeMagic((char *) lab);
cellDef->cd_labels = (Label *) NULL;
cellDef->cd_lastLabel = (Label *) NULL;

View File

@ -828,7 +828,6 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2)
CellDef *orig_def = scx->scx_use->cu_def;
Label *slab;
int lidx = lab->lab_port;
bool foundOne;
const TileTypeBitMask *connectMask;
/* Check for equivalent ports. For any found, call */
@ -840,7 +839,6 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2)
/* are more equivalent ports, they will be found when */
/* processing this label's area. */
foundOne = FALSE;
for (slab = orig_def->cd_labels; slab != NULL; slab = slab->lab_next)
if ((slab->lab_flags & PORT_DIR_MASK) && (slab != lab))
if (slab->lab_port == lidx)
@ -901,20 +899,6 @@ dbcConnectLabelFunc(scx, lab, tpath, csa2)
csa2->csa2_list[csa2->csa2_top].connectMask = connectMask;
csa2->csa2_list[csa2->csa2_top].dinfo = 0;
#if 0
/* This warning is useful but currently is generating
* multiple messages per instance and so its more of
* an annoyance than an aid.
*/
if (foundOne == FALSE)
TxError("Warning: Port %s at location (%d %d) connects"
" a net across multiple disconnected areas!\n",
lab->lab_text, lab->lab_rect.r_xbot,
lab->lab_rect.r_ybot);
#endif
foundOne = TRUE;
/* See above: Process only one equivalent port at a time */
break;
}
@ -1263,8 +1247,7 @@ DBTreeCopyConnect(scx, mask, xMask, connect, area, doLabels, destUse)
if (DBTreeSrLabels(scx, newmask, xMask, &tpath, searchtype,
dbcConnectLabelFunc, (ClientData) &csa2) != 0)
{
TxError("Connection search was interrupted or hit "
"memory limit and stopped.\n");
TxError("Connection search hit memory limit and stopped.\n");
break;
}
}

View File

@ -98,9 +98,6 @@ extern bool FileLocking;
/* Suffix for all Magic files */
char *DBSuffix = ".mag";
#ifdef HAVE_ZLIB
char *DBZSuffix = ".mag.gz";
#endif
/* Magic units per lambda (2 integers, representing (n / d) */
int DBLambda[2] = {1, 1};
@ -283,10 +280,8 @@ DBSearchForTech(techname, techroot, pathroot, level)
if (!strcmp(tdent->d_name, techname))
{
closedir(tdir);
free_magic1_t mm1 = freeMagic1_init();
for (ld = dlist; ld; ld = ld->ld_next)
freeMagic1(&mm1, ld);
freeMagic1_end(&mm1);
freeMagic(ld);
return pathroot;
}
}
@ -299,10 +294,8 @@ DBSearchForTech(techname, techroot, pathroot, level)
if (found)
{
closedir(tdir);
free_magic1_t mm1 = freeMagic1_init();
for (ld = dlist; ld; ld = ld->ld_next)
freeMagic1(&mm1, ld);
freeMagic1_end(&mm1);
freeMagic(ld);
return found;
}
}
@ -310,12 +303,8 @@ DBSearchForTech(techname, techroot, pathroot, level)
closedir(tdir);
}
{
free_magic1_t mm1 = freeMagic1_init();
for (ld = dlist; ld; ld = ld->ld_next)
freeMagic1(&mm1, ld);
freeMagic1_end(&mm1);
}
for (ld = dlist; ld; ld = ld->ld_next)
freeMagic(ld);
return NULL;
}
@ -1494,28 +1483,15 @@ dbReadOpen(cellDef, setFileName, dereference, errptr)
/* If dereferencing, then use search paths first */
if (!dereference)
{
f = PaLockZOpen(cellDef->cd_file, "r", DBSuffix, ".",
(char *) NULL, &filename, &is_locked, &fd);
#ifdef HAVE_ZLIB
if (f == NULL)
f = PaLockZOpen(cellDef->cd_file, "r", DBZSuffix, ".",
(char *) NULL, &filename, &is_locked, &fd);
#endif
}
/* Fall back on the original method of using search paths. */
if (f == NULL)
{
f = PaLockZOpen(cellDef->cd_name, "r", DBSuffix, Path,
CellLibPath, &filename, &is_locked, &fd);
#ifdef HAVE_ZLIB
if (f == NULL)
f = PaLockZOpen(cellDef->cd_file, "r", DBZSuffix, Path,
CellLibPath, &filename, &is_locked, &fd);
#endif
if (f != NULL)
{
@ -1548,11 +1524,6 @@ dbReadOpen(cellDef, setFileName, dereference, errptr)
{
f = PaLockZOpen(cellDef->cd_file, "r", DBSuffix, ".",
(char *) NULL, &filename, &is_locked, &fd);
#ifdef HAVE_ZLIB
if (f == NULL)
f = PaLockZOpen(cellDef->cd_file, "r", DBZSuffix, ".",
(char *) NULL, &filename, &is_locked, &fd);
#endif
if (f != NULL)
if (DBVerbose)
TxError("Warning: Dereferenced cell \"%s\" not "
@ -1570,11 +1541,6 @@ dbReadOpen(cellDef, setFileName, dereference, errptr)
{
f = PaLockZOpen(cellDef->cd_name, "r", DBSuffix, Path,
CellLibPath, &filename, &is_locked, &fd);
#ifdef HAVE_ZLIB
if (f == NULL)
f = PaLockZOpen(cellDef->cd_name, "r", DBZSuffix, Path,
CellLibPath, &filename, &is_locked, &fd);
#endif
if (errptr != NULL) *errptr = errno;
}
@ -3326,8 +3292,7 @@ dbFindPropGCFFunc(key, value, ggcf)
break;
else if (numvals != 4)
{
TxError("Error: Cannot parse %s property value at \"%s\"!\n",
key, vptr);
TxError("Error: Cannot parse %s property value!\n", key);
break;
}
else
@ -3346,7 +3311,7 @@ dbFindPropGCFFunc(key, value, ggcf)
/* Skip forward four values in value */
for (n = 0; n < 4; n++)
{
while (!isspace(*vptr) && (*vptr != '\0')) vptr++;
while (!isspace(*vptr)) vptr++;
while (isspace(*vptr) && (*vptr != '\0')) vptr++;
}
}

View File

@ -280,7 +280,6 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch)
bool erasedAny = FALSE;
TileType newType;
free_magic1_t mm1 = freeMagic1_init();
labPrev = NULL;
lab = cellDef->cd_labels;
while (lab != NULL)
@ -314,7 +313,7 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch)
if ((lab->lab_font >= 0) && areaReturn)
GeoInclude(&lab->lab_bbox, areaReturn);
freeMagic1(&mm1, (char *) lab);
freeMagic((char *) lab);
lab = lab->lab_next;
erasedAny = TRUE;
continue;
@ -322,7 +321,6 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch)
nextLab: labPrev = lab;
lab = lab->lab_next;
}
freeMagic1_end(&mm1);
if (erasedAny)
cellDef->cd_flags |= CDMODIFIED|CDGETNEWSTAMP;
@ -444,7 +442,6 @@ DBEraseLabelsByContent(def, rect, type, text)
{
Label *lab, *labPrev;
free_magic1_t mm1 = freeMagic1_init();
for (labPrev = NULL, lab = def->cd_labels;
lab != NULL;
labPrev = lab, lab = lab->lab_next)
@ -460,7 +457,7 @@ DBEraseLabelsByContent(def, rect, type, text)
else labPrev->lab_next = lab->lab_next;
if (def->cd_lastLabel == lab)
def->cd_lastLabel = labPrev;
freeMagic1(&mm1, (char *) lab);
freeMagic((char *) lab);
/* Don't iterate through loop, since this will skip a label:
* just go back to top. This is tricky!
@ -470,7 +467,6 @@ DBEraseLabelsByContent(def, rect, type, text)
if (lab == NULL) break;
else goto nextCheck;
}
freeMagic1_end(&mm1);
}
/*
@ -499,7 +495,6 @@ DBRemoveLabel(def, refLab)
{
Label *lab, *labPrev;
free_magic1_t mm1 = freeMagic1_init();
for (labPrev = NULL, lab = def->cd_labels;
lab != NULL;
labPrev = lab, lab = lab->lab_next)
@ -513,7 +508,7 @@ DBRemoveLabel(def, refLab)
else labPrev->lab_next = lab->lab_next;
if (def->cd_lastLabel == lab)
def->cd_lastLabel = labPrev;
freeMagic1(&mm1, (char *) lab);
freeMagic((char *) lab);
/* Don't iterate through loop, since this will skip a label:
* just go back to top. This is tricky!
@ -523,7 +518,6 @@ DBRemoveLabel(def, refLab)
if (lab == NULL) break;
else goto nextCheck;
}
freeMagic1_end(&mm1);
}
/*
@ -766,10 +760,8 @@ DBAdjustLabelsNew(def, area)
def->cd_lastLabel = labPrev;
DBUndoEraseLabel(def, lab);
DBWLabelChanged(def, lab, DBW_ALLWINDOWS);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *) lab);
freeMagic((char *) lab);
lab = lab->lab_next;
freeMagic1_end(&mm1);
modified = TRUE;
continue;
}
@ -1752,10 +1744,8 @@ DBLoadFont(fontfile, scale)
}
/* Remove the pointlist */
free_magic1_t mm1 = freeMagic1_init();
for (newPath = pathStart; newPath != NULL; newPath = newPath->fp_next)
freeMagic1(&mm1, newPath);
freeMagic1_end(&mm1);
freeMagic(newPath);
pathStart = NULL;
}
else

View File

@ -1796,14 +1796,12 @@ nextrect:
lr = lr->r_next;
}
free_magic1_t mm1 = freeMagic1_init();
lr = lhead;
while (lr != NULL)
{
freeMagic1(&mm1, (char *) lr);
freeMagic((char *) lr);
lr = lr->r_next;
}
freeMagic1_end(&mm1);
}
else
result = DBPaintPlane0(plane, area, resultTbl, undo, (method == PAINT_MARK) ?

View File

@ -126,14 +126,12 @@ DBTechInitPlane(void)
{
NameList *tbl;
free_magic1_t mm1 = freeMagic1_init();
for (tbl = dbPlaneNameLists.sn_next; tbl != &dbPlaneNameLists;
tbl = tbl->sn_next)
{
freeMagic(tbl->sn_name);
freeMagic1(&mm1, tbl);
freeMagic(tbl);
}
freeMagic1_end(&mm1);
}
/* Tables of short names */
@ -207,14 +205,12 @@ DBTechInitType()
{
NameList *tbl;
free_magic1_t mm1 = freeMagic1_init();
for (tbl = dbTypeNameLists.sn_next; tbl != &dbTypeNameLists;
tbl = tbl->sn_next)
{
freeMagic(tbl->sn_name);
freeMagic1(&mm1, tbl);
freeMagic(tbl);
}
freeMagic1_end(&mm1);
}
/* Tables of short names */

View File

@ -137,10 +137,8 @@ DBFixMismatch()
cellDef = mismatch->mm_cellDef;
oldArea = mismatch->mm_oldArea;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *) mismatch);
freeMagic((char *) mismatch);
mismatch = mismatch->mm_next;
freeMagic1_end(&mm1);
if (cellDef->cd_flags & CDPROCESSED) continue;
(void) DBCellRead(cellDef, TRUE, TRUE, NULL);
@ -184,15 +182,13 @@ DBFixMismatch()
}
SigEnableInterrupts();
TxPrintf("Timestamp mismatches found in these cells: ");
free_magic1_t mm1 = freeMagic1_init();
while (cl != NULL)
{
TxPrintf("%s", cl->cl_cell->cd_name);
if (cl->cl_next != NULL) TxPrintf(", ");
freeMagic1(&mm1, cl);
freeMagic(cl);
cl = cl->cl_next;
}
freeMagic1_end(&mm1);
TxPrintf(".\n");
TxFlush();
if (redisplay) WindAreaChanged((MagWindow *) NULL, (Rect *) NULL);
@ -231,7 +227,7 @@ DBUpdateStamps(def)
else if (def->cd_flags & CDGETNEWSTAMP)
{
if (def->cd_flags & (CDNOEDIT | CDFIXEDSTAMP))
if (def->cd_flags & CDFIXEDSTAMP)
def->cd_flags &= ~CDGETNEWSTAMP;
else
dbStampFunc(def);
@ -251,26 +247,6 @@ dbStampFunc(cellDef)
if (cellDef->cd_timestamp == timestamp) return 0;
/* Non-editable cells should not try to update timestamps, as the
* new timestamp cannot be written back to the file. This is
* basically a hack solution for the problem that running DRC on
* all cells causes all cells, including non-editable ones, to be
* marked as modified, even if there were no DRC changes in the
* cell. It is possible to get into trouble this way by modifying
* a cell and then marking it as non-editable
*/
if (cellDef->cd_flags & CDNOEDIT)
{
cellDef->cd_flags &= ~CDGETNEWSTAMP;
return 0;
}
/*
* Do not force a non-edit cell or a cell with a fixed timestamp
* to update its timestamp, as it cannot or should not. Just clear
* any flag suggesting that it needs a new timestamp.
*/
if (!(cellDef->cd_flags & CDFIXEDSTAMP))
cellDef->cd_timestamp = timestamp;

View File

@ -588,12 +588,10 @@ DBWElementDelete(MagWindow *w, char *name)
if (elem->flags & DBW_ELEMENT_PERSISTENT)
elem->rootDef->cd_flags |= CDMODIFIED;
free_magic1_t mm1 = freeMagic1_init();
for (stylePtr = elem->stylelist; stylePtr != NULL; stylePtr = stylePtr->next)
{
freeMagic1(&mm1, stylePtr);
freeMagic(stylePtr);
}
freeMagic1_end(&mm1);
if (elem->type == ELEMENT_TEXT)
freeMagic(elem->text);
@ -1158,10 +1156,8 @@ DBWElementStyle(MagWindow *w, char *ename, int style, bool add)
(elem->stylelist->style == style))
{
dbwElementUndraw(w, elem);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, elem->stylelist);
freeMagic(elem->stylelist);
elem->stylelist = elem->stylelist->next;
freeMagic1_end(&mm1);
if (elem->stylelist == NULL)
TxPrintf("Warning: Element %s has no styles!\n", ename);
}
@ -1173,10 +1169,8 @@ DBWElementStyle(MagWindow *w, char *ename, int style, bool add)
else if (sptr->next != NULL)
{
dbwElementUndraw(w, elem);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, sptr->next);
freeMagic(sptr->next);
sptr->next = sptr->next->next;
freeMagic1_end(&mm1);
}
}
/* mark element's cell as having been modified */
@ -1285,10 +1279,8 @@ DBWElementClearDef(cellDef)
if (!elem) continue;
if (elem->rootDef != cellDef) continue;
free_magic1_t mm1 = freeMagic1_init();
for (stylePtr = elem->stylelist; stylePtr != NULL; stylePtr = stylePtr->next)
freeMagic1(&mm1, stylePtr);
freeMagic1_end(&mm1);
freeMagic(stylePtr);
if (elem->type == ELEMENT_TEXT)
freeMagic(elem->text);

View File

@ -547,10 +547,8 @@ DRCContinuous()
if (DRCPendingRoot != (DRCPendingCookie *)NULL) {
DBReComputeBbox(DRCPendingRoot->dpc_def);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *) DRCPendingRoot);
freeMagic((char *) DRCPendingRoot);
DRCPendingRoot = DRCPendingRoot->dpc_next;
freeMagic1_end(&mm1);
}
/* Give the timestamp manager a chance to update any mismatches. */

View File

@ -522,13 +522,11 @@ DRCTechInit()
drcTechFreeStyle();
free_magic1_t mm1 = freeMagic1_init();
for (style = DRCStyleList; style != NULL; style = style->ds_next)
{
freeMagic(style->ds_name);
freeMagic1(&mm1, style);
freeMagic(style);
}
freeMagic1_end(&mm1);
DRCStyleList = NULL;
}
@ -4081,7 +4079,6 @@ drcTechFinalStyle(style)
{
for (j = 0; j < DBNumTypes; j++)
{
free_magic1_t mm1 = freeMagic1_init();
for (dp = style->DRCRulesTbl[i][j]; dp != NULL; dp = dp->drcc_next)
{
/* Don't optimize on trigger rules; optimize on the */
@ -4164,8 +4161,7 @@ drcTechFinalStyle(style)
if (dptrig != NULL)
{
dptrig = dp->drcc_next;
free_magic1_t mm1_ = freeMagic1_init();
freeMagic1(&mm1_, (char *)dp->drcc_next);
freeMagic((char *)dp->drcc_next);
*dp2back = dp->drcc_next->drcc_next;
/* Replace this entry so on the next cycle */
@ -4173,15 +4169,13 @@ drcTechFinalStyle(style)
/* even though dp is free'd (below), due to */
/* the one-delayed free mechanism. */
dp->drcc_next = *dp2back;
freeMagic1_end(&mm1_);
}
else
*dp2back = dp->drcc_next;
freeMagic1(&mm1, (char *) dp);
freeMagic((char *) dp);
drcRulesOptimized += 1;
}
freeMagic1_end(&mm1);
}
}
}

View File

@ -683,10 +683,8 @@ runexttosim:
EFVisitDevs(simmergeVisit, PTR2CD(NULL));
TxPrintf("Devices merged: %d\n", esDevsMerged);
esFMIndex = 0;
free_magic1_t mm1 = freeMagic1_init();
for (p = devMergeList; p != NULL; p = p->next)
freeMagic1(&mm1, (char *)p);
freeMagic1_end(&mm1);
freeMagic((char *)p);
devMergeList = NULL;
}
@ -814,10 +812,7 @@ main(
EFVisitDevs(simmergeVisit, PTR2CD(NULL));
TxPrintf("Devices merged: %d\n", esDevsMerged);
esFMIndex = 0;
free_magic1_t mm1 = freeMagic1_init();
for (p = devMergeList; p != NULL; p = p->next)
freeMagic1(&mm1, (char *)p);
freeMagic1_end(&mm1);
for (p = devMergeList; p != NULL; p = p->next) freeMagic((char *)p);
}
EFVisitDevs(simdevVisit, PTR2CD(NULL));

View File

@ -2201,13 +2201,11 @@ esMakePorts(
}
/* Free table data */
free_magic1_t mm1 = freeMagic1_init();
while (flagtop != NULL)
{
freeMagic1(&mm1, (char *)flagtop);
freeMagic((char *)flagtop);
flagtop = flagtop->fdr_next;
}
freeMagic1_end(&mm1);
HashKill(&flagHashTable);
return 0;
}
@ -2339,10 +2337,8 @@ esHierVisit(
EFHierVisitDevs(hcf, spcdevHierMergeVisit, (ClientData)NULL);
TxPrintf("Devs merged: %d\n", esSpiceDevsMerged);
esFMIndex = 0;
free_magic1_t mm1 = freeMagic1_init();
for (p = devMergeList; p != NULL; p = p->next)
freeMagic1(&mm1, (char *)p);
freeMagic1_end(&mm1);
freeMagic((char *)p);
devMergeList = NULL;
}
else if (esDistrJunct)

View File

@ -1104,10 +1104,8 @@ runexttospice:
fprintf(esSpiceF, " ");
freeMagic(glist->gll_name);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, glist);
freeMagic(glist);
glist = glist->gll_next;
freeMagic1_end(&mm1);
}
fprintf(esSpiceF, "\n\n");
}
@ -1161,10 +1159,8 @@ runexttospice:
EFVisitDevs(devMergeVisit, (ClientData) NULL);
TxPrintf("Devs merged: %d\n", esSpiceDevsMerged);
esFMIndex = 0;
free_magic1_t mm1 = freeMagic1_init();
for (p = devMergeList; p != NULL; p = p->next)
freeMagic1(&mm1, (char *) p);
freeMagic1_end(&mm1);
freeMagic((char *) p);
devMergeList = NULL;
}
else if (esDistrJunct)
@ -1345,12 +1341,9 @@ main(
TxPrintf("Devs merged: %d\n", esSpiceDevsMerged);
esFMIndex = 0 ;
{
const devMerge *p;
const devMerge *p;
free_magic1_t mm1 = freeMagic1_init();
for (p = devMergeList; p != NULL; p = p->next)
freeMagic1(&mm1, (char *)p);
freeMagic1_end(&mm1);
for ( p = devMergeList ; p != NULL ; p=p->next ) freeMagic((char *)p);
}
} else if ( esDistrJunct )
EFVisitDevs(devDistJunctVisit, (ClientData) NULL);
@ -1912,10 +1905,8 @@ topVisit(
sname = lnn->lnn_nodeName;
if (esDoBlackBox == FALSE || !(def->def_flags & DEF_ABSTRACT))
sname->efnn_port = ++portmax;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, lnn);
freeMagic(lnn);
lnn = lnn->lnn_next;
freeMagic1_end(&mm1);
}
/* Port numbers need not start at zero or be contiguous. They will be */

View File

@ -603,57 +603,33 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
}
if (!equalByCase)
{
/* If one of the nodes has been generated from the
* other by "extract unique", then this is a case where
* the "extract unique" algorithm is blind to shorts
* through subcell hierarchy and has made a name unique
* unnecessarily. In that case, merge the node instead
* of generating a short.
*/
char *uniqstr1, *uniqstr2;
bool isuniq;
uniqstr1 = strstr(nodeName1, "_uq");
uniqstr2 = strstr(nodeName2, "_uq");
if (uniqstr1) *uniqstr1 = '\0';
if (uniqstr2) *uniqstr2 = '\0';
isuniq = !strcmp(nodeName1, nodeName2);
if (uniqstr1) *uniqstr1 = '_';
if (uniqstr2) *uniqstr2 = '_';
if (!isuniq)
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
{
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
{
int i;
int sdev;
char *argv[10], zeroarg[] = "0";
int i;
int sdev;
char *argv[10], zeroarg[] = "0";
if ((EFOutputFlags & EF_SHORT_MASK) == EF_SHORT_R)
sdev = DEV_RES;
else
sdev = DEV_VOLT;
for (i = 0; i < 10; i++) argv[i] = zeroarg;
argv[0] = StrDup((char **)NULL, "0.0");
argv[1] = StrDup((char **)NULL, "dummy");
argv[4] = StrDup((char **)NULL, nodeName1);
argv[7] = StrDup((char **)NULL, nodeName2);
efBuildDevice(def, sdev, "None", &GeoNullRect, 10, argv);
freeMagic(argv[0]);
freeMagic(argv[1]);
freeMagic(argv[4]);
freeMagic(argv[7]);
return;
}
else if (!resist)
TxError("Warning: Ports \"%s\" and \"%s\" are electrically "
"shorted.\n", nodeName1, nodeName2);
if ((EFOutputFlags & EF_SHORT_MASK) == EF_SHORT_R)
sdev = DEV_RES;
else
/* Do not merge the nodes when folding in extresist parasitics */
return;
sdev = DEV_VOLT;
for (i = 0; i < 10; i++) argv[i] = zeroarg;
argv[0] = StrDup((char **)NULL, "0.0");
argv[1] = StrDup((char **)NULL, "dummy");
argv[4] = StrDup((char **)NULL, nodeName1);
argv[7] = StrDup((char **)NULL, nodeName2);
efBuildDevice(def, sdev, "None", &GeoNullRect, 10, argv);
freeMagic(argv[0]);
freeMagic(argv[1]);
freeMagic(argv[4]);
freeMagic(argv[7]);
return;
}
else if (resist)
else if (!resist)
TxError("Warning: Ports \"%s\" and \"%s\" are electrically shorted.\n",
nodeName1, nodeName2);
else
/* Do not merge the nodes when folding in extresist parasitics */
return;
}
@ -676,6 +652,8 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
if (efWarn)
efReadError("Merged nodes %s and %s\n", nodeName1, nodeName2);
lostnode = efNodeMerge(&nn1->efnn_node, &nn2->efnn_node);
if (nn1->efnn_port > 0) nn2->efnn_port = nn1->efnn_port;
else if (nn2->efnn_port > 0) nn1->efnn_port = nn2->efnn_port;
/* Check if there are any device terminals pointing to the
* node that was just removed.
@ -1506,34 +1484,6 @@ efBuildUse(def, subDefName, subUseId, ta, tb, tc, td, te, tf)
HashSetValue(he, (ClientData)newuse);
}
/*
* ----------------------------------------------------------------------------
*
* efConnectionFreeLinkedList --
*
* Release memory for linked-list of Connection* based on internal list
* at Connection->conn_next. 'conn' argument must be non-NULL.
*
* Results:
* Deallocates linked-list of Connection* starting at 'conn'
*
* Side effects:
* Deallocates one or more connection record(s).
*
* ----------------------------------------------------------------------------
*/
void
efConnectionFreeLinkedList(Connection *conn)
{
while (conn)
{
Connection *next = conn->conn_next;
efFreeConn(conn);
conn = next;
}
}
/*
* ----------------------------------------------------------------------------
*
@ -1568,25 +1518,7 @@ efBuildConnect(def, nodeName1, nodeName2, deltaC, av, ac)
unsigned size = sizeof (Connection)
+ (efNumResistClasses - 1) * sizeof (EFPerimArea);
/* If one of the nodes has been generated from the
* other by "extract unique", then this is a case where
* the "extract unique" algorithm is blind to shorts
* through subcell hierarchy and has made a name unique
* unnecessarily. In that case, merge the node instead
* of generating a short.
*/
char *uniqstr1, *uniqstr2;
bool isuniq;
uniqstr1 = strstr(nodeName1, "_uq");
uniqstr2 = strstr(nodeName2, "_uq");
if (uniqstr1) *uniqstr1 = '\0';
if (uniqstr2) *uniqstr2 = '\0';
isuniq = !strcmp(nodeName1, nodeName2);
if (uniqstr1) *uniqstr1 = '_';
if (uniqstr2) *uniqstr2 = '_';
if (!isuniq && ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE))
if ((EFOutputFlags & EF_SHORT_MASK) != EF_SHORT_NONE)
{
/* Handle the case where two ports on different nets get merged.
* If "extract short resistor" or "extract short voltage" has
@ -1989,10 +1921,8 @@ efNodeMerge(node1ptr, node2ptr)
if (*node1ptr == *node2ptr)
return NULL;
/*
* Keep the node with the greater number of entries, and merge
* the node with fewer entries into it.
*/
/* Keep the node with the greater number of entries, and merge */
/* the node with fewer entries into it. */
if ((*node1ptr)->efnode_num >= (*node2ptr)->efnode_num)
{
@ -2032,7 +1962,7 @@ efNodeMerge(node1ptr, node2ptr)
/* Make all EFNodeNames point to "keeping" */
if (removing->efnode_name)
{
bool topportk, topportr, bestname;
bool topportk, topportr;
for (nn = removing->efnode_name; nn; nn = nn->efnn_next)
{
@ -2044,9 +1974,9 @@ efNodeMerge(node1ptr, node2ptr)
topportr = (removing->efnode_flags & EF_TOP_PORT) ? TRUE : FALSE;
/* Concatenate list of EFNodeNames, taking into account precedence */
if ((!keeping->efnode_name) || (!topportk && topportr)
if ((!keeping->efnode_name) || (!topportk && (topportr
|| EFHNBest(removing->efnode_name->efnn_hier,
keeping->efnode_name->efnn_hier))
keeping->efnode_name->efnn_hier))))
{
/*
* New official name is that of "removing".
@ -2310,33 +2240,23 @@ efFreeNodeList(head, func)
EFAttr *ap;
LinkedRect *lr;
free_magic1_t mm1 = freeMagic1_init();
for (node = (EFNode *) head->efnode_next;
node != head;
node = (EFNode *) node->efnode_next)
{
{
free_magic1_t mm1_ = freeMagic1_init();
for (ap = node->efnode_attrs; ap; ap = ap->efa_next)
freeMagic1(&mm1_, (char *) ap);
freeMagic1_end(&mm1_);
}
for (ap = node->efnode_attrs; ap; ap = ap->efa_next)
freeMagic((char *) ap);
if (node->efnode_client != (ClientData)NULL)
{
if (func != NULL)
(*func)(node->efnode_client);
freeMagic((char *)node->efnode_client);
}
{
free_magic1_t mm1_ = freeMagic1_init();
for (lr = node->efnode_disjoint; lr; lr = lr->r_next)
freeMagic1(&mm1_, (char *)lr);
freeMagic1_end(&mm1_);
}
for (lr = node->efnode_disjoint; lr; lr = lr->r_next)
freeMagic((char *)lr);
freeMagic1(&mm1, (char *) node);
freeMagic((char *) node);
}
freeMagic1_end(&mm1);
}
/*

View File

@ -119,17 +119,18 @@ EFDone(func)
HashKill(&def->def_dists);
HashKill(&def->def_uses);
HashKill(&def->def_devs);
efConnectionFreeLinkedList(def->def_conns);
efConnectionFreeLinkedList(def->def_caps);
efConnectionFreeLinkedList(def->def_resistors);
for (conn = def->def_conns; conn; conn = conn->conn_next)
efFreeConn(conn);
for (conn = def->def_caps; conn; conn = conn->conn_next)
efFreeConn(conn);
for (conn = def->def_resistors; conn; conn = conn->conn_next)
efFreeConn(conn);
free_magic1_t mm1 = freeMagic1_init();
for (kill = def->def_kills; kill; kill = kill->kill_next)
{
freeMagic(kill->kill_name);
freeMagic1(&mm1, (char *) kill);
freeMagic((char *) kill);
}
freeMagic1_end(&mm1);
freeMagic((char *) def);
}
@ -156,10 +157,8 @@ EFDone(func)
while (plist != NULL)
{
freeMagic(plist->parm_name);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, plist);
freeMagic(plist);
plist = plist->parm_next;
freeMagic1_end(&mm1);
}
}
HashKill(&efDevParamTable);

View File

@ -306,7 +306,6 @@ extern void CapHashSetValue();
extern DevParam *efGetDeviceParams();
extern void efBuildNode();
extern void efConnectionFreeLinkedList(Connection *conn);
extern void efBuildConnect();
extern void efBuildResistor();
extern void efBuildCap();

View File

@ -465,20 +465,18 @@ EFHNFree(hierName, prefix, type)
{
HierName *hn;
free_magic1_t mm1 = freeMagic1_init();
for (hn = hierName; hn; hn = hn->hn_parent)
{
if (hn == prefix)
break;
freeMagic1(&mm1, (char *) hn);
freeMagic((char *) hn);
if (efHNStats)
{
int len = strlen(hn->hn_name);
efHNRecord(-HIERNAMESIZE(len), type);
}
}
freeMagic1_end(&mm1);
}
/*

View File

@ -95,7 +95,6 @@ extOutputGeneratedLabels(parentUse, f)
parentDef = parentUse->cu_def;
free_magic1_t mm1 = freeMagic1_init();
while ((lab = parentDef->cd_labels) != NULL)
{
if ((lab->lab_flags & LABEL_GENERATE) == 0) return;
@ -107,10 +106,9 @@ extOutputGeneratedLabels(parentUse, f)
for (n = 0; n < ExtCurStyle->exts_numResistClasses; n++)
fprintf(f, " 0 0");
putc('\n', f);
freeMagic1(&mm1, lab);
freeMagic(lab);
parentDef->cd_labels = lab->lab_next;
}
freeMagic1_end(&mm1);
}
#endif

View File

@ -2361,10 +2361,8 @@ extOutputDevices(def, transList, outFile)
break;
}
}
free_magic1_t mm1 = freeMagic1_init();
for (lt = extSpecialDevice; lt; lt = lt->t_next)
freeMagic1(&mm1, (char *)lt);
freeMagic1_end(&mm1);
freeMagic((char *)lt);
}
}
else
@ -2681,12 +2679,8 @@ extOutputDevices(def, transList, outFile)
/* Free the lists */
for (i = 0; i < extTransRec.tr_nterm; i++)
{
free_magic1_t mm1 = freeMagic1_init();
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
freeMagic1(&mm1, (char *)lb);
freeMagic1_end(&mm1);
}
freeMagic((char *)lb);
freeMagic((char *)extSpecialBounds);
/* Put the region list back the way we found it: */
@ -2776,12 +2770,8 @@ extOutputDevices(def, transList, outFile)
/* Free the lists */
for (i = 0; i < n; i++)
{
free_magic1_t mm1 = freeMagic1_init();
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
freeMagic1(&mm1, (char *)lb);
freeMagic1_end(&mm1);
}
freeMagic((char *)lb);
freeMagic((char *)extSpecialBounds);
/* Put the region list back the way we found it: */
@ -2878,12 +2868,8 @@ extOutputDevices(def, transList, outFile)
/* Free the lists */
for (i = 0; i < n; i++)
{
free_magic1_t mm1 = freeMagic1_init();
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
freeMagic1(&mm1, (char *)lb);
freeMagic1_end(&mm1);
}
freeMagic((char *)lb);
freeMagic((char *)extSpecialBounds);
/* Put the region list back the way we found it: */
@ -3030,12 +3016,8 @@ extOutputDevices(def, transList, outFile)
/* Free the lists */
for (i = 0; i < n; i++)
{
free_magic1_t mm1 = freeMagic1_init();
for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next)
freeMagic1(&mm1, (char *)lb);
freeMagic1_end(&mm1);
}
freeMagic((char *)lb);
freeMagic((char *)extSpecialBounds);
/* Put the region list back the way we found it: */
@ -3868,14 +3850,12 @@ extTransPerimFunc(bp)
extTermAPFunc, (ClientData)&eapd);
shared = 1;
free_magic1_t mm1 = freeMagic1_init();
while (eapd.eapd_shared)
{
shared++;
freeMagic1(&mm1, eapd.eapd_shared);
freeMagic(eapd.eapd_shared);
eapd.eapd_shared = eapd.eapd_shared->nl_next;
}
freeMagic1_end(&mm1);
extTransRec.tr_termarea[thisterm] = eapd.eapd_area;
extTransRec.tr_termperim[thisterm] = eapd.eapd_perim;

View File

@ -495,7 +495,6 @@ extHardFreeAll(def, tReg)
arg.fra_each = (int (*)()) NULL;
arg.fra_region = (ExtRegion *) extUnInit;
free_magic1_t mm1 = freeMagic1_init();
for (reg = tReg; reg; reg = reg->treg_next)
{
/* Reset all ti_client fields to extUnInit */
@ -507,16 +506,11 @@ extHardFreeAll(def, tReg)
}
/* Free all LabelLists and then the region */
for (ll = reg->treg_labels; ll; ll = ll->ll_next)
{
free_magic1_t mm1_ = freeMagic1_init();
for (ll = reg->treg_labels; ll; ll = ll->ll_next)
{
if (ll->ll_label->lab_flags & LABEL_GENERATE) freeMagic(ll->ll_label);
freeMagic1(&mm1_, (char *) ll);
}
freeMagic1_end(&mm1_);
if (ll->ll_label->lab_flags & LABEL_GENERATE) freeMagic(ll->ll_label);
freeMagic((char *) ll);
}
freeMagic1(&mm1, (char *) reg);
freeMagic((char *) reg);
}
freeMagic1_end(&mm1);
}

View File

@ -293,30 +293,22 @@ extLength(rootUse, f)
* each of the receivers. Free each driver label
* as it is processed.
*/
for (dLab = dList; dLab; dLab = dLab->lab_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (dLab = dList; dLab; dLab = dLab->lab_next)
for (rLab = rList; rLab; rLab = rLab->lab_next)
{
for (rLab = rList; rLab; rLab = rLab->lab_next)
{
extPathPairDistance(dLab, rLab, &min, &max);
fprintf(f, "distance %s %s %d %d\n",
extPathPairDistance(dLab, rLab, &min, &max);
fprintf(f, "distance %s %s %d %d\n",
dLab->lab_text, rLab->lab_text, min, max);
}
/* Free the driver label */
freeMagic1(&mm1, (char *) dLab);
}
freeMagic1_end(&mm1);
/* Free the driver label */
freeMagic((char *) dLab);
}
/* Free all the receiver labels built up during this iteration */
{
free_magic1_t mm1 = freeMagic1_init();
for (rLab = rList; rLab; rLab = rLab->lab_next)
freeMagic1(&mm1, (char *) rLab);
freeMagic1_end(&mm1);
}
for (rLab = rList; rLab; rLab = rLab->lab_next)
freeMagic((char *) rLab);
/* For sanity since we've freed the driver label list */
HashSetValue(he, (ClientData) NULL);

View File

@ -426,10 +426,8 @@ extDefPush(defList)
while (defList != NULL)
{
StackPush((ClientData)defList->ld_def, extDefStack);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, defList);
freeMagic(defList);
defList = defList->ld_next;
freeMagic1_end(&mm1);
}
}
@ -571,12 +569,8 @@ extParents(use, doExtract)
extDefListFunc(use, &defList);
/* use->cu_def is on the top of the list, so remove it */
{
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, defList);
defList = defList->ld_next;
freeMagic1_end(&mm1);
}
freeMagic(defList);
defList = defList->ld_next;
while (defList != NULL)
{
@ -591,10 +585,8 @@ extParents(use, doExtract)
sl = newsl;
}
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, defList);
freeMagic(defList);
defList = defList->ld_next;
freeMagic1_end(&mm1);
}
/* Mark all defs as being unvisited */
@ -609,14 +601,10 @@ extParents(use, doExtract)
StackFree(extDefStack);
/* Replace any modified substrate planes in use->cu_def's children */
for (; sl; sl = sl->sl_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (; sl; sl = sl->sl_next)
{
ExtRevertSubstrate(sl->sl_def, sl->sl_plane);
freeMagic1(&mm1, sl);
}
freeMagic1_end(&mm1);
ExtRevertSubstrate(sl->sl_def, sl->sl_plane);
freeMagic(sl);
}
}
@ -777,12 +765,8 @@ ExtractOneCell(def, outName, doLength)
extDefListFunc(&dummyUse, &defList);
/* def is on top of the list, so remove it */
{
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, defList);
defList = defList->ld_next;
freeMagic1_end(&mm1);
}
freeMagic(defList);
defList = defList->ld_next;
/* Prepare substrates of all children of def */
while (defList != NULL)
@ -797,10 +781,8 @@ ExtractOneCell(def, outName, doLength)
newsl->sl_next = sl;
sl = newsl;
}
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, defList);
freeMagic(defList);
defList = defList->ld_next;
freeMagic1_end(&mm1);
}
savePlane = ExtCell(def, outName, doLength);
@ -808,13 +790,11 @@ ExtractOneCell(def, outName, doLength)
/* Restore all modified substrate planes */
if (savePlane != NULL) ExtRevertSubstrate(def, savePlane);
free_magic1_t mm1 = freeMagic1_init();
for (; sl; sl = sl->sl_next)
{
ExtRevertSubstrate(sl->sl_def, sl->sl_plane);
freeMagic1(&mm1, sl);
freeMagic(sl);
}
freeMagic1_end(&mm1);
}
/* ------------------------------------------------------------------------- */
@ -1019,14 +999,12 @@ extExtractStack(stack, doExtract, rootDef)
}
/* Replace any modified substrate planes */
free_magic1_t mm1 = freeMagic1_init();
for (; sl; sl = sl->sl_next)
{
ExtRevertSubstrate(sl->sl_def, sl->sl_plane);
sl->sl_def->cd_flags &= ~CDNOEXTRACT;
freeMagic1(&mm1, sl);
freeMagic(sl);
}
freeMagic1_end(&mm1);
if (!doExtract)
{

View File

@ -507,10 +507,8 @@ ExtFreeRegions(regList)
{
ExtRegion *reg;
free_magic1_t mm1 = freeMagic1_init();
for (reg = regList; reg; reg = reg->reg_next)
freeMagic1(&mm1, (char *) reg);
freeMagic1_end(&mm1);
freeMagic((char *) reg);
}
void
@ -520,16 +518,12 @@ ExtFreeLabRegions(regList)
LabRegion *lreg;
LabelList *ll;
free_magic1_t mm1 = freeMagic1_init();
for (lreg = regList; lreg; lreg = lreg->lreg_next)
{
free_magic1_t mm1_ = freeMagic1_init();
for (ll = lreg->lreg_labels; ll; ll = ll->ll_next)
freeMagic1(&mm1_, (char *) ll);
freeMagic1_end(&mm1_);
freeMagic1(&mm1, (char *) lreg);
freeMagic((char *) ll);
freeMagic((char *) lreg);
}
freeMagic1_end(&mm1);
}
void
@ -539,17 +533,13 @@ ExtFreeHierLabRegions(regList)
ExtRegion *reg;
LabelList *ll;
free_magic1_t mm1 = freeMagic1_init();
for (reg = regList; reg; reg = reg->reg_next)
{
free_magic1_t mm1_ = freeMagic1_init();
for (ll = ((LabRegion *)reg)->lreg_labels; ll; ll = ll->ll_next)
{
freeMagic((char *) ll->ll_label);
freeMagic1(&mm1_, (char *) ll);
freeMagic((char *) ll);
}
freeMagic1_end(&mm1_);
freeMagic1(&mm1, (char *) reg);
freeMagic((char *) reg);
}
freeMagic1_end(&mm1);
}

View File

@ -884,7 +884,6 @@ extTechStyleInit(style)
if (style->exts_device[r] != NULL)
{
ExtDevice *devptr;
free_magic1_t mm1 = freeMagic1_init();
for (devptr = style->exts_device[r]; devptr; devptr = devptr->exts_next)
{
@ -907,18 +906,15 @@ extTechStyleInit(style)
{
if (devptr->exts_deviceParams->pl_name != NULL)
freeMagic(devptr->exts_deviceParams->pl_name);
free_magic1_t mm1_ = freeMagic1_init();
freeMagic1(&mm1_, devptr->exts_deviceParams);
freeMagic(devptr->exts_deviceParams);
devptr->exts_deviceParams = devptr->exts_deviceParams->pl_next;
freeMagic1_end(&mm1_);
}
}
if (devptr->exts_deviceResist.ht_table != (HashEntry **) NULL)
HashKill(&devptr->exts_deviceResist);
freeMagic1(&mm1, devptr);
freeMagic(devptr);
}
freeMagic1_end(&mm1);
style->exts_device[r] = (ExtDevice *)NULL;
}
}
@ -1129,13 +1125,11 @@ ExtTechInit()
/* Forget all the extract style names */
free_magic1_t mm1 = freeMagic1_init();
for (style = ExtAllStyles; style != NULL; style = style->exts_next)
{
freeMagic(style->exts_name);
freeMagic1(&mm1, style);
freeMagic(style);
}
freeMagic1_end(&mm1);
ExtAllStyles = NULL;
if (allExtractTypes == NULL)
@ -2632,10 +2626,8 @@ ExtTechLine(sectionName, argc, argv)
{
if (subcktParams->pl_name != NULL)
freeMagic(subcktParams->pl_name);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, subcktParams);
freeMagic(subcktParams);
subcktParams = subcktParams->pl_next;
freeMagic1_end(&mm1);
}
goto usage;
}

View File

@ -120,10 +120,8 @@ extHierFreeLabels(def)
{
Label *lab;
free_magic1_t mm1 = freeMagic1_init();
for (lab = def->cd_labels; lab; lab = lab->lab_next)
freeMagic1(&mm1, (char *) lab);
freeMagic1_end(&mm1);
freeMagic((char *) lab);
def->cd_labels = (Label *) NULL;
}

View File

@ -176,10 +176,8 @@ GCRFreeChannel(ch)
freeMagic((char *) ch->gcr_bPins);
freeMagic((char *) ch->gcr_lPins);
freeMagic((char *) ch->gcr_rPins);
free_magic1_t mm1 = freeMagic1_init();
for (net = ch->gcr_nets; net; net = net->gcr_next)
freeMagic1(&mm1, (char *) net);
freeMagic1_end(&mm1);
freeMagic((char *) net);
freeMagic((char *) ch->gcr_lCol);
freeMagic((char *) ch->gcr_dRowsByCol);

View File

@ -127,10 +127,8 @@ bottom:
* the channel and cause the net structure to become invalid
* anyway.
*/
free_magic1_t mm1 = freeMagic1_init();
for (net = ch->gcr_nets; net; net = net->gcr_next)
freeMagic1(&mm1, (char *) net);
freeMagic1_end(&mm1);
freeMagic((char *) net);
ch->gcr_nets = NULL;
return (gcrRouterErrors);

View File

@ -309,7 +309,6 @@ w3dFillOps(trans, tile, cliprect, ztop, zbot)
}
else
{
free_magic1_t mm1 = freeMagic1_init();
for (segptr = tilesegs; segptr != NULL; segptr = segptr->r_next)
{
GeoTransRect(trans, &segptr->r_r, &r2);
@ -323,9 +322,8 @@ w3dFillOps(trans, tile, cliprect, ztop, zbot)
}
else
w3dFillEdge(&r, &r2, ztop, zbot);
freeMagic1(&mm1, segptr);
freeMagic(segptr);
}
freeMagic1_end(&mm1);
/* For non-manhattan tiles, GrBoxOutline only returns */
/* the manhattan edges. This leaves the (possibly */

View File

@ -912,7 +912,6 @@ GrBox(MagWindow *mw, Transform *trans, Tile *tile)
}
else
{
free_magic1_t mm1 = freeMagic1_init();
/* non-rectangular box; requires drawing segments */
for (segptr = tilesegs; segptr != NULL; segptr = segptr->r_next)
{
@ -925,9 +924,8 @@ GrBox(MagWindow *mw, Transform *trans, Tile *tile)
(*grDrawLinePtr)(r.r_xbot, r.r_ybot, r.r_xtop, r.r_ytop);
/* Free memory, if it was allocated for outline segments */
freeMagic1(&mm1, segptr);
freeMagic(segptr);
}
freeMagic1_end(&mm1);
/* For non-manhattan tiles, the manhattan parts of the */
/* boundary have already been drawn. The diagonal boundary */

View File

@ -632,10 +632,8 @@ recovery:
GrStyleTable[i] = sstyle->style;
/* Add short style name reverse lookup table entry */
GrStyleNames[(int)(sstyle->shortname)] = i;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, sstyle);
freeMagic(sstyle);
sstyle = sstyle->next;
freeMagic1_end(&mm1);
}
}
dstylehead = NULL;

View File

@ -209,17 +209,9 @@ grTkDefineCursor(glyphs)
return;
}
#ifdef SUPPORT_DIRECT_MALLOC
glyphcache = (CursorCache *)malloc(sizeof(CursorCache));
#else
glyphcache = (CursorCache *)mallocMagic(sizeof(CursorCache));
#endif
g->gr_cache = (ClientData)glyphcache;
#ifdef SUPPORT_DIRECT_MALLOC
g->gr_free = free;
#else
g->gr_free = freeMagicLegacy;
#endif
g->gr_free = freeMagic;
/* Find the foreground and background colors of the glyph */

View File

@ -763,13 +763,11 @@ glChanBlockDens(ch)
}
/* Second pass to propagate blockages to nearby areas */
free_magic1_t mm1 = freeMagic1_init();
for (pa = glChanPaintList, glChanPaintList = NULL; pa; pa = pa->pa_next)
{
glChanFlood(&pa->pa_area, pa->pa_type);
freeMagic1(&mm1, (char *) pa);
freeMagic((char *) pa);
}
freeMagic1_end(&mm1);
} while (glChanPaintList != NULL);
}

View File

@ -194,7 +194,7 @@ glDMAlloc(dm, top, cap)
dm->dm_max = 0;
dm->dm_size = top + 1;
dm->dm_cap = cap;
dm->dm_value = (short *) callocMagic(dm->dm_size, (unsigned) (sizeof (short)));
dm->dm_value = (short *) callocMagic((unsigned) (sizeof (short) * dm->dm_size));
}
/*

View File

@ -192,7 +192,7 @@ glClientInit(chanList, netList)
}
for (net = netList->nnl_nets; net; net = net->nnet_next)
net->nnet_cdata = (ClientData) callocMagic(1, (unsigned) (sizeof (NetClient)));
net->nnet_cdata = (ClientData) callocMagic((unsigned) (sizeof (NetClient)));
}
/*
@ -238,10 +238,8 @@ glClientFree(chanList, netList)
for (net = netList->nnl_nets; net; net = net->nnet_next)
{
nclient = (NetClient *) net->nnet_cdata;
free_magic1_t mm1 = freeMagic1_init();
for (cz = nclient->nc_pens; cz; cz = cz->cz_next)
freeMagic1(&mm1, (char *) cz);
freeMagic1_end(&mm1);
freeMagic((char *) cz);
net->nnet_cdata = (ClientData) NULL;
}
}

View File

@ -188,10 +188,8 @@ glPathFreePerm(list)
{
GlPoint *p;
free_magic1_t mm1 = freeMagic1_init();
for (p = list; p; p = p->gl_path)
freeMagic1(&mm1, (char *) p);
freeMagic1_end(&mm1);
freeMagic((char *) p);
return 0;
}

View File

@ -103,10 +103,8 @@ glPenClearPerChan(net)
czNet = czNet->cz_next)
{
gc = (GlobChan *) czNet->cz_chan->gcr_client;
free_magic1_t mm1 = freeMagic1_init();
for (czChan = gc->gc_penList; czChan; czChan = czChan->cz_next)
freeMagic1(&mm1, (char *) czChan);
freeMagic1_end(&mm1);
freeMagic((char *) czChan);
gc->gc_penList = (CZone *) NULL;
}
return 0;
@ -459,10 +457,8 @@ glPenAssignCosts(cz, netList)
}
/* Cleanup */
free_magic1_t mm1 = freeMagic1_init();
for (ns = crossNets; ns; ns = ns->ns_next)
freeMagic1(&mm1, (char *) ns);
freeMagic1_end(&mm1);
freeMagic((char *) ns);
freeMagic((char *) crossArray);
}

View File

@ -505,10 +505,8 @@ glHistoDump()
fprintf(fp, "TOTAL: %d\n", total);
/* Free memory */
free_magic1_t mm1 = freeMagic1_init();
for (gh = glNetHistoList; gh; gh = gh->glh_next)
freeMagic1(&mm1, (char *) gh);
freeMagic1_end(&mm1);
freeMagic((char *) gh);
glNetHistoList = NULL;
/* Done */

View File

@ -699,7 +699,6 @@ endCoord:
/* Process each segment and paint into the layout */
free_magic1_t mm1 = freeMagic1_init();
while (routeTop != NULL)
{
/* paint */
@ -753,10 +752,9 @@ endCoord:
}
/* advance to next point and free record (1-delayed) */
freeMagic1(&mm1, (char *)routeTop);
freeMagic((char *)routeTop);
routeTop = routeTop->r_next;
}
freeMagic1_end(&mm1);
return token; /* Pass back the last token found */
}
@ -1635,7 +1633,6 @@ DefReadPins(
else
flags |= LABEL_STICKY;
free_magic1_t mm1 = freeMagic1_init();
while (rectList != NULL)
{
GeoTransRect(&t, &rectList->r_r, &topRect);
@ -1661,10 +1658,9 @@ DefReadPins(
GEO_CENTER, pinname,
rectList->r_type,
pinDir | pinUse | flags, pinNum);
freeMagic1(&mm1, rectList);
freeMagic(rectList);
rectList = rectList->r_next;
}
freeMagic1_end(&mm1);
pending = FALSE;
pinNum++;
}
@ -1685,7 +1681,6 @@ DefReadPins(
else
flags |= LABEL_STICKY;
free_magic1_t mm1 = freeMagic1_init();
while (rectList != NULL)
{
GeoTransRect(&t, &rectList->r_r, &topRect);
@ -1720,10 +1715,9 @@ DefReadPins(
GEO_CENTER, pinname,
rectList->r_type,
pinDir | pinUse | flags, pinNum);
freeMagic1(&mm1, rectList);
freeMagic(rectList);
rectList = rectList->r_next;
}
freeMagic1_end(&mm1);
pending = FALSE;
pinNum++;
}

View File

@ -2559,7 +2559,6 @@ defWriteBlockages(
{
if (defobsdata.blockData[i] == NULL) continue;
fprintf(f, " - LAYER %s", defobsdata.baseNames[i]);
free_magic1_t mm1 = freeMagic1_init();
for (lr = defobsdata.blockData[i]; lr; lr = lr->r_next)
{
fprintf(f, "\n RECT ( %.10g %.10g ) ( %.10g %.10g )",
@ -2567,9 +2566,8 @@ defWriteBlockages(
(float)(lr->r_r.r_ybot * oscale),
(float)(lr->r_r.r_xtop * oscale),
(float)(lr->r_r.r_ytop * oscale));
freeMagic1(&mm1, lr);
freeMagic(lr);
}
freeMagic1_end(&mm1);
fprintf(f, " ;\n");
}
fprintf(f, "END BLOCKAGES\n\n");

View File

@ -532,10 +532,8 @@ CmdLef(
if (!strcasecmp(inet, "none"))
{
/* Remove all net names from the list */
free_magic1_t mm1 = freeMagic1_init();
for (lnn = lefIgnoreNets; lnn; lnn = lnn->lnn_next)
freeMagic1(&mm1, lnn);
freeMagic1_end(&mm1);
freeMagic(lnn);
lefIgnoreNets = NULL;
}
else

View File

@ -701,10 +701,8 @@ LefRedefined(
/* Only one name associated with the record, so */
/* just clear all the allocated information. */
free_magic1_t mm1 = freeMagic1_init();
for (viaLR = lefl->info.via.lr; viaLR != NULL; viaLR = viaLR->r_next)
freeMagic1(&mm1, viaLR);
freeMagic1_end(&mm1);
freeMagic(viaLR);
newlefl = lefl;
}
else
@ -1079,16 +1077,14 @@ LefReadPolygon(
plist = (Point *)mallocMagic(lpoints * sizeof(Point));
lpoints = 0;
free_magic1_t mm1 = freeMagic1_init();
while (lr != NULL)
{
plist[*ppoints - lpoints - 1].p_x = lr->r_r.r_xbot;
plist[*ppoints - lpoints - 1].p_y = lr->r_r.r_ybot;
freeMagic1(&mm1, lr);
freeMagic(lr);
lpoints++;
lr = lr->r_next;
}
freeMagic1_end(&mm1);
return plist;
}
@ -1454,7 +1450,6 @@ LefReadPort(
rectList = LefReadGeometry(lefMacro, f, oscale, gdsOffset, TRUE, is_imported);
free_magic1_t mm1 = freeMagic1_init();
while (rectList != NULL)
{
if ((pinNum >= 0) || (lanno != NULL))
@ -1534,10 +1529,9 @@ LefReadPort(
if (lanno != NULL) lanno = NULL;
}
freeMagic1(&mm1, (char *)rectList);
freeMagic((char *)rectList);
rectList = rectList->r_next;
}
freeMagic1_end(&mm1);
}
/*

View File

@ -1861,7 +1861,6 @@ lefWriteMacro(
DBPaint(lc.lefYank, &layerBound, ttype);
}
free_magic1_t mm1 = freeMagic1_init();
for (thislll = lll; thislll; thislll = thislll->lll_next)
{
int mspace;
@ -1880,9 +1879,8 @@ lefWriteMacro(
thislll->lll_area.r_ytop += mspace;
DBErase(lc.lefYank, &thislll->lll_area, lab->lab_type);
freeMagic1(&mm1, thislll);
freeMagic(thislll);
}
freeMagic1_end(&mm1);
if (setback >= 0)
{

View File

@ -497,12 +497,10 @@ mzReclaimTCFunc(tile, notUsed)
Estimate *e;
/* free estimates attached to tilecosts struc */
free_magic1_t mm1 = freeMagic1_init();
for(e=tc->tc_estimates; e!=NULL; e=e->e_next)
{
freeMagic1(&mm1, (char *) e);
freeMagic((char *) e);
}
freeMagic1_end(&mm1);
/* free tilecosts struc */
freeMagic((char *) (tile->ti_client));

View File

@ -123,24 +123,16 @@ MZFreeParameters(params)
RouteLayer *rL;
RouteContact *rC;
for (rL = params->mp_rLayers; rL; rL = rL->rl_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (rL = params->mp_rLayers; rL; rL = rL->rl_next)
{
ListDealloc(rL->rl_contactL);
TiFreePlane(rL->rl_routeType.rt_hBlock);
TiFreePlane(rL->rl_routeType.rt_vBlock);
freeMagic1(&mm1, rL);
}
freeMagic1_end(&mm1);
ListDealloc(rL->rl_contactL);
TiFreePlane(rL->rl_routeType.rt_hBlock);
TiFreePlane(rL->rl_routeType.rt_vBlock);
freeMagic(rL);
}
{
free_magic1_t mm1 = freeMagic1_init();
for (rC = params->mp_rContacts; rC; rC = rC->rc_next)
freeMagic1(&mm1, rC);
freeMagic1_end(&mm1);
}
for (rC = params->mp_rContacts; rC; rC = rC->rc_next)
freeMagic(rC);
}
@ -167,14 +159,12 @@ MZTechInit()
/* Clear out any old information */
if (mzStyles != NULL)
{
free_magic1_t mm1 = freeMagic1_init();
for (style = mzStyles; style != NULL; style = style->ms_next)
{
MZFreeParameters(&(style->ms_parms));
freeMagic(style->ms_name);
freeMagic1(&mm1, style);
freeMagic(style);
}
freeMagic1_end(&mm1);
}
/* Initially no route types defined */
@ -619,7 +609,7 @@ mzTechLayer(argc, argv)
}
/* Allocate new route layer */
new = (RouteLayer *) callocMagic(1, (unsigned) (sizeof (RouteLayer)));
new = (RouteLayer *) callocMagic((unsigned) (sizeof (RouteLayer)));
/* Initialize RouteType section */
mzInitRouteType(&(new->rl_routeType),tileType);
@ -1153,7 +1143,7 @@ mzTechContact(argc, argv)
if(tileType < 0) return;
/* allocate new route contact */
new = (RouteContact *) callocMagic(1, (unsigned) (sizeof (RouteContact)));
new = (RouteContact *) callocMagic((unsigned) (sizeof (RouteContact)));
/* initialize RouteType section:
* sets route type, initializes spacing array, etc.

View File

@ -157,8 +157,7 @@ NMCmdCleanup(w, cmd)
* is in progress.
*/
free_magic1_t mm1 = freeMagic1_init();
for (p = nmCleanupList; p != NULL; p = p->nmcl_next)
for (p = nmCleanupList; p != NULL; p = p->nmcl_next)
{
char answer[30];
int indx, defaultValue;
@ -185,15 +184,11 @@ NMCmdCleanup(w, cmd)
switch (indx)
{
case 0:
{
free_magic1_t mm1_ = freeMagic1_init();
while (p != NULL)
{
freeMagic1(&mm1_, (char *) p);
freeMagic((char *) p);
p = p->nmcl_next;
}
freeMagic1_end(&mm1_);
}
return;
case 1:
NMDeleteNet(p->nmcl_name);
@ -202,9 +197,8 @@ NMCmdCleanup(w, cmd)
NMDeleteTerm(p->nmcl_name);
break;
}
freeMagic1(&mm1, (char *) p);
freeMagic((char *) p);
}
freeMagic1_end(&mm1);
if (nmCleanupList == NULL)
TxPrintf("No problems found.\n");

View File

@ -350,16 +350,14 @@ NMDeleteNet(net)
*/
next = ne->ne_next;
free_magic1_t mm1 = freeMagic1_init();
while (TRUE)
{
NMUndo(next->ne_name, net, NMUE_REMOVE);
HashSetValue(HashFind(&nmCurrentNetlist->nl_table, next->ne_name), 0);
freeMagic1(&mm1, (char *) next);
freeMagic((char *) next);
if (next == ne) break;
next = next->ne_next;
}
freeMagic1_end(&mm1);
}
/*

View File

@ -180,7 +180,6 @@ NMRipup()
*/
TTMaskZero(&maskBits);
free_magic1_t mm1 = freeMagic1_init();
while (list != NULL)
{
DBErase(EditCellUse->cu_def, &list->nmwa_area, list->nmwa_type);
@ -190,10 +189,9 @@ NMRipup()
DRCCheckThis(EditCellUse->cu_def, TT_CHECKPAINT, &list->nmwa_area);
DBWAreaChanged(EditCellUse->cu_def, &list->nmwa_area, DBW_ALLWINDOWS,
&DBAllButSpaceBits);
freeMagic1(&mm1, (char *) list);
freeMagic((char *) list);
list = list->nmwa_next;
}
freeMagic1_end(&mm1);
DBReComputeBbox(EditCellUse->cu_def);
return 0;
}
@ -242,7 +240,6 @@ nmRipLocFunc(rect, name, label, area)
&TiPlaneRect, nmwRipTileFunc, (ClientData) &list);
TTMaskZero(&maskBits);
TTMaskClearType(&maskBits, label->lab_type);
free_magic1_t mm1 = freeMagic1_init();
while (list != NULL)
{
DBErase(EditCellUse->cu_def, &list->nmwa_area, list->nmwa_type);
@ -250,10 +247,9 @@ nmRipLocFunc(rect, name, label, area)
(void) DBEraseLabel(EditCellUse->cu_def, &list->nmwa_area, &maskBits, NULL);
TTMaskClearType(&maskBits, list->nmwa_type);
(void) GeoInclude(&list->nmwa_area, area);
freeMagic1(&mm1, (char *) list);
freeMagic((char *) list);
list = list->nmwa_next;
}
freeMagic1_end(&mm1);
return 0;
}

View File

@ -181,35 +181,23 @@ PlotPSTechInit()
/* Clear out any old information */
for (style = plotPSStyles; style != NULL; style = style->grs_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (style = plotPSStyles; style != NULL; style = style->grs_next)
{
freeMagic1(&mm1, (char *) style);
}
freeMagic1_end(&mm1);
plotPSStyles = NULL;
freeMagic((char *) style);
}
plotPSStyles = NULL;
for (pattern = plotPSPatterns; pattern != NULL; pattern = pattern->pat_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (pattern = plotPSPatterns; pattern != NULL; pattern = pattern->pat_next)
{
freeMagic1(&mm1, (char *) pattern);
}
freeMagic1_end(&mm1);
plotPSPatterns = NULL;
freeMagic((char *) pattern);
}
plotPSPatterns = NULL;
for (color = plotPSColors; color != NULL; color = color->col_next)
{
free_magic1_t mm1 = freeMagic1_init();
for (color = plotPSColors; color != NULL; color = color->col_next)
{
freeMagic1(&mm1, (char *) color);
}
freeMagic1_end(&mm1);
plotPSColors = NULL;
freeMagic((char *) color);
}
plotPSColors = NULL;
if (!PlotPSIdFont)
StrDup(&PlotPSIdFont, defaultFont);

View File

@ -216,12 +216,10 @@ PlotVersTechInit()
{
VersatecStyle *style;
free_magic1_t mm1 = freeMagic1_init();
for (style = plotVersStyles; style != NULL; style = style->vs_next)
{
freeMagic1(&mm1, (char *) style);
freeMagic((char *) style);
}
freeMagic1_end(&mm1);
plotVersStyles = NULL;
if (PlotVersPrinter == NULL)
@ -269,12 +267,10 @@ PlotColorVersTechInit()
{
VersatecStyle *style;
free_magic1_t mm1 = freeMagic1_init();
for (style = plotColorVersStyles; style != NULL; style = style->vs_next)
{
freeMagic1(&mm1, (char *) style);
freeMagic((char *) style);
}
freeMagic1_end(&mm1);
plotColorVersStyles = NULL;
if (PlotVersPrinter == NULL)

View File

@ -239,13 +239,11 @@ PlowClearBound()
pb = plowBoundaryList;
plowCheckBoundary = FALSE;
plowBoundaryList = (PlowBoundary *) NULL;
free_magic1_t mm1 = freeMagic1_init();
for ( ; pb; pb = pb->pb_next)
{
DBWHLRedraw(pb->pb_rootDef, &pb->pb_rootArea, TRUE);
freeMagic1(&mm1, (char *) pb);
freeMagic((char *) pb);
}
freeMagic1_end(&mm1);
}
/*

View File

@ -127,19 +127,11 @@ PlowDRCInit()
{
for (j = 0; j < DBNumTypes; j++)
{
{
free_magic1_t mm1 = freeMagic1_init();
for (pr = plowWidthRulesTbl[i][j]; pr; pr = pr->pr_next)
freeMagic1(&mm1, (char *)pr);
freeMagic1_end(&mm1);
}
for (pr = plowWidthRulesTbl[i][j]; pr; pr = pr->pr_next)
freeMagic((char *)pr);
{
free_magic1_t mm1 = freeMagic1_init();
for (pr = plowSpacingRulesTbl[i][j]; pr; pr = pr->pr_next)
freeMagic1(&mm1, (char *)pr);
freeMagic1_end(&mm1);
}
for (pr = plowSpacingRulesTbl[i][j]; pr; pr = pr->pr_next)
freeMagic((char *)pr);
plowWidthRulesTbl[i][j] = NULL;
plowSpacingRulesTbl[i][j] = NULL;
@ -705,7 +697,6 @@ plowTechOptimizeRule(ruleList)
*/
pCand = ruleList;
pCandLast = (PlowRule *) NULL;
free_magic1_t mm1 = freeMagic1_init();
while (pCand)
{
for (pr = ruleList; pr; pr = pr->pr_next)
@ -727,7 +718,7 @@ plowTechOptimizeRule(ruleList)
* Delete pCand, and resume outer loop with the
* new values of pCand and pCandLast set below.
*/
freeMagic1(&mm1, (char *) pCand);
freeMagic((char *) pCand);
if (pCandLast)
pCandLast->pr_next = pCand->pr_next;
else
@ -743,7 +734,6 @@ plowTechOptimizeRule(ruleList)
next: ;
}
freeMagic1_end(&mm1);
return (ruleList);
}

View File

@ -92,7 +92,6 @@ resAllPortNodes(tile, list)
resPort *pl;
tileJunk *junk = (tileJunk *)TiGetClientPTR(tile);
free_magic1_t mm1 = freeMagic1_init();
for (pl = junk->portList; pl; pl = pl->rp_nextPort)
{
x = pl->rp_loc.p_x;
@ -104,9 +103,8 @@ resAllPortNodes(tile, list)
resptr->rn_name = pl->rp_nodename;
ResAddToQueue(resptr, list);
NEWBREAK(resptr, tile, x, y, NULL);
freeMagic1(&mm1, pl);
freeMagic(pl);
}
freeMagic1_end(&mm1);
}
/*

View File

@ -685,13 +685,11 @@ typedef enum {
HashKill(&ResProcessedTable);
/* Revert substrate planes */
free_magic1_t mm1 = freeMagic1_init();
for (sl = resisdata.savePlanes; sl; sl = sl->sl_next)
{
ExtRevertSubstrate(sl->sl_def, sl->sl_plane);
freeMagic1(&mm1, sl);
freeMagic(sl);
}
freeMagic1_end(&mm1);
/* turn back on undo stuff */
UndoEnable();

View File

@ -173,7 +173,6 @@ RtrStemProcessAll(use, netList, doWarn, func)
* they all turned out to be unusable.
*/
locPrev = locFirst = (NLTermLoc *) NULL;
free_magic1_t mm1 = freeMagic1_init();
for (loc = term->nterm_locs; loc; loc = loc->nloc_next)
{
if (loc->nloc_chan == (GCRChannel *) NULL)
@ -188,14 +187,13 @@ RtrStemProcessAll(use, netList, doWarn, func)
/* Nuke it */
if (locPrev) locPrev->nloc_next = loc->nloc_next;
freeMagic1(&mm1, (char *) loc);
freeMagic((char *) loc);
continue;
}
locPrev = loc;
if (locFirst == (NLTermLoc *) NULL)
locFirst = loc;
}
freeMagic1_end(&mm1);
/* Nuke any leading elements */
term->nterm_locs = locFirst;

View File

@ -386,13 +386,11 @@ rtrViaCheck(area, def)
*/
DBErase(def, area, RtrContactType);
free_magic1_t mm1 = freeMagic1_init();
for ( pl = rtrPaintList; pl; pl = pl->pl_next)
{
DBPaint(def, &pl->pl_area, type);
freeMagic1(&mm1, (char *)pl );
freeMagic( (char *)pl );
}
freeMagic1_end(&mm1);
rtrVias++;
return;
@ -525,29 +523,21 @@ RtrViaMinimize(def)
* Replace poly with metal where appropriate.
*/
for ( ap = rtrAreaList; ap; ap = ap->ap_next)
{
free_magic1_t mm1 = freeMagic1_init();
for ( ap = rtrAreaList; ap; ap = ap->ap_next)
{
DBErase(def, &ap->ap_erase, ap->ap_oldtype);
DBPaint(def, &ap->ap_paint, ap->ap_newtype);
freeMagic1(&mm1, (char *)ap);
}
freeMagic1_end(&mm1);
DBErase(def, &ap->ap_erase, ap->ap_oldtype);
DBPaint(def, &ap->ap_paint, ap->ap_newtype);
freeMagic( (char *)ap);
}
/*
* Eliminate unnecessary vias.
*/
for ( vp = rtrViaList; vp; vp = vp->vp_next)
{
free_magic1_t mm1 = freeMagic1_init();
for ( vp = rtrViaList; vp; vp = vp->vp_next)
{
rtrViaCheck(&vp->vp_area, def);
freeMagic1(&mm1, (char *)vp);
}
freeMagic1_end(&mm1);
rtrViaCheck(&vp->vp_area, def);
freeMagic( (char *)vp);
}
/*
@ -568,29 +558,21 @@ RtrViaMinimize(def)
* Erase poly and replace with metal.
*/
for ( ap = rtrAreaList; ap; ap = ap->ap_next)
{
free_magic1_t mm1 = freeMagic1_init();
for ( ap = rtrAreaList; ap; ap = ap->ap_next)
{
DBErase(def, &ap->ap_erase, ap->ap_oldtype);
DBPaint(def, &ap->ap_paint, ap->ap_newtype);
freeMagic1(&mm1, (char *)ap);
}
freeMagic1_end(&mm1);
DBErase(def, &ap->ap_erase, ap->ap_oldtype);
DBPaint(def, &ap->ap_paint, ap->ap_newtype);
freeMagic( (char *)ap);
}
/*
* Eliminate unnecessary vias.
*/
for ( vp = rtrViaList; vp; vp = vp->vp_next)
{
free_magic1_t mm1 = freeMagic1_init();
for ( vp = rtrViaList; vp; vp = vp->vp_next)
{
rtrViaCheck(&vp->vp_area, def);
freeMagic1(&mm1, (char *)vp);
}
freeMagic1_end(&mm1);
rtrViaCheck(&vp->vp_area, def);
freeMagic( (char *)vp);
}
return rtrVias;

View File

@ -93,29 +93,12 @@ CC = @CC@
CPP = @CPP@
CXX = @CXX@
###
### Feature flags (to enable uncomment these from ./defs.mak after your ./configure)
###
### SUPPORT_DIRECT_MALLOC: this removes the legacy malloc/free APIs that are
### not thread-safe and have a defer-free-by-1 quirk that maybe covering
### up unknown problems. See utils/malloc.[ch] for more info.
###
### Status: EXPERIMENTAL (this is expected to uncover issues we don't know about yet)
#FEATURE_FLAGS += -DSUPPORT_DIRECT_MALLOC
###
### SUPPORT_REMOVE_MALLOC_LEGACY this completely removes the older non-threadsafe API
### from the output binaries.
### This option is dependent on SUPPORT_DIRECT_MALLOC
###
### Status: NOT-STABILITY-AFFECTING (if your binary links you are good to continue)
#FEATURE_FLAGS += -DSUPPORT_REMOVE_MALLOC_LEGACY
CPPFLAGS = -I${MAGICDIR} @CPPFLAGS@
DFLAGS_MAGICVERSION = -DMAGIC_VERSION=\"${MAGIC_VERSION}\" -DMAGIC_REVISION=\"${MAGIC_REVISION}\" -DMAGIC_COMMIT=\"${MAGIC_COMMIT}\" "-DMAGIC_BUILDDATE=\"${MAGIC_BUILDDATE}\""
DFLAGS = @extra_defs@ @stub_defs@ @DEFS@ ${DFLAGS_MAGICVERSION} -DGCORE=\"@GCORE@\"
DFLAGS += -DSHDLIB_EXT=\"@SHDLIB_EXT@\" @NDEBUG_defs@ @DEBUG_defs@ ${FEATURE_FLAGS}
DFLAGS += -DSHDLIB_EXT=\"@SHDLIB_EXT@\" @NDEBUG_defs@ @DEBUG_defs@
DFLAGS_NOSTUB = @extra_defs@ @DEFS@ ${DFLAGS_MAGICVERSION} -DGCORE=\"@GCORE@\"
DFLAGS_NOSTUB += -DSHDLIB_EXT=\"@SHDLIB_EXT@\" @NDEBUG_defs@ @DEBUG_defs@ ${FEATURE_FLAGS}
DFLAGS_NOSTUB += -DSHDLIB_EXT=\"@SHDLIB_EXT@\" @NDEBUG_defs@ @DEBUG_defs@
CFLAGS = @CFLAGS@ @SHLIB_CFLAGS@ @INC_SPECS@
READLINE_DEFS = @rl_defs@

View File

@ -259,10 +259,8 @@ selEnumPFunc1(tile, arg)
if ((*arg->sea_func)(&rootRect, arg->sea_rectList->r_type, arg->sea_cdarg) != 0)
return 1;
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *)arg->sea_rectList);
freeMagic((char *)arg->sea_rectList);
arg->sea_rectList = arg->sea_rectList->r_next;
freeMagic1_end(&mm1);
}
return 0;
}

View File

@ -1595,10 +1595,8 @@ SelectStretch(x, y)
TTMaskSetOnlyType(&tmask, tloc);
DBPaintValid(EditCellUse->cu_def, &selStretchList->sa_area, &tmask, type);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *) selStretchList);
freeMagic((char *) selStretchList);
selStretchList = selStretchList->sa_next;
freeMagic1_end(&mm1);
}
/* Paint the new translated selection back into the edit cell,

View File

@ -373,13 +373,7 @@ if {[info commands magic::openwrapper] != {}} {
foreach cellname $celllist {
set fext [file extension $cellname]
switch $fext {
.gz {}
"" {}
default {
puts stdout "Handling file entry $cellname extension $fext"
}
}
puts stdout "handling file entry $cellname extension $fext"
switch $fext {
.lef -
.LEF {lef read $cellname}
@ -396,16 +390,6 @@ if {[info commands magic::openwrapper] != {}} {
.tcl {source $cellname}
.mag -
"" {magic::load $cellname}
.gz {
set rootname [file root $cellname]
set fext [file extension $rootname]
puts stdout "Handling compressed entry $cellname extension $fext"
switch $fext {
.gds {gds read $cellname}
.mag {magic::load $cellname}
default {puts stderr "only compressed .mag and .gds are handled."}
}
}
default {puts stderr "don't know how to load file $cellname"}
}
}

View File

@ -587,12 +587,11 @@ HashRemove(table, key)
bucket = hash(table, key);
h = *(table->ht_table + bucket);
hlast = NULL;
free_magic1_t mm1 = freeMagic1_init();
while (h != NIL)
{
if (strcmp(h->h_key.h_name, key) == 0)
{
freeMagic1(&mm1, (char *)h);
freeMagic((char *)h);
if (hlast != NULL)
hlast->h_next = h->h_next;
else
@ -602,7 +601,6 @@ HashRemove(table, key)
hlast = h;
h = h->h_next;
}
freeMagic1_end(&mm1);
}
@ -692,20 +690,16 @@ HashKill(table)
if (table->ht_ptrKeys == HT_CLIENTKEYS) killFn = table->ht_killFn;
for (hp = table->ht_table, hend = &hp[table->ht_size]; hp < hend; hp++)
{
free_magic1_t mm1 = freeMagic1_init();
for (h = *hp; h != NIL; h = h->h_next)
{
const void *p;
freeMagic1(&mm1, (char *) h);
freeMagic((char *) h);
if (killFn)
{
p = h->h_key.h_ptr;
(*killFn)((void *)p);
}
}
freeMagic1_end(&mm1);
}
freeMagic((char *) table->ht_table);
/*

View File

@ -73,7 +73,7 @@ extern IHashTable *IHashInit(
IHashTable *table;
table = (IHashTable *)mallocMagic(sizeof(IHashTable));
table->iht_table = (void **)callocMagic(nBuckets, sizeof(void *));
table->iht_table = (void **)callocMagic(sizeof(void *)*nBuckets);
table->iht_nBucketsInit = nBuckets;
table->iht_nBuckets = nBuckets;
table->iht_nEntries = 0;
@ -99,7 +99,7 @@ void IHashClear(IHashTable *table)
{
/* reinitial bucket array */
freeMagic((char *) table->iht_table);
table->iht_table = (void **)callocMagic(table->iht_nBucketsInit, sizeof(void *));
table->iht_table = (void **)callocMagic(sizeof(void *)*table->iht_nBucketsInit);
table->iht_nBuckets = table->iht_nBucketsInit;
table->iht_nEntries = 0;
@ -217,7 +217,7 @@ static void iHashResize(IHashTable *table)
int bucket;
/* alloc a new table */
table->iht_table = (void **)callocMagic(newSize, sizeof(void *));
table->iht_table = (void **)callocMagic(sizeof(void *)*newSize);
table->iht_nBuckets = newSize;
table->iht_nEntries = 0;

View File

@ -98,10 +98,8 @@ void
ListDealloc(list)
List *list; /* List to free */
{
free_magic1_t mm1 = freeMagic1_init();
for(;list!=NULL; list=LIST_TAIL(list))
freeMagic1(&mm1, (char *) list);
freeMagic1_end(&mm1);
freeMagic((char *) list);
return;
}
@ -126,13 +124,11 @@ void
ListDeallocC(list)
List *list; /* List to free */
{
free_magic1_t mm1 = freeMagic1_init();
for(;list!=NULL; list=LIST_TAIL(list))
{
freeMagic1(&mm1, (char *) LIST_FIRST(list)); /* can probably use normal free() */
freeMagic1(&mm1, (char *) list);
freeMagic((char *) LIST_FIRST(list));
freeMagic((char *) list);
}
freeMagic1_end(&mm1);
return;
}

View File

@ -133,11 +133,9 @@ extern char *SysLibPath; /* Path for finding system
* Just for the sake of robustness, though, we define malloc and free
* here to error strings.
*/
#ifndef SUPPORT_DIRECT_MALLOC
#define malloc You_should_use_the_Magic_procedure_mallocMagic_instead
#define free You_should_use_the_Magic_procedure_freeMagic_instead
#define calloc You_should_use_the_Magic_procedure_callocMagic_instead
#endif
/* ---------- Flag for global variables (for readability) ------------- */

View File

@ -43,18 +43,14 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
#include <string.h>
#include "tcltk/tclmagic.h"
#define _MAGIC__UTILS__MALLOC_H__NOINLINE
#include "utils/magic.h"
#include "utils/malloc.h"
/* Normally we're supposed to warn against the use of standard malloc() */
/* and free(), but obviously that doesn't apply to this file. */
#ifndef SUPPORT_DIRECT_MALLOC
/* this is needed to remove the utils/magic.h defines */
#undef malloc
#undef free
#endif
/* Imports */
@ -68,7 +64,6 @@ extern char *TxGetLine();
* would no further references would be made to free'ed storage.
*/
#ifndef SUPPORT_REMOVE_MALLOC_LEGACY
/* Delay free'ing by one call, to accommodate Magic's needs. */
static char *freeDelayedItem = NULL;
@ -97,14 +92,14 @@ static char *freeDelayedItem = NULL;
/*
*---------------------------------------------------------------------
* mallocMagicLegacy() --
* mallocMagic() --
*
* memory allocator with support for one-delayed-item free'ing
*---------------------------------------------------------------------
*/
void *
mallocMagicLegacy(nbytes)
mallocMagic(nbytes)
size_t nbytes;
{
void *p;
@ -132,14 +127,14 @@ mallocMagicLegacy(nbytes)
/*
*---------------------------------------------------------------------
* freeMagicLegacy() --
* freeMagic() --
*
* one-delayed-item memory deallocation
*---------------------------------------------------------------------
*/
void
freeMagicLegacy(cp)
freeMagic(cp)
void *cp;
{
if (cp == NULL)
@ -155,14 +150,14 @@ freeMagicLegacy(cp)
/*
*---------------------------------------------------------------------
* callocMagicLegacy() --
* callocMagic() --
*
* allocate memory and initialize it to all zero bytes.
*---------------------------------------------------------------------
*/
void *
callocMagicLegacy(nbytes)
callocMagic(nbytes)
size_t nbytes;
{
void *cp;
@ -173,46 +168,3 @@ callocMagicLegacy(nbytes)
return (cp);
}
#endif /* SUPPORT_REMOVE_MALLOC_LEGACY */
#ifdef __GNUC_STDC_INLINE__
/* Use of 'extern inline' force an emit of inline code at a symbol */
extern inline free_magic1_t freeMagic1_init(void);
extern inline void freeMagic1(free_magic1_t* m1, void* ptr);
extern inline void freeMagic1_end(free_magic1_t* m1);
#else /* __GNUC_STDC_INLINE__ */
/*
* NOTICE: non-inline form of emitted functions, keep in sync with malloc.h
*/
free_magic1_t freeMagic1_init(void) {
return NULL;
}
void freeMagic1(free_magic1_t* m1, void* ptr) {
//if(*m1) /* this if() is here to help inliner remove the call to free() when it can */
/* this is not the inline form here so if() is commented out */
{
#if (defined(SUPPORT_DIRECT_MALLOC) || defined(SUPPORT_REMOVE_MALLOC_LEGACY))
free(*m1); /* no need for NULL check with free() */
#else
/* but freeMagicLegacy() does not like NULL passed, so extra if() penalty here */
if(*m1) freeMagicLegacy(*m1);
#endif
}
*m1 = ptr;
}
void freeMagic1_end(free_magic1_t* m1) {
//if(*m1) /* this if() is here to help inliner remove the call to free() when it can */
/* this is not the inline form here so if() is commented out */
{
#if (defined(SUPPORT_DIRECT_MALLOC) || defined(SUPPORT_REMOVE_MALLOC_LEGACY))
free(*m1); /* no need for NULL check with free() */
#else
/* but freeMagicLegacy() does not like NULL passed, so extra if() penalty here */
if(*m1) freeMagicLegacy(*m1);
#endif
}
}
#endif /* __GNUC_STDC_INLINE__ */

View File

@ -22,74 +22,8 @@
#ifndef _MAGIC__UTILS__MALLOC_H
#define _MAGIC__UTILS__MALLOC_H
#include <stdlib.h>
/* build time configuration check */
#if (!defined(SUPPORT_DIRECT_MALLOC) && defined(SUPPORT_REMOVE_MALLOC_LEGACY))
#error "ERROR: Unspported build configuration SUPPORT_REMOVE_MALLOC_LEGACY is defined but SUPPORT_DIRECT_MALLOC is undefined"
#endif
#ifdef SUPPORT_DIRECT_MALLOC
#define mallocMagic malloc
#define callocMagic calloc
#define freeMagic free
#else /* SUPPORT_DIRECT_MALLOC */
extern void *mallocMagicLegacy(size_t);
#define mallocMagic(size) mallocMagicLegacy(size)
/* renamed like this, so there is no performance loss if the byte count
* can be computed at compile time.
*/
extern void *callocMagicLegacy(size_t);
#define callocMagic(nmemb, size) callocMagicLegacy((nmemb) * (size))
extern void freeMagicLegacy(void *);
#define freeMagic(ptr) freeMagicLegacy(ptr)
#endif /* SUPPORT_DIRECT_MALLOC */
typedef void* free_magic1_t;
#ifdef __GNUC_STDC_INLINE__
/* Provide compiler visibility of STDC 'inline' semantics */
/*
* NOTICE: inline form, keep in sync with malloc.c copied
*/
inline free_magic1_t freeMagic1_init(void) {
return NULL;
}
inline void freeMagic1(free_magic1_t* m1, void* ptr) {
if(*m1) /* this if() is here to help inliner remove the call to free() when it can */
{
#if (defined(SUPPORT_DIRECT_MALLOC) || defined(SUPPORT_REMOVE_MALLOC_LEGACY))
free(*m1); /* no need for NULL check with free() */
#else
freeMagicLegacy(*m1);
#endif
}
*m1 = ptr;
}
inline void freeMagic1_end(free_magic1_t* m1) {
if(*m1) /* this if() is here to help inliner remove the call to free() when it can */
{
#if (defined(SUPPORT_DIRECT_MALLOC) || defined(SUPPORT_REMOVE_MALLOC_LEGACY))
free(*m1); /* no need for NULL check with free() */
#else
freeMagicLegacy(*m1);
#endif
}
}
#else /* __GNUC_STDC_INLINE__ */
/* To support older compilers (that don't auto emit based on -O level) */
extern free_magic1_t freeMagic1_init(void);
extern void freeMagic1(free_magic1_t* m1, void* ptr);
extern void freeMagic1_end(free_magic1_t* m1);
#endif /* __GNUC_STDC_INLINE__ */
extern void *mallocMagic(size_t);
extern void *callocMagic(size_t);
extern void freeMagic(void *);
#endif /* _MAGIC__UTILS__MALLOC_H */

View File

@ -268,18 +268,16 @@ NLFree(netList)
NLTerm *term;
NLNet *net;
free_magic1_t mm1 = freeMagic1_init();
for (net = netList->nnl_nets; net; net = net->nnet_next)
{
for (term = net->nnet_terms; term; term = term->nterm_next)
{
for (loc = term->nterm_locs; loc; loc = loc->nloc_next)
freeMagic1(&mm1, (char *) loc);
freeMagic1(&mm1, (char *) term);
freeMagic((char *) loc);
freeMagic((char *) term);
}
freeMagic1(&mm1, (char *) net);
freeMagic((char *) net);
}
freeMagic1_end(&mm1);
HashKill(&netList->nnl_names);
}

View File

@ -83,14 +83,12 @@ PaVisitFree(pv)
{
PaVisitClient *pvc;
free_magic1_t mm1 = freeMagic1_init();
for (pvc = pv->pv_first; pvc; pvc = pvc->pvc_next)
{
if (pvc->pvc_keyword)
freeMagic(pvc->pvc_keyword);
freeMagic1(&mm1, (char *) pvc);
freeMagic((char *) pvc);
}
freeMagic1_end(&mm1);
freeMagic((char *) pv);
}

View File

@ -760,10 +760,8 @@ skipsection:
{
fclose(fstack->file);
freeMagic(fstack->filename);
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, fstack);
freeMagic(fstack);
fstack = fstack->next;
freeMagic1_end(&mm1);
}
if (fstack) fclose(fstack->file);

View File

@ -244,13 +244,11 @@ UndoInit(logFileName, mode)
* Deallocate any events stored in main memory
*/
free_magic1_t mm1 = freeMagic1_init();
while (undoLogHead != (internalUndoEvent *) NULL)
while (undoLogHead != (internalUndoEvent *) NULL)
{
freeMagic1(&mm1, (char *) undoLogHead);
freeMagic((char *) undoLogHead);
undoLogHead = undoLogHead->iue_forw;
}
freeMagic1_end(&mm1);
return (TRUE);
}
@ -372,14 +370,12 @@ UndoFlush()
if (undoLogHead == (internalUndoEvent *) NULL)
return;
free_magic1_t mm1 = freeMagic1_init();
while (undoLogTail != undoLogHead)
{
freeMagic1(&mm1, (char *) undoLogTail);
freeMagic((char *) undoLogTail);
undoLogTail = undoLogTail->iue_back;
ASSERT(undoLogTail != (internalUndoEvent *) NULL, "UndoFlush");
}
freeMagic1_end(&mm1);
freeMagic((char *) undoLogHead);
undoLogHead = undoLogTail = undoLogCur = (internalUndoEvent *) NULL;
@ -817,22 +813,18 @@ undoFreeHead()
while (undoNumCommands > LOWCOMMANDS)
{
free_magic1_t mm1 = freeMagic1_init();
do
{
ASSERT(undoLogHead != undoLogCur, "undoFreeHead");
freeMagic1(&mm1, (char *) undoLogHead);
freeMagic((char *) undoLogHead);
undoLogHead = undoLogHead->iue_forw;
ASSERT(undoLogHead != (internalUndoEvent *) NULL, "undoFreeHead");
}
while (undoLogHead->iue_type != UT_DELIM);
freeMagic1_end(&mm1);
undoNumCommands--;
}
free_magic1_t mm1 = freeMagic1_init();
freeMagic1(&mm1, (char *) undoLogHead);
freeMagic((char *) undoLogHead);
undoLogHead = undoLogHead->iue_forw;
freeMagic1_end(&mm1);
undoLogHead->iue_back = (internalUndoEvent *) NULL;
}
@ -872,13 +864,11 @@ undoMemTruncate()
* Delete ALL events from memory
*/
up = undoLogHead;
free_magic1_t mm1 = freeMagic1_init();
while (up != (internalUndoEvent *) NULL)
{
freeMagic1(&mm1, (char *) up);
freeMagic((char *) up);
up = up->iue_forw;
}
freeMagic1_end(&mm1);
undoLogTail = undoLogHead = (internalUndoEvent *) NULL;
undoNumCommands = 0;
}
@ -889,15 +879,13 @@ undoMemTruncate()
* Delete only some of the events in main memory.
*/
up = undoLogCur->iue_forw;
free_magic1_t mm1 = freeMagic1_init();
while (up != (internalUndoEvent *) NULL)
{
if (up->iue_type == UT_DELIM)
undoNumCommands--;
freeMagic1(&mm1, (char *) up);
freeMagic((char *) up);
up = up->iue_forw;
}
freeMagic1_end(&mm1);
undoLogCur->iue_forw = (internalUndoEvent *) NULL;
undoLogTail = undoLogCur;
}

View File

@ -61,13 +61,11 @@ WireTechInit(void)
Contact *contact;
int i;
free_magic1_t mm1 = freeMagic1_init();
while (WireContacts != NULL)
{
freeMagic1(&mm1, (char *) WireContacts);
freeMagic((char *) WireContacts);
WireContacts = WireContacts->con_next;
}
freeMagic1_end(&mm1);
WireUnits = 1;
}