static void PrepSegData( void *_sdata, void *info ) /*************************************************/ { segdata *sdata = _sdata; info = info; if( sdata->isfree ) { *((unsigned_32 *)sdata) = CARVE_INVALID_INDEX; return; } sdata->next = CarveGetIndex( CarveSegData, sdata->next ); // not used sdata->mod_next = CarveGetIndex( CarveSegData, sdata->mod_next ); sdata->o.clname = sdata->u.leader->class->name; sdata->u.name = sdata->u.leader->segname; }
static void PrepHashTable( symbol **table, unsigned size ) /********************************************************/ { while( size > 0 ) { *table = CarveGetIndex( CarveSymbol, *table ); table++; size--; } }
static void PrepModEntry( void *_mod, void *info ) /************************************************/ { mod_entry *mod = _mod; if( mod->modinfo & MOD_IS_FREE ) { *((unsigned_32 *)mod) = CARVE_INVALID_INDEX; return; } Ring2Walk( mod->publist, FixSymAddr ); mod->n.next_mod = CarveGetIndex( CarveModEntry, mod->n.next_mod ); mod->name = GetString( info, mod->name ); mod->publist = CarveGetIndex( CarveSymbol, mod->publist ); mod->segs = CarveGetIndex( CarveSegData, mod->segs ); mod->modinfo &= ~MOD_CLEAR_ON_INC; if( mod->f.source != NULL ) { mod->f.fname = mod->f.source->file->name; } }
static void WriteExportInfo( void *_exp, void *info ) /***************************************************/ { entry_export *exp = _exp; if( !CheckFree( exp->isfree, info ) ) { exp->next = CarveGetIndex( CarveExportInfo, exp->next ); if( exp->name != NULL ) { exp->name = GetString( info, exp->name ); } BufWritePermFile( info, exp, offsetof(entry_export, sym) ); } }
static void PrepSymbol( void *_sym, void *info ) /**********************************************/ { symbol *sym = _sym; char *save; symbol *mainsym; if( sym->info & SYM_IS_FREE ) { *((unsigned_32 *)sym) = CARVE_INVALID_INDEX; return; } sym->hash = CarveGetIndex( CarveSymbol, sym->hash ); sym->link = CarveGetIndex( CarveSymbol, sym->link ); sym->publink = CarveGetIndex( CarveSymbol, sym->publink ); if( sym->info & SYM_IS_ALTDEF ) { mainsym = sym->e.mainsym; if( !(mainsym->info & SYM_NAME_XLATED) ) { mainsym->name = GetString( info, mainsym->name ); mainsym->info |= SYM_NAME_XLATED; } sym->name = mainsym->name; } else if( !(sym->info & SYM_NAME_XLATED) ) { sym->name = GetString( info, sym->name ); sym->info |= SYM_NAME_XLATED; } sym->mod = CarveGetIndex( CarveModEntry, sym->mod ); if( IS_SYM_ALIAS( sym ) ) { save = sym->p.alias; sym->p.alias = GetString( info, sym->p.alias ); if( sym->info & SYM_FREE_ALIAS ) { _LnkFree( save ); } } else if( IS_SYM_IMPORTED(sym) ) { if( FmtData.type & (MK_OS2 | MK_PE) ) { sym->p.import = CarveGetIndex( CarveDLLInfo, sym->p.import ); } } else if( !(sym->info & SYM_IS_ALTDEF) || IS_SYM_COMDAT(sym) ) { sym->p.seg = CarveGetIndex( CarveSegData, sym->p.seg ); sym->u.altdefs = CarveGetIndex( CarveSymbol, sym->u.altdefs ); } if( sym->info & SYM_EXPORTED ) { if( FmtData.type & (MK_OS2 | MK_PE | MK_WIN_VXD) ) { sym->e.export = CarveGetIndex( CarveExportInfo, sym->e.export ); } } else if( sym->e.def != NULL ) {
POOL_CON *ConstantPoolGetIndex( POOL_CON *e ) { return( CarveGetIndex( carvePOOL_CON, e ) ); }
TYPE_SIG *TypeSigGetIndex( TYPE_SIG *e ) { return( CarveGetIndex( carveTYPE_SIG, e ) ); }
static REWRITE_TOKENS *RewriteTokensGetIndex( REWRITE_TOKENS *e ) /***************************************************************/ { return( CarveGetIndex( carveREWRITE_TOKENS, e ) ); }
REWRITE *RewriteGetIndex( REWRITE *e ) /************************************/ { return( CarveGetIndex( carveREWRITE, e ) ); }
SYM_TOKEN_LOCN *SymTokenLocnGetIndex( SYM_TOKEN_LOCN *e ) /*****************************************************/ { return( CarveGetIndex( carveSYMBOL_LOCN, e ) ); }