OSDN Git Service

2019/04/17(Wed) 05:47
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Tue, 16 Apr 2019 20:47:34 +0000 (05:47 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Tue, 16 Apr 2019 20:47:34 +0000 (05:47 +0900)
 (LibGoblin)
  * WorkBackup

include/libgoblin.h
libgoblin/drd64_libgoblin.h
libgoblin/drd64_libgoblin_binfo.c
libgoblin/drd64_libgoblin_binfo.h
libgoblin/drd64_libgoblin_proginfo.c

index a25f3bb..b390c32 100644 (file)
@@ -88,13 +88,12 @@ LIBGOBLIN_API
        #define LIBGOBLIN_API_PROGINFO  extern
 #endif
 
+
 #ifdef DRD64_SRC_LIBGOBLIN_BINFO
        #define LIBGOBLIN_API_BINFO
 #else
        #define LIBGOBLIN_API_BINFO     extern
 #endif
-LIBGOBLIN_API_BINFO
-       const char *LibGoblin_GetRPath_fromBinInfo( int i_bid, char *pstr_rpath );
 
 #ifdef DRD64_SRC_LIBGOBLIN_LOADPROG
        #define LIBGOBLIN_API_LOADPROG
index b9452a8..4d1d3aa 100644 (file)
@@ -102,7 +102,9 @@ Comment:
 #include"drd64_libgoblin_debug_objinfo.h"
 
 // Defines LibGoblin SourceFileID for ErrorSystem ---
-#define        DRD64_SRCID_LIBGOBLIN_API               0x01
+#define        DRD64_SRCID_LIBGOBLIN_API                       0x01
+#define        DRD64_SRCID_LIBGOBLIN_PROGINFO          0x11
+#define        DRD64_SRCID_LIBGOBLIN_BINARYINFO        0x12
 
 #endif /* DRD64_HEADER_LIBGOBLIN_MAIN */
 
index fd7f44a..25a66c1 100644 (file)
@@ -37,72 +37,34 @@ Comment:
 #define        DRD64_SRC_LIBGOBLIN_BINFO
 #include"drd64_libgoblin.h"
 
+#define LOCATION(n) DRD64_ERR_LOCATION( \
+                                               DRD64_ERROR_MODULE_LIBGOBLIN, DRD64_ERROR_ARCH_NODEPEND, \
+                                               DRD64_SRCID_LIBGOBLIN_BINARYINFO, (n))
+
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_GetBinInfo  0x14
 LIBGOBLIN_BINFO_EXTERN
 LibGoblin_BinaryInfo *
        BinaryInfo_GetBinInfo(
                int     i_bid )
 {
-       if(( gi_max_binary_info <= i_bid ) || ( 0 > i_bid ))
-               { return NULL; }
-       
-       return BINFO(i_bid);
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_BINFO_EXTERN
-const char *
-       BinaryInfo_GetRPath(
-               LibGoblin_BinaryInfo    *p_binfo,
-               char    *pstr_rpath )
-{
-       const char                              *pcstr_result;
-       LibGoblin_BinaryFile    *p_binfile;
-
-       assert( NULL != p_binfo );
-       p_binfile       = BinaryFile_GetBinaryFile( p_binfo->i_binfile );
-       assert( NULL != p_binfile );
-
-       if( NULL != pstr_rpath )        {
-               strncpy( pstr_rpath, p_binfile->str_rpath, DRD64_MAX_PATH );
-               pcstr_result    = (const char *)pstr_rpath;
-       }
-       else    {
-               pcstr_result    = (const char *)p_binfile->str_rpath;
-       }
-
-       return pcstr_result;
-}
-
-
-/***********************************************************************
-***********************************************************************/
-LIBGOBLIN_API_BINFO
-const char *
-       LibGoblin_GetRPath_fromBinInfo(
-               int     i_bid,
-               char    *pstr_rpath )
-{
-       const char                              *pcstr_result;
-       LibGoblin_BinaryInfo    *p_binfo;
-
-       p_binfo = BinaryInfo_GetBinInfo( i_bid );
-       if( NULL == p_binfo )   {
+       if(( gi_max_binary_info <= i_bid ) || ( 0 > i_bid ))    {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_WARNING( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_GetBinInfo ),
+                       errno, (QWord)i_bid, (QWord)0x00, __LINE__ );
                return NULL;
        }
-
-       pcstr_result    = BinaryInfo_GetRPath( p_binfo, pstr_rpath );
-
-       return pcstr_result;
+       
+       return BINFO(i_bid);
 }
 
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_ClearBinInfo        0x13
 void
        BinaryInfo_ClearBinInfo(
                        LibGoblin_BinaryInfo    *p_binfo )
@@ -127,6 +89,7 @@ void
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SearchFilename_inProgInfo   0x42
 LIBGOBLIN_BINFO_EXTERN
 int
        BinInfo_SearchFilename_inProgInfo(
@@ -165,6 +128,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SearchFilename      0x41
 LIBGOBLIN_BINFO_EXTERN
 int
        BinInfo_SearchFilename(
@@ -206,6 +170,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SearchNextSlave     0x43
 LIBGOBLIN_BINFO_EXTERN
 int
        BinInfo_SearchNextSlave(
@@ -216,7 +181,13 @@ int
        LibGoblin_BinaryInfo    *p_binfo_now;
        LibGoblin_BinaryInfo    *p_binfo_ret    = NULL;
 
-       if(( 0 > i_bid_self ) || ( 0 > i_bid_now ))     { return -0x01; }
+       if(( 0 > i_bid_self ) || ( 0 > i_bid_now ))     {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SearchNextSlave ),
+                       errno, (QWord)i_bid_self, (QWord)i_bid_now, __LINE__ );
+               return -0x01;
+       }
 
        p_binfo_self    = BINFO( i_bid_self );
        p_binfo_now             = BINFO( i_bid_now );
@@ -235,6 +206,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_AppendChain 0x31
 int
        BinInfo_AppendChain(
                        LibGoblin_BinaryInfo    *p_binfo_now )
@@ -269,6 +241,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_DeleteChain 0x32
 int
        BinInfo_DeleteChain(
                        LibGoblin_BinaryInfo    *p_binfo_del )
@@ -306,6 +279,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SetRPath    0x23
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_SetRPath(
@@ -320,6 +294,10 @@ int
        LibGoblin_BinaryFile    *p_binfile;
 
        if( LIBGOBLIN_BINFO_PHASE_SETPROG > p_binfo->b_phase )  {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRPath ),
+                       errno, (QWord)p_binfo->b_phase, (QWord)p_binfo->i_id, __LINE__ );
                return -0x01;
        }
 
@@ -342,11 +320,19 @@ int
        
        pstr_result     = realpath( str_src, str_dest );
        if( NULL == pstr_result )       {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRPath ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
                return -0x02;
        }
 
        i_len   = strnlen( str_dest, MAXPATHLEN );
        if( DRD64_MAX_PATH <= i_len )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x03 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRPath ),
