diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 47be0d4ed..d0edc7d83 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -8313,7 +8313,6 @@ static struct card *u_instances(struct card *startcard) int udev_ok = 0, udev_not_ok = 0; BOOL create_called = FALSE, repeat_pass = FALSE; BOOL skip_next = FALSE; - char *tmp = NULL, *pos, *posp, *new_str = NULL; card = startcard; while (card) { @@ -8336,35 +8335,36 @@ static struct card *u_instances(struct card *startcard) } initialize_udevice(subcktcard->line); create_called = TRUE; - } else { - /* Pspice definition of .subckt card: - .SUBCKT [node]* - + [OPTIONAL: < = >*] - + [PARAMS: < = >* ] - + [TEXT: < = >* ] - ... - .ENDS - */ - tmp = TMALLOC(char, strlen(cut_line) + 1); - (void) memcpy(tmp, cut_line, strlen(cut_line) + 1); - pos = strstr(tmp, "optional:"); - posp = strstr(tmp, "params:"); - /* If there is an optional: and a param: then posp > pos */ - if (pos) { - /* Remove the optional: section if present */ - *pos = '\0'; - if (posp) { - strcat(tmp, posp); - } - } - new_str = copy(tmp); - tfree(tmp); } } else if (ciprefix(".ends", cut_line)) { level--; if (repeat_pass) { newcard = replacement_udevice_cards(); if (newcard) { + char *tmp = NULL, *pos, *posp, *new_str = NULL, *cl; + /* Pspice definition of .subckt card: + .SUBCKT [node]* + + [OPTIONAL: < = >*] + + [PARAMS: < = >* ] + + [TEXT: < = >* ] + ... + .ENDS + */ + cl = subcktcard->line; + tmp = TMALLOC(char, strlen(cl) + 1); + (void) memcpy(tmp, cl, strlen(cl) + 1); + pos = strstr(tmp, "optional:"); + posp = strstr(tmp, "params:"); + /* If there is an optional: and a param: then posp > pos */ + if (pos) { + /* Remove the optional: section if present */ + *pos = '\0'; + if (posp) { + strcat(tmp, posp); + } + } + new_str = copy(tmp); + tfree(tmp); remove_old_cards(subcktcard->nextcard, card); subcktcard->nextcard = newcard; tfree(subcktcard->line); diff --git a/src/frontend/udevices.c b/src/frontend/udevices.c index 97f6ef22f..cfe158a1e 100644 --- a/src/frontend/udevices.c +++ b/src/frontend/udevices.c @@ -2766,16 +2766,16 @@ static struct dff_instance *add_dff_inout_timing_model( arrp = dffip->d_in; for (i = 0; i < num_gates; i++) { if (strncmp(arrp[i], "$d_", 3) == 0) { - tfree(dffip); + delete_dff_instance(dffip); return NULL; } } if (eq(dffip->prebar, "$d_lo") || eq(dffip->prebar, "$d_nc")) { - tfree(dffip); + delete_dff_instance(dffip); return NULL; } if (eq(dffip->clrbar, "$d_lo") || eq(dffip->clrbar, "$d_nc")) { - tfree(dffip); + delete_dff_instance(dffip); return NULL; } @@ -2841,20 +2841,20 @@ static struct dltch_instance *add_dltch_inout_timing_model( arrp = dlp->d_in; for (i = 0; i < num_gates; i++) { if (strncmp(arrp[i], "$d_", 3) == 0) { - tfree(dlp); + delete_dltch_instance(dlp); return NULL; } } if (strncmp(dlp->gate, "$d_", 3) == 0) { - tfree(dlp); + delete_dltch_instance(dlp); return NULL; } if (eq(dlp->prebar, "$d_lo") || eq(dlp->prebar, "$d_nc")) { - tfree(dlp); + delete_dltch_instance(dlp); return NULL; } if (eq(dlp->clrbar, "$d_lo") || eq(dlp->clrbar, "$d_nc")) { - tfree(dlp); + delete_dltch_instance(dlp); return NULL; } return dlp; @@ -2930,16 +2930,16 @@ static struct jkff_instance *add_jkff_inout_timing_model( for (i = 0; i < num_gates; i++) { if (strncmp(arrp[i], "$d_", 3) == 0 || strncmp(arrpk[i], "$d_", 3) == 0) { - tfree(jkffip); + delete_jkff_instance(jkffip); return NULL; } } if (eq(jkffip->prebar, "$d_lo") || eq(jkffip->prebar, "$d_nc")) { - tfree(jkffip); + delete_jkff_instance(jkffip); return NULL; } if (eq(jkffip->clrbar, "$d_lo") || eq(jkffip->clrbar, "$d_nc")) { - tfree(jkffip); + delete_jkff_instance(jkffip); return NULL; } return jkffip; @@ -3019,20 +3019,20 @@ static struct srff_instance *add_srff_inout_timing_model( for (i = 0; i < num_gates; i++) { if (strncmp(arrp[i], "$d_", 3) == 0 || strncmp(arrpr[i], "$d_", 3) == 0) { - tfree(srffp); + delete_srff_instance(srffp); return NULL; } } if (strncmp(srffp->gate, "$d_", 3) == 0) { - tfree(srffp); + delete_srff_instance(srffp); return NULL; } if (eq(srffp->prebar, "$d_lo") || eq(srffp->prebar, "$d_nc")) { - tfree(srffp); + delete_srff_instance(srffp); return NULL; } if (eq(srffp->clrbar, "$d_lo") || eq(srffp->clrbar, "$d_nc")) { - tfree(srffp); + delete_srff_instance(srffp); return NULL; } return srffp;