@@ -24,22 +24,31 @@ struct comp {
2424
2525struct canonFnameCacheTable {
2626 hashTable * table ;
27+ const char * cwd ;
28+ size_t cwd_len ;
2729 char * input_last ;
2830 char * return_last ;
2931};
3032
31- extern struct canonFnameCacheTable * canonFnameCacheTableNew (void )
33+ extern struct canonFnameCacheTable * canonFnameCacheTableNew (const char * cwd )
3234{
3335 struct canonFnameCacheTable * r = xMalloc (1 , struct canonFnameCacheTable );
3436 r -> table = hashTableNew (7 , hashCstrhash , hashCstreq ,
3537 eFree , eFree );
3638 r -> input_last = NULL ;
3739 r -> return_last = NULL ;
40+
41+ char * cwd_tmp = eStrdup (cwd );
42+ r -> cwd = canonicalizeAbsoluteFileName (cwd_tmp );
43+ eFree (cwd_tmp );
44+ r -> cwd_len = strlen (r -> cwd );
45+
3846 return r ;
3947}
4048
4149extern void canonFnameCacheTableDelete (struct canonFnameCacheTable * cache_table )
4250{
51+ eFree ((void * )cache_table -> cwd );
4352 hashTableDelete (cache_table -> table );
4453 eFree (cache_table );
4554}
@@ -220,8 +229,8 @@ static char *canonicalizePathNew(const char *dir, size_t dir_len, const char *re
220229 return r ;
221230}
222231
223- extern const char * canonicalizeRelativeFileName (const char * cwd , size_t cwd_len , const char * input ,
224- struct canonFnameCacheTable * cache_table )
232+ extern const char * canonicalizeRelativeFileName (struct canonFnameCacheTable * cache_table ,
233+ const char * input )
225234{
226235 if (cache_table -> input_last )
227236 {
@@ -234,7 +243,7 @@ extern const char *canonicalizeRelativeFileName (const char *cwd, size_t cwd_len
234243 if (r )
235244 return r ;
236245
237- r = canonicalizePathNew (cwd , cwd_len , input );
246+ r = canonicalizePathNew (cache_table -> cwd , cache_table -> cwd_len , input );
238247
239248 cache_table -> input_last = eStrdup (input );
240249 cache_table -> return_last = r ;
0 commit comments