OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 3 Jun 2019 20:47:18 +0000 (05:47 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 3 Jun 2019 20:47:18 +0000 (05:47 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_srcfile.c
libgoblin/drd64_libgoblin_srcfile.h
libgoblin/drd64_libgoblin_type.h

index b6742a8..d04661c 100644 (file)
@@ -140,29 +140,23 @@ goto_SrcFile_AllocSrcFile_post:
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 #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 );
 
@@ -173,6 +167,11 @@ LibGoblin_SrcFile  *
                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;
        }
 
@@ -190,21 +189,31 @@ LIBGOBLIN_SRCFILE_EXTERN
 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;
 }
index 5dbfd81..78a5fcc 100644 (file)
@@ -62,7 +62,7 @@ LIBGOBLIN_SRCFILE_EXTERN
 LIBGOBLIN_SRCFILE_EXTERN
        LibGoblin_SrcFile *SrcFile_AllocSrcFile( LibGoblin_BinaryFile *p_bfile );
 LIBGOBLIN_SRCFILE_EXTERN
-       LibGoblin_SrcFile *SrcFile_SearchSrcFile( LibGoblin_BinaryFile *p_bfile, char *pstr_filename );
+       LibGoblin_SrcFile *SrcFile_SearchSrcFile( LibGoblin_BinaryFile *p_bfile, char *pstr_filename, char *pstr_pathname );
 LIBGOBLIN_SRCFILE_EXTERN
        LibGoblin_SrcFile *SrcFile_DispenseSrcFile( LibGoblin_BinaryFile *p_bfile, char *pstr_filename );
 LIBGOBLIN_SRCFILE_EXTERN
index 2c0a4ba..8eef26b 100644 (file)
@@ -237,7 +237,8 @@ typedef struct      {
        DWord   dw_hash_localpath;
        char    str_filename[DRD64_MAX_PATH];
        char    str_localpath[DRD64_MAX_PATH];
-       char    str_remotepath[DRD64_MAX_PATH];
+       char    str_srcpath[DRD64_MAX_PATH];    // for DW_AT_name
+       char    str_buildpath[DRD64_MAX_PATH];  // for DW_AT_comp_dir (Optional)
 
        int             i_bfile_id;
        struct  {