#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 );
LIBGOBLIN_BINFO_EXTERN
LibGoblin_BinaryInfo *
LibGoblin_BinInfo_AllocBinInfo(
- void)
+ LibGoblin_ProgramInfo *p_pginfo )
{
int i_cnt;
int i_id_now;
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;
}
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;
}
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
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;
}
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+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 )
#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 );
LibGoblin_SectionInfo t_section[LIBGOBLIN_SECTION_ID_MAX];
+ void *pv_pginfo;
+
} LibGoblin_BinaryInfo;
/*=====================================================================*/
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 );
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 );
}
}
for( i_cnt = 0; i_cnt < 8; i_cnt++ ) {
- i_bid = LibGoblin_AllocBinInfo();
+ i_bid = LibGoblin_AllocBinInfo( NULL );
CU_ASSERT( i_cnt == i_bid );
}
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 );
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 );
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 );