BLARGG_EXPORT fex_err_t fex_identify_file( fex_type_t* type_out, const char path [] ) { *type_out = NULL; fex_type_t type = fex_identify_extension( path ); // Unsupported extension? if ( !type ) return blargg_ok; // reject // Unknown/no extension? if ( !*(type->extension) ) { // Examine header FEX_FILE_READER in; RETURN_ERR( in.open( path ) ); if ( in.remain() >= fex_identify_header_size ) { char h [fex_identify_header_size]; RETURN_ERR( in.read( h, sizeof h ) ); type = fex_identify_extension( fex_identify_header( h ) ); } } *type_out = type; return blargg_ok; }
blargg_err_t File_Extractor::open_arc_file( bool unbuffered ) { if ( reader_ ) return blargg_ok; FEX_FILE_READER* in = BLARGG_NEW FEX_FILE_READER; CHECK_ALLOC( in ); blargg_err_t err = in->open( arc_path() ); if ( err ) { delete in; } else { reader_ = in; own_file(); if ( unbuffered ) make_unbuffered( in ); } return err; }