static long GetCatalogEntryInfo(void *entry, long *flags, long *time,␊ |
FinderInfo *finderInfo, long *infoValid);␊ |
static long ResolvePathToCatalogEntry(char *filePath, long *flags,␊ |
void *entry, long dirID, long *dirIndex);␊ |
void *entry, long dirID, long long *dirIndex);␊ |
␊ |
static long GetCatalogEntry(long *dirIndex, char **name,␊ |
static long GetCatalogEntry(long long *dirIndex, char **name,␊ |
long *flags, long *time,␊ |
FinderInfo *finderInfo, long *infoValid);␊ |
static long ReadCatalogEntry(char *fileName, long dirID, void *entry,␊ |
long *dirIndex);␊ |
long long *dirIndex);␊ |
static long ReadExtentsEntry(long fileID, long startBlock, void *entry);␊ |
␊ |
static long ReadBTreeEntry(long btree, void *key, char *entry, long *dirIndex);␊ |
static long ReadBTreeEntry(long btree, void *key, char *entry, long long *dirIndex);␊ |
static void GetBTreeRecord(long index, char *nodeBuffer, long nodeSize,␊ |
char **key, char **data);␊ |
␊ |
|
return length;␊ |
}␊ |
␊ |
long HFSGetDirEntry(CICell ih, char * dirPath, long * dirIndex, char ** name,␊ |
long HFSGetDirEntry(CICell ih, char * dirPath, long long * dirIndex, char ** name,␊ |
long * flags, long * time,␊ |
FinderInfo * finderInfo, long * infoValid)␊ |
{␊ |
|
␊ |
UInt16 nodeSize;␊ |
UInt32 firstLeafNode;␊ |
long dirIndex;␊ |
long long dirIndex;␊ |
char *name;␊ |
long flags, time;␊ |
␊ |
|
nodeSize = SWAP_BE16(gBTHeaders[kBTreeCatalog]->nodeSize);␊ |
firstLeafNode = SWAP_BE32(gBTHeaders[kBTreeCatalog]->firstLeafNode);␊ |
␊ |
dirIndex = firstLeafNode * nodeSize;␊ |
dirIndex = (long long) firstLeafNode * nodeSize;␊ |
␊ |
GetCatalogEntry(&dirIndex, &name, &flags, &time, 0, 0);␊ |
␊ |
|
}␊ |
␊ |
static long ResolvePathToCatalogEntry(char * filePath, long * flags,␊ |
void * entry, long dirID, long * dirIndex)␊ |
void * entry, long dirID, long long * dirIndex)␊ |
{␊ |
char *restPath;␊ |
long result, cnt, subFolderID = 0, tmpDirIndex;␊ |
long result, cnt, subFolderID = 0;␊ |
long long tmpDirIndex;␊ |
HFSPlusCatalogFile *hfsPlusFile;␊ |
␊ |
// Copy the file name to gTempStr␊ |
|
return result;␊ |
}␊ |
␊ |
static long GetCatalogEntry(long * dirIndex, char ** name,␊ |
static long GetCatalogEntry(long long * dirIndex, char ** name,␊ |
long * flags, long * time,␊ |
FinderInfo * finderInfo, long * infoValid)␊ |
{␊ |
|
nodeBuf = (char *)malloc(nodeSize);␊ |
node = (BTNodeDescriptor *)nodeBuf;␊ |
␊ |
index = *dirIndex % nodeSize;␊ |
curNode = *dirIndex / nodeSize;␊ |
index = (long) (*dirIndex % nodeSize);␊ |
curNode = (long) (*dirIndex / nodeSize);␊ |
␊ |
// Read the BTree node and get the record for index.␊ |
ReadExtent(extent, extentSize, kHFSCatalogFileID,␊ |
(long long)curNode * nodeSize, nodeSize, nodeBuf, 1);␊ |
(long long) curNode * nodeSize, nodeSize, nodeBuf, 1);␊ |
GetBTreeRecord(index, nodeBuf, nodeSize, &testKey, &entry);␊ |
␊ |
GetCatalogEntryInfo(entry, flags, time, finderInfo, infoValid);␊ |
|
index = 0;␊ |
curNode = SWAP_BE32(node->fLink);␊ |
}␊ |
*dirIndex = curNode * nodeSize + index;␊ |
*dirIndex = (long long) curNode * nodeSize + index;␊ |
␊ |
free(nodeBuf);␊ |
␊ |
|
}␊ |
␊ |
static long ReadCatalogEntry(char * fileName, long dirID,␊ |
void * entry, long * dirIndex)␊ |
void * entry, long long * dirIndex)␊ |
{␊ |
long length;␊ |
char key[sizeof(HFSPlusCatalogKey)];␊ |
|
return ReadBTreeEntry(kBTreeExtents, &key, entry, 0);␊ |
}␊ |
␊ |
static long ReadBTreeEntry(long btree, void * key, char * entry, long * dirIndex)␊ |
static long ReadBTreeEntry(long btree, void * key, char * entry, long long * dirIndex)␊ |
{␊ |
long extentSize;␊ |
void *extent;␊ |
|
while (1) {␊ |
// Read the current node.␊ |
ReadExtent(extent, extentSize, extentFile,␊ |
(long long)curNode * nodeSize, nodeSize, nodeBuf, 1);␊ |
(long long) curNode * nodeSize, nodeSize, nodeBuf, 1);␊ |
␊ |
// Find the matching key.␊ |
lowerBound = 0;␊ |
|
index = 0;␊ |
curNode = SWAP_BE32(node->fLink);␊ |
}␊ |
*dirIndex = curNode * nodeSize + index;␊ |
*dirIndex = (long long) curNode * nodeSize + index;␊ |
}␊ |
␊ |
free(nodeBuf);␊ |