+                       errno, (QWord)i_len, (QWord)0x00, __LINE__ );
                return -0x03;
        }
        strncpy( p_binfile->str_rpath, str_dest, DRD64_MAX_PATH );
@@ -357,6 +343,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SetRunPath  0x22
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_SetRunPath(
@@ -371,6 +358,10 @@ int
        LibGoblin_BinaryFile    *p_binfile;
 
        if( LIBGOBLIN_BINFO_PHASE_SETPROG > p_binfo->b_phase )  {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRunPath ),
+                       errno, (QWord)p_binfo->b_phase, (QWord)p_binfo->i_id, __LINE__ );
                return -0x01;
        }
 
@@ -393,11 +384,19 @@ int
        
        pstr_result     = realpath( str_src, str_dest );
        if( NULL == pstr_result )       {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRunPath ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
                return -0x02;
        }
 
        i_len   = strnlen( str_dest, MAXPATHLEN );
        if( DRD64_MAX_PATH <= i_len )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x03 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetRunPath ),
+                       errno, (QWord)i_len, (QWord)0x00, __LINE__ );
                return -0x03;
        }
        strncpy( p_binfile->str_runpath, str_dest, DRD64_MAX_PATH );
@@ -411,6 +410,7 @@ int
                  Absolute Path ONLY in remote-machine program.
   * pstr_progpath != pstr_realpath is remote-machine program.
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_SetProgramPath      0x21
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_SetProgramPath(
@@ -430,13 +430,21 @@ int
 
        // Check BinaryInfo & BinaryFile struct status ---
        if( LIBGOBLIN_BINFO_PHASE_SETPROG <= p_binfo->b_phase ) {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetProgramPath ),
+                       errno, (QWord)p_binfo->b_phase, (QWord)p_binfo->i_id, __LINE__ );
                return -0x01;
        }
 
        // localpath convert to RelativePath to AbsolutePath ---
        pstr_result     = realpath( pstr_localpath, str_local );
        if( NULL == pstr_result )       {
-               return -0x04;
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetProgramPath ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
+               return -0x02;
        }
        i_len   = strnlen( str_local, DRD64_MAX_PATH );
        if( '/' == str_local[ i_len ] ) { str_local[ i_len ] = '\0'; }
