Corrected an error in "extresist" that can output an incorrect

number of terminals for devices that don't have the usual gate/
source/drain terminals (e.g., diodes, resistors, capacitors) when
writing the devices with re-mapped terminals into the .res.ext
file.  Also:  Changed the size of the word containing the name
refcount for "equiv" statements, since an accidental shorting
of pins can cause a large number of "equiv" statements in a .ext
file, causing an overrun of the previously 1-byte refcount (this
probably does not make the structure any longer, since it likely
has to fit to a word boundary).
This commit is contained in:
Tim Edwards 2022-12-06 21:55:01 -05:00
parent fb091fa03f
commit 02bbb1064e
4 changed files with 11 additions and 7 deletions

View File

@ -1 +1 @@
8.3.348
8.3.349

View File

@ -763,6 +763,8 @@ efFlatGlob()
HashSetValue(heGlob, (ClientData) nameGlob);
nameGlob->efnn_node = nodeFlat;
nameGlob->efnn_hier = (HierName *) heGlob->h_key.h_ptr;
nameGlob->efnn_port = -1;
nameGlob->efnn_refc = 0;
}
else if (nameGlob->efnn_node != nodeFlat)
{

View File

@ -126,7 +126,7 @@ typedef struct efnn
struct efnn *efnn_next; /* Next name for this node */
HierName *efnn_hier; /* HierName for this node */
int efnn_port; /* Port number for this node */
unsigned char efnn_refc; /* #times referenced in hash */
unsigned short efnn_refc; /* #times referenced in hash */
} EFNodeName;
/*

View File

@ -185,11 +185,13 @@ ResPrintExtDev(outextfile, devices)
devices->layout->rd_width,
devices->rs_sattr);
if (devices->drain != NULL)
fprintf(outextfile, " \"%s\" %d %s",
devices->drain->name,
devices->layout->rd_width,
devices->rs_dattr);
/* Don't write drain values for 2-terminal devices */
if (devptr->exts_deviceSDCount > 1)
if (devices->drain != NULL)
fprintf(outextfile, " \"%s\" %d %s",
devices->drain->name,
devices->layout->rd_width,
devices->rs_dattr);
fprintf(outextfile, "\n");
}