static rc_t report_ref_database( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, bool extended ) { const VDatabase *db; rc_t rc = VDBManagerOpenDBRead ( vdb_mgr, &db, NULL, "%s", path ); if ( rc != 0 ) { (void)LOGERR( klogErr, rc, "VDBManagerOpenDBRead() failed" ); } else { const ReferenceList * reflist; uint32_t options = ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds ); rc = ReferenceList_MakeDatabase( &reflist, db, options, 0, NULL, 0 ); if ( rc != 0 ) { (void)LOGERR( klogErr, rc, "ReferenceList_MakeDatabase() failed" ); } else { uint32_t count; rc = ReferenceList_Count( reflist, &count ); if ( rc != 0 ) { (void)LOGERR( klogErr, rc, "ReferenceList_Count() failed" ); } else { rc = KOutMsg( "this object uses %u references\n", count ); if ( rc == 0 ) { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const ReferenceObj* ref_obj; rc = ReferenceList_Get( reflist, &ref_obj, idx ); if ( rc != 0 ) { (void)LOGERR( klogErr, rc, "ReferenceList_Get() failed" ); } else { rc = report_ref_obj( vdb_mgr, vfs_mgr, path, idx, ref_obj, extended ); ReferenceObj_Release( ref_obj ); } } } } ReferenceList_Release( reflist ); } VDatabaseRelease( db ); } return rc; }
static rc_t build_seq_id_tree( BSTree * tree, input_files * ifs ) { rc_t rc = 0; uint32_t i; for ( i = 0; i < ifs->database_count && rc == 0; ++i ) { input_database * id = VectorGet( &ifs->dbs, i ); if ( id != NULL ) { uint32_t rcount; rc = ReferenceList_Count( id->reflist, &rcount ); if ( rc == 0 && rcount > 0 ) { uint32_t r_idx; for ( r_idx = 0; r_idx < rcount && rc == 0; ++r_idx ) { const ReferenceObj * ref_obj; rc = ReferenceList_Get( id->reflist, &ref_obj, r_idx ); if ( rc == 0 && ref_obj != NULL ) { const char * seqid; rc = ReferenceObj_SeqId( ref_obj, &seqid ); if ( rc == 0 ) { const char * name; rc = ReferenceObj_Name( ref_obj, &name ); if ( rc == 0 ) { INSDC_coord_len seq_len; rc = ReferenceObj_SeqLength( ref_obj, &seq_len ); if ( rc == 0 ) { seq_id_node * node = find_seq_id_node( tree, seqid ); if ( node != NULL ) { if ( node->seq_len != seq_len ) rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid ); } else rc = add_seq_id_node( tree, seqid, name, seq_len ); } } } } } } } } return rc; }
static rc_t prepare_whole_file( prepare_ctx * ctx ) { rc_t rc = 0; if ( ctx->reflist != NULL ) { uint32_t count; rc = ReferenceList_Count( ctx->reflist, &count ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ReferenceList_Count() failed" ); } else { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { rc = ReferenceList_Get( ctx->reflist, &ctx->refobj, idx ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ReferenceList_Get() failed" ); } else { rc = ctx->on_section( ctx, 0, 0 ); if ( rc == 0 ) ReferenceObj_Release( ctx->refobj ); } } } } else { ctx->refobj = NULL; rc = ctx->on_section( ctx, 0, 0 ); } return rc; }
static rc_t ref_walker_prepare_1_src( struct ref_walker * self, const char * name ) { VPath * path = NULL; const VPath * local_cache = NULL; const KFile * remote_file = NULL; rc_t rc = VFSManagerResolveSpec ( self->vfs_mgr, name, &path, &remote_file, &local_cache, true ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "cannot resolve '$(n)' via VFSManager", "n=%s", name ) ); } else { char buffer[ 4096 ]; size_t num_read; rc = VPathReadPath ( path, buffer, sizeof buffer, &num_read ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "cannot read path from vpath for '$(n)'", "n=%s", name ) ); } else { if ( rc == 0 ) { int path_type = ( VDBManagerPathType ( self->vmgr, "%s", buffer ) & ~ kptAlias ); if ( path_type == kptDatabase ) { const ReferenceList * reflist; uint32_t options = ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds ); rc = ReferenceList_MakePath( &reflist, self->vmgr, name, options, 0, NULL, 0 ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "cannot create ReferenceList for '$(n)'", "n=%s", name ) ); } else { uint32_t count; rc = ReferenceList_Count( reflist, &count ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ReferenceList_Count() for '$(n)' failed", "n=%s", name ) ); } else { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const ReferenceObj * refobj; rc = ReferenceList_Get( reflist, &refobj, idx ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ReferenceList_Get() failed" ); } else { const char * seqid; rc = ReferenceObj_SeqId( refobj, &seqid ); if ( rc == 0 ) { INSDC_coord_len seqlen; rc = ReferenceObj_SeqLength( refobj, &seqlen ); if ( rc == 0 ) { rc = add_region( &self->regions, seqid, 0, seqlen - 1 ); } } ReferenceObj_Release( refobj ); } } } ReferenceList_Release( reflist ); } } } } KFileRelease( remote_file ); VPathRelease ( local_cache ); VPathRelease ( path ); } return rc; }