/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
#define FUNCID_LibGoblin_SrcFile_SearchSrcFile 0x31
-LIBGOBLIN_SRCFILE_EXTERN
LibGoblin_SrcFile *
SrcFile_SearchSrcFile(
LibGoblin_BinaryFile *p_bfile,
- char *pstr_filepath )
+ char *pstr_filename,
+ char *pstr_pathname )
{
int i_cnt;
int i_result;
DWord dw_hash;
- char str_temp[DRD64_MAX_PATH + 1];
- char *pstr_filename;
- char *pstr_pathname;
LibGoblin_SrcFile *p_srcfile;
assert( NULL != p_bfile );
- assert( NULL != pstr_filepath );
+ assert( NULL != pstr_filename );
+ assert( NULL != pstr_pathname );
- strncpy( str_temp, pstr_filepath, DRD64_MAX_PATH );
- pstr_filename = basename( str_temp );
dw_hash = Common_CalcDJBhash( pstr_filename );
- pstr_pathname = dirname( str_temp );
-
for( i_cnt = 0; i_cnt < p_bfile->srcfile.i_max; i_cnt++ ) {
p_srcfile = SRCFILE( p_bfile, i_cnt );
i_result = strncmp( pstr_filename, p_srcfile->str_filename, DRD64_MAX_PATH );
if( 0x00 != i_result ) { continue; }
+ if( '\0' != *(pstr_pathname + 0) ) {
+ i_result = strncmp( pstr_pathname, p_srcfile->str_srcpath, DRD64_MAX_PATH );
+ if( 0x00 != i_result ) { continue; }
+ }
+
goto goto_SrcFile_SearchSrcFile_post;
}
LibGoblin_SrcFile *
SrcFile_DispenseSrcFile(
LibGoblin_BinaryFile *p_bfile,
- char *pstr_filename )
+ char *pstr_filepath )
{
+ char str_filename[DRD64_MAX_PATH + 1];
+ char str_pathname[DRD64_MAX_PATH + 1];
LibGoblin_SrcFile *p_srcfile;
assert( NULL != p_bfile );
- p_srcfile = SrcFile_SearchSrcFile( p_bfile, pstr_filename );
+ strncpy( str_filename, pstr_filepath, DRD64_MAX_PATH );
+ basename( str_filename );
+
+ strncpy( str_pathname, pstr_filepath, DRD64_MAX_PATH );
+ dirname( str_pathname );
+ if(( '.' == str_pathname[0] ) && ( '\0' == str_pathname[1] ))
+ { str_pathname[0] = '\0'; }
+
+ p_srcfile = SrcFile_SearchSrcFile( p_bfile, str_filename, str_pathname );
if( NULL == p_srcfile ) {
p_srcfile = SrcFile_AllocSrcFile( p_bfile );
}
assert( NULL != p_srcfile );
- strncpy( p_srcfile->str_filename, pstr_filename, DRD64_MAX_PATH );
- p_srcfile->dw_hash_filename = Common_CalcDJBhash( pstr_filename );
+ strncpy( p_srcfile->str_filename, str_filename, DRD64_MAX_PATH );
+ p_srcfile->dw_hash_filename = Common_CalcDJBhash( str_filename );
return p_srcfile;
}