From a61026588c6af49d282043705010fe4885ed8d88 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Wed, 24 Feb 2021 12:35:06 -0500 Subject: [PATCH] Revert "Modified the .ext file reading and the .spice file writing so that" This reverts commit 46baae0ce63fa3d140762955ef975f963713d3be. Reverting the last commit, as it does not work completely the way it is supposed to, and will most likely have to be done in a different way. --- ext2spice/ext2spice.c | 65 ++++++++++--------------- extflat/EFbuild.c | 108 ++---------------------------------------- extflat/EFname.c | 4 +- 3 files changed, 30 insertions(+), 147 deletions(-) diff --git a/ext2spice/ext2spice.c b/ext2spice/ext2spice.c index 8c282178..976ab6b8 100644 --- a/ext2spice/ext2spice.c +++ b/ext2spice/ext2spice.c @@ -3359,7 +3359,6 @@ char *nodeSpiceName(hname, rnode) EFNodeName *nn; HashEntry *he; EFNode *node; - char *p, *s; if (rnode) *rnode = (EFNode *)NULL; he = EFHNLook(hname, (char *) NULL, "nodeName"); @@ -3385,21 +3384,8 @@ makeName: if ( esFormat == HSPICE ) /* more processing */ nodeHspiceName(esTempName); } - - /* Strip any escaped-slash hiearchy dividers or array delimiters */ - /* out of the name, as they have been put there to prevent magic */ - /* from interpeting them as hierarchy divers or array delimiters. */ - - for (s = p = esTempName; *s; p++, s++) - { - if ((*s == '\\') && ((*(s + 1) == '/') || (*(s + 1) == '[') - || (*(s + 1) == ']'))) - s++; - if (p != s) *p = *s; - } - if (p != s) *p = *s; /* Copy trailing NULL */ - - ((nodeClient *)(node->efnode_client))->spiceNodeName = StrDup(NULL, esTempName); + ((nodeClient *) (node->efnode_client))->spiceNodeName = + StrDup(NULL, esTempName); retName: return ((nodeClient *) (node->efnode_client))->spiceNodeName; @@ -3413,8 +3399,7 @@ retName: * Create a hierarchical node name. * The flags in EFTrimFlags control whether global (!) or local (#) * suffixes are to be trimmed. Also substitutes \. with \@ if the - * format is hspice. Backslash-escaped slashes are converted back - * to the original character. + * format is hspice. * * Results: * None. @@ -3431,34 +3416,36 @@ EFHNSprintf(str, hierName) HierName *hierName; { bool trimGlob, trimLocal, convertComma, convertEqual, convertBrackets; - char *cp, c; + char *s, *cp, c; char *efHNSprintfPrefix(HierName *, char *); + s = str; if (hierName->hn_parent) str = efHNSprintfPrefix(hierName->hn_parent, str); - - cp = hierName->hn_name; - trimGlob = (EFTrimFlags & EF_TRIMGLOB); - trimLocal = (EFTrimFlags & EF_TRIMLOCAL); - convertComma = (EFTrimFlags & EF_CONVERTCOMMA); - convertEqual = (EFTrimFlags & EF_CONVERTEQUAL); - convertBrackets = (EFTrimFlags & EF_CONVERTBRACKETS); - while (c = *cp++) + if (EFTrimFlags) { - switch (c) + cp = hierName->hn_name; + trimGlob = (EFTrimFlags & EF_TRIMGLOB); + trimLocal = (EFTrimFlags & EF_TRIMLOCAL); + convertComma = (EFTrimFlags & EF_CONVERTCOMMA); + convertEqual = (EFTrimFlags & EF_CONVERTEQUAL); + convertBrackets = (EFTrimFlags & EF_CONVERTBRACKETS); + while (c = *cp++) { - case '!': if (!trimGlob) *str++ = c; break; - case '.': *str++ = (esFormat == HSPICE)?'@':'.'; break; - case '=': if (convertEqual) *str++ = ':'; break; - case ',': if (convertComma) *str++ = '|'; break; - case '[': *str++ = (convertBrackets) ? '_' : '['; break; - case ']': *str++ = (convertBrackets) ? '_' : ']'; break; - case '\\': if (*(cp + 1) == '/') str++; break; - case '#': if (trimLocal) break; // else fall through - default: *str++ = c; break; + switch (c) + { + case '!': if (!trimGlob) *str++ = c; break; + case '.': *str++ = (esFormat == HSPICE)?'@':'.'; break; + case '=': if (convertEqual) *str++ = ':'; break; + case ',': if (convertComma) *str++ = '|'; break; + case '[': *str++ = (convertBrackets) ? '_' : '['; break; + case ']': *str++ = (convertBrackets) ? '_' : ']'; break; + case '#': if (trimLocal) break; // else fall through + default: *str++ = c; break; + } } + *str++ = '\0'; } - *str++ = '\0'; - + else strcpy(str, hierName->hn_name); return 0; } diff --git a/extflat/EFbuild.c b/extflat/EFbuild.c index ccb38dc8..09ac3a2e 100644 --- a/extflat/EFbuild.c +++ b/extflat/EFbuild.c @@ -1142,98 +1142,6 @@ efBuildAddStr(table, pMax, size, str) return max; } -/* - * ---------------------------------------------------------------------------- - * - * efNeedsCleanName -- - * - * Determine if a name needs to be cleaned by efMakeCleanName, to avoid - * excessive and unnecessary string allocation and copying . - * - * "level" is 0 or 1, defined as it is for efMakeCleanName() (see below). - * - * ---------------------------------------------------------------------------- - */ - -bool -efNeedsCleanName(str, level) - char *str; - int level; -{ - char *s; - bool seenOne = FALSE; - bool needsCleaning = FALSE; - - for (s = str; *s; s++) - if (*s == '/') - if ((s == str) || (*(s - 1) != '\\')) - { - if ((level == 0) || seenOne) - { - needsCleaning = TRUE; - break; - } - seenOne = TRUE; - } - - return needsCleaning; -} - -/* - * ---------------------------------------------------------------------------- - * - * efMakeCleanName -- - * - * Generate a copy of a name like StrDup(), but cleanse the name of slash - * characters by backslash-escaping them. This lets ext2spice differentiate - * between slashes that are part of an instance name and the hierarchical - * name for a node, which is built up internally with slash characters. - * - * "level" is the number of slashes at the end which are part of the - * hierarchy and not part of the name. "use" lines in the .ext file should - * have a level of 0, while "merge" lines have a level of 1. No other values - * of "level" are supported. - * - * ---------------------------------------------------------------------------- - */ - -char * -efMakeCleanName(str, level) - char *str; - int level; -{ - char *rstr; - char *s, *p, *ssave; - int escapes; - - /* Count unescaped slashes in the string */ - escapes = 0; - ssave = NULL; - for (s = str; *s; s++) - if (*s == '/') - if ((s == str) || (*(s - 1) != '\\')) - { - ssave = s; - escapes++; - } - - if (escapes > 0) - escapes -= level; - - rstr = (char *)mallocMagic(strlen(str) + 1 + escapes); - - for (s = str, p = rstr; *s; s++, p++) - { - if (*s == '/') - if ((s == str) || (*(s - 1) != '\\')) - if ((level == 0) || (s != ssave)) - *p++ = '\\'; - *p = *s; - } - *p = *s; /* Copy final NULL */ - return rstr; -} - /* * ---------------------------------------------------------------------------- * @@ -1305,12 +1213,12 @@ efBuildUse(def, subDefName, subUseId, ta, tb, tc, td, te, tf) &newuse->use_ylo, &newuse->use_yhi, &newuse->use_ysep)) == 6) { *cp = '\0'; - newuse->use_id = efMakeCleanName(subUseId, 0); + newuse->use_id = StrDup((char **) NULL, subUseId); *cp = '['; } else { - newuse->use_id = efMakeCleanName(subUseId, 0); + newuse->use_id = StrDup((char **) NULL, subUseId); newuse->use_xlo = newuse->use_xhi = 0; newuse->use_ylo = newuse->use_yhi = 0; newuse->use_xsep = newuse->use_ysep = 0; @@ -1352,20 +1260,13 @@ efBuildConnect(def, nodeName1, nodeName2, deltaC, av, ac) int ac; /* Number of strings in av */ { int n; - char *locName1, *locName2; Connection *conn; unsigned size = sizeof (Connection) + (efNumResistClasses - 1) * sizeof (EFPerimArea); conn = (Connection *) mallocMagic((unsigned)(size)); - locName1 = nodeName1; - if (efNeedsCleanName(nodeName1)) locName1 = efMakeCleanName(nodeName1, 1); - - locName2 = nodeName2; - if (efNeedsCleanName(nodeName2)) locName2 = efMakeCleanName(nodeName2, 1); - - if (efConnInitSubs(conn, locName1, locName2)) + if (efConnInitSubs(conn, nodeName1, nodeName2)) { conn->conn_cap = (EFCapValue) deltaC; conn->conn_next = def->def_conns; @@ -1379,9 +1280,6 @@ efBuildConnect(def, nodeName1, nodeName2, deltaC, av, ac) conn->conn_pa[n].pa_area = conn->conn_pa[n].pa_perim = 0; def->def_conns = conn; } - - if (locName1 != nodeName1) freeMagic(locName1); - if (locName2 != nodeName2) freeMagic(locName2); } /* diff --git a/extflat/EFname.c b/extflat/EFname.c index cdb931fe..60365cdd 100644 --- a/extflat/EFname.c +++ b/extflat/EFname.c @@ -225,8 +225,7 @@ EFStrToHN(prefix, suffixStr) /* * Convert the relative name into a HierName path, with one HierName - * created for each slash-separated segment of suffixStr. Backslash- - * escaped slashes are not part of a path and are ignored. + * created for each slash-separated segment of suffixStr. */ cp = slashPtr = suffixStr; for (;;) @@ -243,7 +242,6 @@ EFStrToHN(prefix, suffixStr) slashPtr = cp; prefix = hierName; } - else if ((*cp == '\\') && (*(cp + 1) == '/')) cp += 2; else cp++; }