summaryrefslogtreecommitdiffstats
path: root/src/map
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2020-01-11 07:12:48 +0200
committerAlan Mishchenko <alanmi@berkeley.edu>2020-01-11 07:12:48 +0200
commitdccd3992550ba8f43611a864ca301ad96d8d0aaf (patch)
tree2d210aa6900de0b8f7621d8bdbb70686ea7c40f8 /src/map
parent1bb50384d1b89e701afdfff00d91ea3903d5fa92 (diff)
downloadabc-dccd3992550ba8f43611a864ca301ad96d8d0aaf.tar.gz
abc-dccd3992550ba8f43611a864ca301ad96d8d0aaf.tar.bz2
abc-dccd3992550ba8f43611a864ca301ad96d8d0aaf.zip
Adding dynamic memory alloc for the buffer in Liberty file reader.
Diffstat (limited to 'src/map')
-rw-r--r--src/map/scl/sclLiberty.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/map/scl/sclLiberty.c b/src/map/scl/sclLiberty.c
index 91804bc5..4b6adab4 100644
--- a/src/map/scl/sclLiberty.c
+++ b/src/map/scl/sclLiberty.c
@@ -29,7 +29,7 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
-#define ABC_MAX_LIB_STR_LEN 5000
+// #define ABC_MAX_LIB_STR_LEN 5000
// entry types
typedef enum {
@@ -70,6 +70,7 @@ struct Scl_Tree_t_
Scl_Item_t * pItems; // the items
char * pError; // the error string
abctime clkStart; // beginning time
+ Vec_Str_t * vBuffer; // temp string buffer
};
static inline Scl_Item_t * Scl_LibertyRoot( Scl_Tree_t * p ) { return p->pItems; }
@@ -340,8 +341,11 @@ static inline Scl_Item_t * Scl_LibertyNewItem( Scl_Tree_t * p, int Type )
***********************************************************************/
char * Scl_LibertyReadString( Scl_Tree_t * p, Scl_Pair_t Pair )
{
- static char Buffer[ABC_MAX_LIB_STR_LEN];
- assert( Pair.End-Pair.Beg < ABC_MAX_LIB_STR_LEN );
+ // static char Buffer[ABC_MAX_LIB_STR_LEN];
+ char * Buffer;
+ if ( Pair.End - Pair.Beg + 2 > Vec_StrSize(p->vBuffer) )
+ Vec_StrFill( p->vBuffer, Pair.End - Pair.Beg + 100, '\0' );
+ Buffer = Vec_StrArray( p->vBuffer );
strncpy( Buffer, p->pContents+Pair.Beg, Pair.End-Pair.Beg );
if ( Pair.Beg < Pair.End && Buffer[0] == '\"' )
{
@@ -572,6 +576,7 @@ Scl_Tree_t * Scl_LibertyStart( char * pFileName )
p->pItems = ABC_CALLOC( Scl_Item_t, p->nItermAlloc );
p->nItems = 0;
p->nLines = 1;
+ p->vBuffer = Vec_StrStart( 10 );
return p;
}
void Scl_LibertyStop( Scl_Tree_t * p, int fVerbose )
@@ -581,6 +586,7 @@ void Scl_LibertyStop( Scl_Tree_t * p, int fVerbose )
printf( "Memory = %7.2f MB. ", 1.0 * (p->nContents + p->nItermAlloc * sizeof(Scl_Item_t))/(1<<20) );
ABC_PRT( "Time", Abc_Clock() - p->clkStart );
}
+ Vec_StrFree( p->vBuffer );
ABC_FREE( p->pFileName );
ABC_FREE( p->pContents );
ABC_FREE( p->pItems );