BOOL addToPath (int v) { if (!existsInPath(v)) { path[pi++] = v; return YES; } return NO; }
inode * getFile(FILE *fs, char ** path, uint32_t inode_off, uint32_t part_off, uint32_t zone_size) { uint32_t inode_num = ROOT_INODE_NUM; uint8_t *dir_data; inode *Inode; uint32_t i; uint32_t dir_num_entries; FATALCALL((Inode=malloc(INODE_SIZE))==NULL,"malloc"); getInode(Inode, ROOT_INODE_NUM, inode_off, fs); if(path[0] == NULL)/*magic number*/ return Inode; for(i=0; path[i] != NULL; i++) { FATALCALL((dir_data=malloc(Inode->size))==NULL,"malloc"); dir_data = getData(fs, Inode, part_off, zone_size); dir_num_entries = (Inode->size/DIR_ENTRY_SIZE); inode_num = existsInPath(dir_data, dir_num_entries, path[i]); if (inode_num == 0) return NULL; getInode(Inode, inode_num, inode_off, fs); if (path[i+1] == NULL) return Inode; free(dir_data); } return Inode; }