@@ -447,7 +455,11 @@ int
                if( '\0' != *pstr_remotepath )  {
                        pstr_result     = realpath( pstr_remotepath, str_remote );
                        if( NULL == pstr_result )       {
-                               return -0x05;
+                               LibBrownie_Error_SetErrorInfo(
+                                       DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x03 ),
+                                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetProgramPath ),
+                                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
+                               return -0x03;
                        }
                        i_len   = strnlen( str_remote, DRD64_MAX_PATH );
                        if( '/' == str_remote[ i_len ] )        { str_remote[ i_len ] = '\0'; }
@@ -459,7 +471,11 @@ int
        // Alloc BinaryFile struct & Set File Path ---
        p_bfile = BinaryFile_DispenseBinaryFile( p_binfo, str_local, pstr_remote);
        if( NULL == p_bfile )   {
-               return -0x06;
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_SetProgramPath ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
+               return -0x04;
        }
 
        p_binfo->i_binfile      = p_bfile->i_id;
@@ -471,6 +487,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_AllocBinInfo        0x11
 LIBGOBLIN_BINFO_EXTERN
 LibGoblin_BinaryInfo *
        BinaryInfo_AllocBinInfo(
@@ -503,6 +520,10 @@ LibGoblin_BinaryInfo *
                                                                        sizeof( LibGoblin_BinaryInfo ) *
                                                                        (gi_alloc_binary_info + LIBGOBLIN_BINFO_UNITS) );
                if( NULL == p_binfo_base )      {
+                       LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibGoblin_BinaryInfo_AllocBinInfo ),
+                               errno, (QWord)gi_alloc_binary_info, (QWord)gi_now_binary_info, __LINE__ );
                        return NULL;
                }
 
@@ -545,6 +566,7 @@ LibGoblin_BinaryInfo *
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_FreeBinInfo 0x12
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_FreeBinInfo(
@@ -553,7 +575,13 @@ int
        int             i_binfoid;      
        LibGoblin_BinaryFile    *p_binfile;
 
-       if( NULL == p_binfo )   { return 0x01; }
+       if( NULL == p_binfo )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_FreeBinInfo ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
+               return 0x01;
+       }
 
        if( -0x01 != p_binfo->i_binfile )       {
                p_binfile       = BinaryFile_GetBinaryFile( p_binfo->i_binfile );
@@ -583,6 +611,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_Init        0x01
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_Init(
@@ -592,12 +621,20 @@ int
        LibGoblin_BinaryInfo    *p_binfo;
 
        if( 0 != gi_max_binary_info )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_Init ),
+                       errno, (QWord)gi_max_binary_info, (QWord)0x00, __LINE__ );
                return -0x01;
        }
 
        gp_binary_info  = malloc( sizeof( LibGoblin_BinaryInfo )
                                                                                * LIBGOBLIN_BINFO_UNITS );
        if( NULL == gp_binary_info )    {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_BinaryInfo_Init ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
                return -0x02;
        }
 
@@ -616,6 +653,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_BinaryInfo_Term        0x02
 LIBGOBLIN_BINFO_EXTERN
 int
        BinaryInfo_Term(
index 7b48a26..1ef34a4 100644 (file)
@@ -73,8 +73,6 @@ LIBGOBLIN_BINFO_EXTERN
 LIBGOBLIN_BINFO_EXTERN
        int BinInfo_SearchNextSlave( int i_bid_self, int i_bid_now );
 LIBGOBLIN_BINFO_EXTERN
-       const char *BinaryInfo_GetRPath( LibGoblin_BinaryInfo *p_binfo, char *pstr_rpath );
-LIBGOBLIN_BINFO_EXTERN
        int BinaryInfo_SetRPath(
                        LibGoblin_BinaryInfo *p_binfo, const char *pstr_rpath );
 LIBGOBLIN_BINFO_EXTERN
index 3afd6b2..1fd186e 100644 (file)
@@ -37,18 +37,34 @@ Comment:
 #define        DRD64_SRC_LIBGOBLIN_PROGINFO
 #include"drd64_libgoblin.h"
 
+#define LOCATION(n) DRD64_ERR_LOCATION( \
+                                               DRD64_ERROR_MODULE_LIBGOBLIN, DRD64_ERROR_ARCH_NODEPEND, \
+                                               DRD64_SRCID_LIBGOBLIN_PROGINFO, (n))
+
+
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_GetProgInfo   0x14
 LIBGOBLIN_PROGINFO_EXTERN
 LibGoblin_ProgramInfo  *
        ProgInfo_GetProgInfo(
                        int             i_pgid )
 {
-       if(( gi_max_program_info <= i_pgid ) || ( 0 > i_pgid ))
-               { return NULL; }
+       if(( gi_max_program_info <= i_pgid ) || ( 0 > i_pgid )) {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_GetProgInfo ),
+                       errno, (QWord)i_pgid, (QWord)0x00, __LINE__ );
+               return NULL;
+       }
        
