Cardinal Idb__INX_ReturnItem (IDBFile file_id, char *index, IDBDataHandle *data_entry) { /* * Local variables */ Cardinal result ; /* function results */ IDBRecordBufferPtr bufptr ; /* buffer containing entry */ MrmCount entndx ; /* entry index */ IDBIndexLeafRecordPtr leafrec ; /* index leaf record */ IDBIndexNodeRecordPtr noderec ; /* index node record */ /* * Attempt to find the index */ result = Idb__INX_FindIndex (file_id, index, &bufptr, &entndx) ; switch ( result ) { case MrmINDEX_GT: case MrmINDEX_LT: return MrmNOT_FOUND ; case MrmSUCCESS: break ; default: return result ; } /* * Point into the buffer, and retrieve the data pointer */ switch ( _IdbBufferRecordType (bufptr) ) { case IDBrtIndexLeaf: leafrec = (IDBIndexLeafRecordPtr) bufptr->IDB_record ; data_entry->rec_no = leafrec->index[entndx].data.internal_id.rec_no ; data_entry->item_offs = leafrec->index[entndx].data.internal_id.item_offs ; return MrmSUCCESS ; case IDBrtIndexNode: noderec = (IDBIndexNodeRecordPtr) bufptr->IDB_record ; data_entry->rec_no = noderec->index[entndx].data.internal_id.rec_no ; data_entry->item_offs = noderec->index[entndx].data.internal_id.item_offs ; return MrmSUCCESS ; default: return Urm__UT_Error ("Idb__INX_ReturnItem", _MrmMMsg_0010, file_id, NULL, MrmBAD_RECORD) ; } }
Cardinal UrmIdbPutIndexedResource (IDBFile file_id, String index, URMResourceContextPtr context_id) { /* * Local variables */ Cardinal result ; /* function results */ IDBRecordBufferPtr bufptr ; /* not used */ MrmCount recno ; /* not used */ IDBDataHandle data_entry ; /* return new data entry */ MrmCode group ; /* the entry's group code */ if ( (result=Idb__FIL_Valid(file_id)) != MrmSUCCESS ) return result ; /* * Validity check on group and type, and make sure entry doesn't * currently exist. */ if ( UrmRCGroup(context_id) == URMgNul ) return MrmNUL_GROUP ; if ( UrmRCType(context_id) == URMtNul) return MrmNUL_TYPE ; result = Idb__INX_FindIndex (file_id, index, &bufptr, &recno) ; if ( result == MrmSUCCESS) return MrmEXISTS ; /* * Create the data entry for this item */ result = Idb__DB_PutDataEntry (file_id, context_id, &data_entry) ; if ( result != MrmSUCCESS ) return result ; /* * Enter the data entry under the index */ result = Idb__INX_EnterItem (file_id, index, data_entry) ; if ( result != MrmSUCCESS ) return result ; file_id->num_indexed++ ; group = UrmRCGroup (context_id) ; if ( group>=URMgMin && group<=URMgMax ) file_id->group_counts[group]++ ; /* * item successfully entered */ return MrmSUCCESS ; }