/* UseMetaRevision * opens indicated revision of metadata * all non-zero revisions are read-only */ LIB_EXPORT rc_t CC SRATableUseMetaRevision ( const SRATable *cself, uint32_t revision ) { rc_t rc; if ( cself == NULL ) rc = RC ( rcSRA, rcTable, rcUpdating, rcSelf, rcNull ); else if ( cself -> read_only == false ) rc = RC ( rcSRA, rcTable, rcUpdating, rcMetadata, rcBusy ); else { uint32_t cur; rc = KMetadataRevision ( cself -> meta, & cur ); if ( rc == 0 && cur != revision ) { SRATable *self = ( SRATable* ) cself; const KMetadata *meta; rc = KMetadataOpenRevision ( self -> meta, & meta, revision ); if ( rc == 0 ) { KMetadataRelease ( self -> meta ); self -> meta = meta; } } } return rc; }
/* MetaRevision * returns current revision number * where 0(zero) means tip */ LIB_EXPORT rc_t CC SRATableMetaRevision( const SRATable *self, uint32_t *rslt ) { if (self == NULL) return RC(rcSRA, rcTable, rcAccessing, rcSelf, rcNull); return KMetadataRevision (self->meta,rslt); }
/* Revision * returns current revision number * where 0 ( zero ) means tip */ inline rc_t Revision ( uint32_t *revision ) const throw() { return KMetadataRevision ( this, revision ); }