@@ -104,8 +104,8 @@ void* BLIF::Reader::__read() {
104
104
// A cache of hard block models indexed by name. As each one is read, it's stored here to be used again.
105
105
hard_block_models* models = create_hard_block_models ();
106
106
printf (" \n " );
107
- char buffer[READ_BLIF_BUFFER] ;
108
- while (vtr::fgets (buffer, READ_BLIF_BUFFER, file) && read_tokens (buffer, models)) { // Print a progress bar indicating completeness.
107
+ char * buffer = NULL ;
108
+ while (getbline (buffer, READ_BLIF_BUFFER, file) && read_tokens (buffer, models)) { // Print a progress bar indicating completeness.
109
109
position = print_progress_bar ((++line_count) / (double )num_lines, position, 50 , wall_time () - time);
110
110
}
111
111
free_hard_block_models (models);
@@ -121,9 +121,12 @@ void* BLIF::Reader::__read() {
121
121
// delete output_nets_hash;
122
122
fclose (file);
123
123
124
- printf (" Elaborating the netlist created from the input BLIF file to make it compatible with ODIN_II partial mapping \n " );
124
+ printf (" Elaborating the netlist created from the input BLIF file\n " );
125
125
blif_elaborate_top (blif_netlist);
126
126
127
+ /* clean up */
128
+ vtr::free (buffer);
129
+
127
130
return static_cast <void *>(blif_netlist);
128
131
}
129
132
@@ -187,8 +190,8 @@ void BLIF::Reader::find_top_module() {
187
190
188
191
bool found = false ;
189
192
while (!found) {
190
- char buffer[READ_BLIF_BUFFER] ;
191
- vtr::fgets (buffer, READ_BLIF_BUFFER, file);
193
+ char * buffer = NULL ;
194
+ getbline (buffer, READ_BLIF_BUFFER, file);
192
195
my_location.line += 1 ;
193
196
194
197
// not sure if this is needed
@@ -197,9 +200,12 @@ void BLIF::Reader::find_top_module() {
197
200
198
201
char * token = vtr::strtok (buffer, TOKENS, file, buffer);
199
202
if (token && !strcmp (token, " .model" )) {
200
- top_module = vtr::strtok (NULL , TOKENS, file, buffer);
203
+ top_module = vtr::strdup ( vtr:: strtok (NULL , TOKENS, file, buffer) );
201
204
found = true ;
202
205
}
206
+
207
+ /* clean up */
208
+ vtr::free (buffer);
203
209
}
204
210
205
211
if (!found) {
@@ -762,8 +768,8 @@ hard_block_model* BLIF::Reader::read_hard_block_model(char* name_subckt, operati
762
768
model = NULL ;
763
769
764
770
// Search the file for .model followed buy the subcircuit name.
765
- char buffer[READ_BLIF_BUFFER] ;
766
- while (vtr::fgets (buffer, READ_BLIF_BUFFER, file)) {
771
+ char * buffer = NULL ;
772
+ while (getbline (buffer, READ_BLIF_BUFFER, file)) {
767
773
my_location.line += 1 ;
768
774
char * token = vtr::strtok (buffer, TOKENS, file, buffer);
769
775
// match .model followed by the subcircuit name.
@@ -779,7 +785,7 @@ hard_block_model* BLIF::Reader::read_hard_block_model(char* name_subckt, operati
779
785
model->outputs ->names = NULL ;
780
786
781
787
// Read the inputs and outputs.
782
- while (vtr::fgets (buffer, READ_BLIF_BUFFER, file)) {
788
+ while (getbline (buffer, READ_BLIF_BUFFER, file)) {
783
789
char * first_word = vtr::strtok (buffer, TOKENS, file, buffer);
784
790
if (first_word) {
785
791
if (!strcmp (first_word, " .inputs" )) {
@@ -803,6 +809,9 @@ hard_block_model* BLIF::Reader::read_hard_block_model(char* name_subckt, operati
803
809
}
804
810
}
805
811
812
+ /* clean up */
813
+ vtr::free (buffer);
814
+
806
815
if (!model || feof (file)) {
807
816
if (configuration.coarsen )
808
817
model = create_hard_block_model (name_subckt, type, ports);
@@ -991,10 +1000,10 @@ operation_list BLIF::Reader::read_bit_map_find_unknown_gate(int input_count, nno
991
1000
char ** bit_map = NULL ;
992
1001
char * output_bit_map = NULL ; // to distinguish whether for the bit_map output is 1 or 0
993
1002
int line_count_bitmap = 0 ; // stores the number of lines in a particular bit map
994
- char buffer[READ_BLIF_BUFFER] ;
1003
+ char * buffer = NULL ;
995
1004
996
1005
if (!input_count) {
997
- vtr::fgets (buffer, READ_BLIF_BUFFER, file);
1006
+ getbline (buffer, READ_BLIF_BUFFER, file);
998
1007
my_location.line += 1 ;
999
1008
1000
1009
char * ptr = vtr::strtok (buffer, " \t\n " , file, buffer);
@@ -1009,7 +1018,7 @@ operation_list BLIF::Reader::read_bit_map_find_unknown_gate(int input_count, nno
1009
1018
}
1010
1019
} else {
1011
1020
while (1 ) {
1012
- vtr::fgets (buffer, READ_BLIF_BUFFER, file);
1021
+ getbline (buffer, READ_BLIF_BUFFER, file);
1013
1022
my_location.line += 1 ;
1014
1023
1015
1024
if (!(buffer[0 ] == ' 0' || buffer[0 ] == ' 1' || buffer[0 ] == ' -' ))
@@ -1209,6 +1218,9 @@ operation_list BLIF::Reader::read_bit_map_find_unknown_gate(int input_count, nno
1209
1218
to_return = GENERIC;
1210
1219
}
1211
1220
}
1221
+ /* clean up */
1222
+ vtr::free (buffer);
1223
+
1212
1224
if (output_bit_map) {
1213
1225
vtr::free (output_bit_map);
1214
1226
}
@@ -1345,8 +1357,8 @@ char* BLIF::Reader::search_clock_name() {
1345
1357
int input_names_count = 0 ;
1346
1358
int found = 0 ;
1347
1359
while (!found) {
1348
- char buffer[READ_BLIF_BUFFER] ;
1349
- vtr::fgets (buffer, READ_BLIF_BUFFER, file);
1360
+ char * buffer = NULL ;
1361
+ getbline (buffer, READ_BLIF_BUFFER, file);
1350
1362
my_location.line += 1 ;
1351
1363
1352
1364
// not sure if this is needed
@@ -1378,6 +1390,9 @@ char* BLIF::Reader::search_clock_name() {
1378
1390
found = 1 ;
1379
1391
}
1380
1392
}
1393
+
1394
+ /* clean up */
1395
+ vtr::free (buffer);
1381
1396
}
1382
1397
my_location.line = last_line;
1383
1398
fsetpos (file, &pos);
@@ -1635,13 +1650,18 @@ hard_block_models* BLIF::Reader::create_hard_block_models() {
1635
1650
*/
1636
1651
int BLIF::Reader::count_blif_lines () {
1637
1652
int local_num_lines = 0 ;
1638
- char buffer[READ_BLIF_BUFFER] ;
1639
- while (vtr::fgets (buffer, READ_BLIF_BUFFER, file)) {
1653
+ char * buffer = NULL ;
1654
+ while (getbline (buffer, READ_BLIF_BUFFER, file)) {
1640
1655
if (strstr (buffer, " .end" ))
1641
1656
break ;
1642
1657
local_num_lines++;
1643
1658
}
1659
+
1644
1660
rewind (file);
1661
+
1662
+ /* clean up */
1663
+ vtr::free (buffer);
1664
+
1645
1665
return local_num_lines;
1646
1666
}
1647
1667
@@ -1969,11 +1989,11 @@ void BLIF::Reader::hard_block_sensitivities(const char* subckt_name, nnode_t* ne
1969
1989
fgetpos (file, &pos);
1970
1990
1971
1991
char * ptr;
1972
- char buffer[READ_BLIF_BUFFER] ;
1992
+ char * buffer = NULL ;
1973
1993
attr_t * attributes = new_node->attributes ;
1974
1994
1975
1995
if (need_params (yosys_subckt_str[subckt_name])) {
1976
- while (vtr::fgets (buffer, READ_BLIF_BUFFER, file)) {
1996
+ while (getbline (buffer, READ_BLIF_BUFFER, file)) {
1977
1997
my_location.line += 1 ;
1978
1998
ptr = vtr::strtok (buffer, TOKENS, file, buffer);
1979
1999
@@ -2101,6 +2121,9 @@ void BLIF::Reader::hard_block_sensitivities(const char* subckt_name, nnode_t* ne
2101
2121
}
2102
2122
}
2103
2123
2124
+ /* clean up */
2125
+ vtr::free (buffer);
2126
+
2104
2127
// Restore the original position in the file.
2105
2128
my_location.line = last_line;
2106
2129
fsetpos (file, &pos);
0 commit comments