private uint getLeafNodeContainingRecord(HFSPlusCatalogKey recordKeyID) { byte[] nodeRawData = new byte[this.nodeSize]; uint currentNodeNumber = this.header.headerInfo.rootNode; absNode.nodeType currentNodeType = getNodeType(currentNodeNumber); while (currentNodeType != absNode.nodeType.leaf) { fs.Seek(currentNodeNumber * this.nodeSize, SeekOrigin.Begin); fs.Read(nodeRawData, 0, this.nodeSize); catalogIndexNode currentNode = new catalogIndexNode(ref nodeRawData); catalogIndexNode.catalogIndexRecord perhapsThisRecord = currentNode.records[0]; // find out which pointer to follow foreach (catalogIndexNode.catalogIndexRecord record in currentNode.records) { bool equalsSearch = catalogKeyCompare(record.catalogKey, recordKeyID, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.equalsTrialKey; bool lessThanSearch = catalogKeyCompare(record.catalogKey, recordKeyID, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.greaterThanTrialKey; bool greaterThanOrEqualToBestKnown = catalogKeyCompare(record.catalogKey, perhapsThisRecord.catalogKey, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.lessThanTrialKey || catalogKeyCompare(record.catalogKey, perhapsThisRecord.catalogKey, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.equalsTrialKey; if (lessThanSearch && greaterThanOrEqualToBestKnown || equalsSearch) { perhapsThisRecord = record; } } currentNodeNumber = perhapsThisRecord.pointer; currentNodeType = (absNode.nodeType)getNodeType(currentNodeNumber); } // send back pointer return(currentNodeNumber); }
private uint getLeafNodeContainingRecord(HFSPlusCatalogKey recordKeyID) { byte[] nodeRawData = new byte[this.nodeSize]; uint currentNodeNumber = this.header.headerInfo.rootNode; absNode.nodeType currentNodeType = getNodeType(currentNodeNumber); while (currentNodeType != absNode.nodeType.leaf) { fs.Seek(currentNodeNumber * this.nodeSize, SeekOrigin.Begin); fs.Read(nodeRawData, 0, this.nodeSize); catalogIndexNode currentNode = new catalogIndexNode(ref nodeRawData); catalogIndexNode.catalogIndexRecord perhapsThisRecord = currentNode.records[0]; // find out which pointer to follow foreach (catalogIndexNode.catalogIndexRecord record in currentNode.records) { bool equalsSearch = catalogKeyCompare(record.catalogKey, recordKeyID, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.equalsTrialKey; bool lessThanSearch = catalogKeyCompare(record.catalogKey, recordKeyID, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.greaterThanTrialKey; bool greaterThanOrEqualToBestKnown = catalogKeyCompare(record.catalogKey, perhapsThisRecord.catalogKey, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.lessThanTrialKey || catalogKeyCompare(record.catalogKey, perhapsThisRecord.catalogKey, this.header.headerInfo.keyCompareType == 0xBC) == dataOperations.keyCompareResult.equalsTrialKey; if (lessThanSearch && greaterThanOrEqualToBestKnown || equalsSearch) { perhapsThisRecord = record; } } currentNodeNumber = perhapsThisRecord.pointer; currentNodeType = (absNode.nodeType)getNodeType(currentNodeNumber); } // send back pointer return currentNodeNumber; }