OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 2 Oct 2019 12:11:49 +0000 (21:11 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 2 Oct 2019 12:11:49 +0000 (21:11 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_objinfo.c
libgoblin/drd64_libgoblin_objinfo.h

index 450e084..6120c7e 100644 (file)
@@ -367,17 +367,6 @@ LibGoblin_ObjectInfo *
                { p_parent      = OBJINFO( p_pginfo, p_pginfo->objinfo.i_topid ); }
        assert( NULL != p_parent );
        
-       // Alloc ObjectInfo ---
-       p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
-       if( NULL == p_objinfo ) {
-               i_result        = -0x01;
-               goto    goto_ObjectInfo_InsetObject_post;
-       }
-
-       p_objinfo->addr.ptr_addr.value  = ptr_value;
-       p_objinfo->addr.qw_size                 = qw_size;
-       p_objinfo->b_type                               = b_type;
-
        // Search ObjectInfo Inset Location. (Address Order)*****************
        p_objnow        = OBJINFO( p_pginfo, p_pginfo->objinfo.i_topid );
        assert( NULL != p_objnow );
@@ -406,9 +395,18 @@ LibGoblin_ObjectInfo *
                if( ptr_value == p_objnow->addr.ptr_addr.value )        {
                        if( qw_size > p_objnow->addr.qw_size )
                                { break; }
-                       else if( qw_size <= p_objnow->addr.qw_size )    {
+                       else if( qw_size < p_objnow->addr.qw_size )     {
                                if( b_type < p_objnow->b_type )         { break; }
                        }
+                       else    {       // qw_size == p_objnow->addr.qw_size
+                               if( b_type < p_objnow->b_type )         { break; }
+
+                               if( OBJINFO_INSETMODE_CHKNAME & b_mode )        {
+                                       if( b_type == p_objnow->b_type )        {
+                               
+                                       }
+                               }
+                       }
                }
                else if( ptr_value < p_objnow->addr.ptr_addr.value )    { break; }
                
@@ -417,6 +415,17 @@ LibGoblin_ObjectInfo *
                                                ? OBJINFO( p_pginfo, p_objnow->addrlink.i_next_id ) : NULL );
        }while( (NULL != p_objnow) && (p_objnow != p_objprev) );
 
+       // Alloc ObjectInfo ---
+       p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
+       if( NULL == p_objinfo ) {
+               i_result        = -0x01;
+               goto    goto_ObjectInfo_InsetObject_post;
+       }
+
+       p_objinfo->addr.ptr_addr.value  = ptr_value;
+       p_objinfo->addr.qw_size                 = qw_size;
+       p_objinfo->b_type                               = b_type;
+
        // Set Address Order Link Info.--------------------------------------
        p_objinfo->addrlink.i_next_id   = ((NULL != p_objnow) ? p_objnow->i_id : NO_OBJ);
        p_objinfo->addrlink.i_prev_id   = ((NULL != p_objprev) ? p_objprev->i_id : NO_OBJ);
index eba768c..f3ec7ac 100644 (file)
@@ -80,6 +80,7 @@ LIBGOBLIN_OBJINFO_EXTERN
 #define        OBJINFO_INSETMODE_PUT           0x00
 #define        OBJINFO_INSETMODE_INSET         0x01    // bit 0
 #define        OBJINFO_INSETMODE_ADOPT         0x02    // bit 1
+#define        OBJINFO_INSETMODE_CHKNAME       0x04    // bit 2
 LIBGOBLIN_OBJINFO_EXTERN
        LibGoblin_ObjectInfo *ObjectInfo_InsetObject(
                        LibGoblin_ProgramInfo *p_pginfo, PtrValue ptr_value, QWord qw_size,