OSDN Git Service

* WorkBackup: 2016/01/25(Mon) AM 05:41
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 24 Jan 2016 20:43:03 +0000 (05:43 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 24 Jan 2016 20:43:03 +0000 (05:43 +0900)
include/libgoblin.h
libgoblin/drd64_libgoblin_binfo.c
libgoblin/drd64_libgoblin_binfo.h
libgoblin/drd64_libgoblin_loadprog.c
libgoblin/drd64_libgoblin_proginfo.c
libgoblin/drd64_libgoblin_proginfo.h
libgoblin/drd64_libgoblin_type.h
libgoblin/test_libgoblin_binfo.c
libgoblin/test_libgoblin_readbin.c

index fd05a63..7bcdff7 100644 (file)
@@ -74,7 +74,7 @@ LIBGOBLIN_API_PROGINFO
        #define LIBGOBLIN_API_BINFO     extern
 #endif
 LIBGOBLIN_API_BINFO
-       int LibGoblin_AllocBinInfo( void );
+       int LibGoblin_AllocBinInfo( int i_pgid );
 LIBGOBLIN_API_BINFO
        int LibGoblin_FreeBinInfo( int i_binfoid );
 
index 67d5fb4..7bc6236 100644 (file)
@@ -107,7 +107,7 @@ int
 LIBGOBLIN_BINFO_EXTERN
 LibGoblin_BinaryInfo *
        LibGoblin_BinInfo_AllocBinInfo(
-                       void)
+                       LibGoblin_ProgramInfo   *p_pginfo )
 {
        int             i_cnt;
        int             i_id_now;
@@ -162,6 +162,7 @@ LibGoblin_BinaryInfo *
        LibGoblin_BinInfo_ClearBinInfo( p_binfo_now );
        p_binfo_now->i_id               = i_id_now;
        p_binfo_now->b_phase    = LIBGOBLIN_BINFO_PHASE_ALLOCED;
+       p_binfo_now->pv_pginfo  = (void *)p_pginfo;
 
        return p_binfo_now;
 }
@@ -172,11 +173,14 @@ LibGoblin_BinaryInfo *
 LIBGOBLIN_API_BINFO
 int
        LibGoblin_AllocBinInfo(
-                       void )
+                       int     i_pgid )
 {
+       LibGoblin_ProgramInfo   *p_pginfo       = NULL;
        LibGoblin_BinaryInfo    *p_binfo        = NULL;
 
-       p_binfo = LibGoblin_BinInfo_AllocBinInfo();
+       p_pginfo        = LibGoblin_ProgInfo_GetProgInfo( i_pgid );
+
+       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo );
        if( NULL == p_binfo )   {
                return -0x01;
        }
index 45cc2e7..8d1fecb 100644 (file)
@@ -69,7 +69,7 @@ LIBGOBLIN_BINFO_EXTERN
        int LibGoblin_BinInfo_SetProgramName(
                        LibGoblin_BinaryInfo *p_binfo, const char *pstr_program );
 LIBGOBLIN_BINFO_EXTERN
-       LibGoblin_BinaryInfo *LibDrd64_BinInfo_AllocBinInfo( void );
+       LibGoblin_BinaryInfo *LibGoblin_BinInfo_AllocBinInfo( LibGoblin_ProgramInfo *p_pginfo );
 LIBGOBLIN_BINFO_EXTERN
        int LibGoblin_BinInfo_FreeBinInfo( LibGoblin_BinaryInfo *p_binfo );
 LIBGOBLIN_BINFO_EXTERN
index 6ee3973..be9c9fc 100644 (file)
@@ -45,10 +45,35 @@ int
                        LibGoblin_ProgramInfo   *p_pginfo,
                        const char      *pstr_progpath )
 {
+       int             i_result;
+       int             i_now_bid;
+       int             i_max_bid;
+       LibGoblin_BinaryInfo    *p_binfo;
 
        assert( NULL != p_pginfo );
        assert( NULL != pstr_progpath );
 
+       p_binfo = LibGoblin_ProgInfo_AddBinaryInfo( p_pginfo );
+       if( NULL == p_binfo )   {
+               return -0x01;
+       }
+
+       i_result        = LibGoblin_BinInfo_SetProgramName( p_binfo, pstr_progpath );
+       if( 0x00 != i_result )  {
+               return -0x02;
+       }
+
+       i_now_bid       = 0;
+       do      {
+               i_result        = LibGoblin_ReadBinary_File( p_binfo, NULL, LIBGOBLIN_BINFO_FILE_EXEC );
+               if( 0x00 != i_result )  {
+                       return -0x03;
+               }
+
+               i_now_bid++;
+               i_max_bid       = LibGoblin_ProgInfo_GetBinaryInfos( p_pginfo );
+       } while( i_now_bid < i_max_bid );
+
        return 0x00;
 }
 
