示例#1
0
orl_file_handle ORLENTRY ORLFileInit( orl_handle orl_hnd, void * file, orl_file_format type )
{
    orl_file_handle             orl_file_hnd;

    switch( type ) {
    case( ORL_ELF ):
        orl_file_hnd = (orl_file_handle) orl_hnd->funcs->alloc( sizeof( orl_file_handle_struct ) );
        if( !orl_file_hnd ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            return( NULL );
        }
        orl_file_hnd->type = ORL_ELF;
        orl_file_hnd->file_hnd.elf = ElfFileInit( orl_hnd->elf_hnd, file );
        if( orl_file_hnd->file_hnd.elf == NULL ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            orl_hnd->funcs->free( orl_file_hnd );
            return( NULL );
        }
        ORLAddFileLinks( orl_hnd, orl_file_hnd );
        return( orl_file_hnd );
    case( ORL_COFF ):
        orl_file_hnd = (orl_file_handle) orl_hnd->funcs->alloc( sizeof( orl_file_handle_struct ) );
        if( !orl_file_hnd ) return( NULL );
        orl_file_hnd->type = ORL_COFF;
        orl_file_hnd->file_hnd.coff = CoffFileInit( orl_hnd->coff_hnd, file );
        if( orl_file_hnd->file_hnd.coff == NULL ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            orl_hnd->funcs->free( orl_file_hnd );
            return( NULL );
        }
        ORLAddFileLinks( orl_hnd, orl_file_hnd );
        return( orl_file_hnd );
    case( ORL_OMF ):
        orl_file_hnd = (orl_file_handle) orl_hnd->funcs->alloc( sizeof( orl_file_handle_struct ) );
        if( !orl_file_hnd ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            return( NULL );
        }
        orl_file_hnd->type = ORL_OMF;
        orl_file_hnd->file_hnd.omf = OmfFileInit( orl_hnd->omf_hnd, file );
        if( orl_file_hnd->file_hnd.omf == NULL ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            orl_hnd->funcs->free( orl_file_hnd );
            return( NULL );
        }
        ORLAddFileLinks( orl_hnd, orl_file_hnd );
        return( orl_file_hnd );
    default: break;//ORL_UNRECOGNIZED_FORMAT
    }
    return( NULL );
}
示例#2
0
orl_file_handle ORLENTRY ORLFileInit( orl_handle orl_hnd, void *file, orl_file_format type )
{
    orl_file_handle     orl_file_hnd;

    switch( type ) {
    case( ORL_ELF ):
    case( ORL_COFF ):
    case( ORL_OMF ):
        orl_file_hnd = (orl_file_handle)orl_hnd->funcs->alloc( sizeof( orl_file_handle_struct ) );
        if( orl_file_hnd == NULL ) {
            orl_hnd->error = ORL_OUT_OF_MEMORY;
            break;
        }
        orl_file_hnd->type = type;
        switch( type ) {
        case ORL_ELF:
            orl_hnd->error = ElfFileInit( orl_hnd->elf_hnd, file, &orl_file_hnd->file_hnd.elf );
            break;
        case ORL_COFF:
            orl_hnd->error = CoffFileInit( orl_hnd->coff_hnd, file, &orl_file_hnd->file_hnd.coff );
            break;
        case ORL_OMF:
            orl_hnd->error = OmfFileInit( orl_hnd->omf_hnd, file, &orl_file_hnd->file_hnd.omf );
            break;
        default:
            break;
        }
        if( orl_hnd->error != ORL_OKAY ) {
            orl_hnd->funcs->free( orl_file_hnd );
            break;
        }
        ORLAddFileLinks( orl_hnd, orl_file_hnd );
        return( orl_file_hnd );
    default:    //ORL_UNRECOGNIZED_FORMAT
        break;
    }
    return( NULL );
}