-       if( -0x01 == PGINFO( i_pgid )->i_id )
-               { return NULL; }
+       if( -0x01 == PGINFO( i_pgid )->i_id )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_GetProgInfo ),
+                       errno, (QWord)i_pgid, (QWord)0x00, __LINE__ );
+               return NULL;
+       }
 
        return PGINFO( i_pgid );
 }
@@ -56,6 +72,7 @@ LibGoblin_ProgramInfo *
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_AddBinaryInfo 0x21
 LIBGOBLIN_PROGINFO_EXTERN
 LibGoblin_BinaryInfo *
        ProgInfo_AddBinaryInfo(
@@ -73,6 +90,10 @@ LibGoblin_BinaryInfo *
                // Alloc BinaryInfo ---
                p_binfo = BinaryInfo_AllocBinInfo( p_pginfo, pstr_binfilename, i_req_bid );
                if( NULL == p_binfo )   {
+                       LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibGoblin_ProgInfo_AddBinaryInfo ),
+                               errno, (QWord)i_bid, (QWord)i_req_bid, __LINE__ );
                        return NULL;
                }
 
@@ -80,6 +101,12 @@ LibGoblin_BinaryInfo *
        }
        else    {
                p_binfo = BinaryInfo_GetBinInfo( i_bid );
+               if( NULL == p_binfo )   {
+                       LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibGoblin_ProgInfo_AddBinaryInfo ),
+                               errno, (QWord)i_bid, (QWord)0x00, __LINE__ );
+               }
        }
 
        return p_binfo;
@@ -88,6 +115,7 @@ LibGoblin_BinaryInfo *
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_ClearProgInfo 0x13
 void
        ProgInfo_ClearProgInfo(
                        LibGoblin_ProgramInfo   *p_pginfo )
@@ -104,6 +132,7 @@ void
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_AllocProgInfo 0x11
 LIBGOBLIN_PROGINFO_EXTERN
 LibGoblin_ProgramInfo  *
        ProgInfo_AllocProgInfo(
@@ -123,6 +152,10 @@ LibGoblin_ProgramInfo      *
                        }
                }
 
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_BUG, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_AllocProgInfo ),
+                       errno, (QWord)gi_now_program_info, (QWord)gi_max_program_info, __LINE__ );
                goto    goto_ProgInfo_AllocProgInfo_post;
        }
 
@@ -131,6 +164,10 @@ LibGoblin_ProgramInfo      *
                                                                sizeof( LibGoblin_ProgramInfo ) * 
                                                                ( gi_alloc_program_info + LIBGOBLIN_PROGINFO_UNITS ) );
                if( NULL == p_pgbase )  {
+                       LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibGoblin_ProgInfo_AllocProgInfo ),
+                               errno, (QWord)gi_alloc_program_info, (QWord)0x00, __LINE__ );
                        goto    goto_ProgInfo_AllocProgInfo_post;
                }
 
@@ -153,6 +190,7 @@ goto_ProgInfo_AllocProgInfo_post:
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_FreeProgInfo  0x12
 LIBGOBLIN_PROGINFO_EXTERN
 int
        ProgInfo_FreeProgInfo(
@@ -162,7 +200,13 @@ int
        
        assert( NULL != p_pginfo );
 
-       if( -0x01 == p_pginfo->i_id )   { return 0x00; }
+       if( -0x01 == p_pginfo->i_id )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_WARNING( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_FreeProgInfo ),
+                       errno, (QWord)p_pginfo, (QWord)0x00, __LINE__ );
+               return 0x00;
+       }
 
        i_id    = p_pginfo->i_id;
        ProgInfo_ClearProgInfo( p_pginfo );
@@ -179,6 +223,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_Init  0x01
 LIBGOBLIN_PROGINFO_EXTERN
 int
        ProgInfo_Init(
@@ -188,12 +233,20 @@ int
        LibGoblin_ProgramInfo   *p_pginfo;
 
        if( 0 != gi_max_program_info )  {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_FAILCALL, 0x01, 0x01 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_Init ),
+                       errno, (QWord)gi_max_program_info, (QWord)0x00, __LINE__ );
                return -0x01;
        }
 
        gp_program_info = (LibGoblin_ProgramInfo *)malloc(
                                                sizeof( LibGoblin_ProgramInfo ) * LIBGOBLIN_PROGINFO_UNITS );
        if( NULL == gp_program_info )   {
+               LibBrownie_Error_SetErrorInfo(
+                       DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x02 ),
+                       LOCATION( FUNCID_LibGoblin_ProgInfo_Init ),
+                       errno, (QWord)0x00, (QWord)0x00, __LINE__ );
                return -0x02;
        }
 
@@ -212,6 +265,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibGoblin_ProgInfo_Term  0x02
 LIBGOBLIN_PROGINFO_EXTERN
 int
        ProgInfo_Term(