index aa38b17..73e50c6 100644 (file)
@@ -56,6 +56,47 @@ LibGoblin_ProgramInfo        *
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+LIBGOBLIN_PROGINFO_EXTERN
+int
+       LibGoblin_ProgInfo_GetBinaryInfos(
+                       LibGoblin_ProgramInfo   *p_pginfo )
+{
+       assert( NULL != p_pginfo );
+       
+       return p_pginfo->i_num_binfo;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_PROGINFO_EXTERN
+LibGoblin_BinaryInfo *
+       LibGoblin_ProgInfo_AddBinaryInfo(
+                       LibGoblin_ProgramInfo   *p_pginfo )
+{
+       int             i_binfoid;
+       LibGoblin_BinaryInfo    *p_binfo        = NULL;
+
+       assert( NULL != p_pginfo );
+
+       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo );
+       if( NULL == p_binfo )   {
+               return NULL;
+       }
+
+       i_binfoid       = p_pginfo->i_num_binfo;
+       if( LiBGOBLIN_PROGINFO_MAX_BINFO <= i_binfoid )         {
+               return NULL;
+       }
+       p_pginfo->p_binfo[ i_binfoid ]  = p_binfo;
+       p_pginfo->i_num_binfo++;
+
+       return p_binfo;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
 void
        LibGoblin_ProgInfo_ClearProgInfo(
                        LibGoblin_ProgramInfo   *p_pginfo )
index ffcf242..69e68f9 100644 (file)
@@ -61,9 +61,14 @@ int                                          gi_now_program_info             = 0;
 
 #define        PGINFO(n)       ((LibGoblin_ProgramInfo *)(gp_program_info + (n)))
 
+
 LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_ProgramInfo *LibGoblin_ProgInfo_GetProgInfo( int i_pgid );
 LIBGOBLIN_PROGINFO_EXTERN
+       int LibGoblin_ProgInfo_GetBinaryInfos( LibGoblin_ProgramInfo *p_pginfo );
+LIBGOBLIN_PROGINFO_EXTERN
+       LibGoblin_BinaryInfo *LibGoblin_ProgInfo_AddBinaryInfo( LibGoblin_ProgramInfo *p_pginfo );
+LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_ProgramInfo *LibGoblin_ProgInfo_AllocProgInfo( void );
 LIBGOBLIN_PROGINFO_EXTERN
        int LibGoblin_ProgInfo_FreeProgInfo( LibGoblin_ProgramInfo *p_pginfo );
index 9d04f84..1ca0e92 100644 (file)
@@ -144,6 +144,8 @@ typedef struct      {
 
        LibGoblin_SectionInfo   t_section[LIBGOBLIN_SECTION_ID_MAX];
        
+       void            *pv_pginfo;
+
 }      LibGoblin_BinaryInfo;
 
 /*=====================================================================*/
index f5f0c28..3d895fe 100644 (file)
@@ -49,7 +49,7 @@ void Test_LibGoblin_BinInfo_AllocFree_test00_001( void )
        i_result        = LibGoblin_BinInfo_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_bid   = LibGoblin_AllocBinInfo();
+       i_bid   = LibGoblin_AllocBinInfo( NULL );
        CU_ASSERT( 0x00 == i_bid );
 
        i_result        = LibGoblin_FreeBinInfo( i_bid );
@@ -73,7 +73,7 @@ void Test_LibGoblin_BinInfo_AllocFree_test00_002( void )
        CU_ASSERT( 0x00 == i_result );
 
        for( i_cnt = 0; i_cnt < 33; i_cnt++ )   {
-               i_bid   = LibGoblin_AllocBinInfo();
+               i_bid   = LibGoblin_AllocBinInfo( NULL );
                CU_ASSERT( i_cnt == i_bid );
        }
 
@@ -83,7 +83,7 @@ void Test_LibGoblin_BinInfo_AllocFree_test00_002( void )
        }
 
        for( i_cnt = 0; i_cnt < 8; i_cnt++ )    {
-               i_bid   = LibGoblin_AllocBinInfo();
+               i_bid   = LibGoblin_AllocBinInfo( NULL );
                CU_ASSERT( i_cnt == i_bid );
        }
 
index 0ec4a27..2de9b3c 100644 (file)
@@ -50,7 +50,7 @@ void Test_LibGoblin_ReadBinary_File_test00_001( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo();
+       i_binfoid       = LibGoblin_AllocBinInfo( NULL );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );
@@ -88,7 +88,7 @@ void Test_LibGoblin_ReadBinary_File_test00_002( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo();
+       i_binfoid       = LibGoblin_AllocBinInfo( NULL );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );
@@ -127,7 +127,7 @@ void Test_LibGoblin_ReadBinary_Memory_test00_001( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo();
+       i_binfoid       = LibGoblin_AllocBinInfo( NULL );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );