fix infinite def write

Signed-off-by: Kareem Farid <kareefardi@users.noreply.github.com>
This commit is contained in:
Kareem Farid 2024-07-30 12:21:36 +03:00 committed by Tim Edwards
parent efcf36f348
commit a6aac9c309
1 changed files with 13 additions and 3 deletions

View File

@ -2965,6 +2965,13 @@ DefWriteCell(def, outName, allSpecial, units, analRetentive)
TxError("Please name the cell before generating DEF.\n"); TxError("Please name the cell before generating DEF.\n");
return; return;
} }
char * outName_part ;
if((outName_part = mallocMagic(strlen(outName)+strlen("_part")+1)) != NULL) {
outName_part[0] = '\0';
strcat(outName_part, outName);
strcat(outName_part, "_part");
}
//
f = lefFileOpen(def, outName, ".def", "w", &filename); f = lefFileOpen(def, outName, ".def", "w", &filename);
@ -3015,7 +3022,7 @@ DefWriteCell(def, outName, allSpecial, units, analRetentive)
/* Not done yet with output, so keep this file open. . . */ /* Not done yet with output, so keep this file open. . . */
f2 = lefFileOpen(def, outName, ".def_part", "w", &filename); f2 = lefFileOpen(def, outName_part, ".def", "w", &filename);
if (f2 == NULL) if (f2 == NULL)
{ {
@ -3030,6 +3037,7 @@ DefWriteCell(def, outName, allSpecial, units, analRetentive)
fclose(f); fclose(f);
unlink(filename1); unlink(filename1);
freeMagic(filename1); freeMagic(filename1);
freeMagic(outName_part);
return; return;
} }
filename2 = StrDup((char **)NULL, filename); filename2 = StrDup((char **)NULL, filename);
@ -3132,7 +3140,7 @@ DefWriteCell(def, outName, allSpecial, units, analRetentive)
/* Append contents of file with NETS and SPECIALNETS sections */ /* Append contents of file with NETS and SPECIALNETS sections */
f2 = lefFileOpen(def, outName, ".def_part", "r", &filename); f2 = lefFileOpen(def, outName_part, ".def", "r", &filename);
if (f2 == NULL) if (f2 == NULL)
{ {
/* This should not happen because the file was just written. . . */ /* This should not happen because the file was just written. . . */
@ -3148,10 +3156,12 @@ DefWriteCell(def, outName, allSpecial, units, analRetentive)
unlink(filename1); unlink(filename1);
freeMagic(filename1); freeMagic(filename1);
freeMagic(filename2); freeMagic(filename2);
freeMagic(outName_part);
return; return;
} }
while (fgets(line, sizeof line, f2) != NULL) fprintf(f, "%s", line); while (fgets(line, sizeof line, f2) != NULL) fprintf(f, "%s", line);
fclose(f2); fclose(f2);
freeMagic(outName_part);
/* Blockages */ /* Blockages */
defWriteBlockages(f, def, scale, lefMagicToLefLayer); defWriteBlockages(f, def, scale, lefMagicToLefLayer);