Lines Matching refs:dirs
458 static int sqfs_search_dir(struct squashfs_dir_stream *dirs, char **token_list, in sqfs_search_dir() argument
477 dirsp = (struct fs_dir_stream *)dirs; in sqfs_search_dir()
480 table = sqfs_find_inode(dirs->inode_table, le32_to_cpu(sblk->inodes), in sqfs_search_dir()
490 dirs->table = &dirs->dir_table[offset]; in sqfs_search_dir()
493 dirs->dir_header = malloc(SQFS_DIR_HEADER_SIZE); in sqfs_search_dir()
494 if (!dirs->dir_header) in sqfs_search_dir()
497 memcpy(dirs->dir_header, dirs->table, SQFS_DIR_HEADER_SIZE); in sqfs_search_dir()
500 dirs->table += SQFS_DIR_HEADER_SIZE; in sqfs_search_dir()
501 dirs->size = get_unaligned_le16(&dir->file_size) - SQFS_DIR_HEADER_SIZE; in sqfs_search_dir()
502 dirs->entry_count = dirs->dir_header->count + 1; in sqfs_search_dir()
506 dirs->table = &dirs->dir_table[offset]; in sqfs_search_dir()
507 memcpy(&dirs->i_dir, dir, sizeof(*dir)); in sqfs_search_dir()
522 free(dirs->entry); in sqfs_search_dir()
523 dirs->entry = NULL; in sqfs_search_dir()
533 new_inode_number = dirs->entry->inode_offset + in sqfs_search_dir()
534 dirs->dir_header->inode_number; in sqfs_search_dir()
537 table = sqfs_find_inode(dirs->inode_table, new_inode_number, in sqfs_search_dir()
601 free(dirs->entry); in sqfs_search_dir()
602 dirs->entry = NULL; in sqfs_search_dir()
604 ret = sqfs_search_dir(dirs, sym_tokens, token_count, in sqfs_search_dir()
609 free(dirs->entry); in sqfs_search_dir()
610 dirs->entry = NULL; in sqfs_search_dir()
621 dirs->table = &dirs->dir_table[offset]; in sqfs_search_dir()
624 memcpy(dirs->dir_header, &dirs->dir_table[offset], in sqfs_search_dir()
630 free(dirs->entry); in sqfs_search_dir()
631 dirs->entry = NULL; in sqfs_search_dir()
636 dirs->table += SQFS_DIR_HEADER_SIZE; in sqfs_search_dir()
637 dirs->size = get_unaligned_le16(&dir->file_size); in sqfs_search_dir()
638 dirs->entry_count = dirs->dir_header->count + 1; in sqfs_search_dir()
639 dirs->size -= SQFS_DIR_HEADER_SIZE; in sqfs_search_dir()
640 free(dirs->entry); in sqfs_search_dir()
641 dirs->entry = NULL; in sqfs_search_dir()
645 dirs->table = &dirs->dir_table[offset]; in sqfs_search_dir()
648 memcpy(&dirs->i_dir, dir, sizeof(*dir)); in sqfs_search_dir()
650 memcpy(&dirs->i_ldir, ldir, sizeof(*ldir)); in sqfs_search_dir()
912 struct squashfs_dir_stream *dirs; in sqfs_opendir_nest() local
916 dirs = calloc(1, sizeof(*dirs)); in sqfs_opendir_nest()
917 if (!dirs) in sqfs_opendir_nest()
921 dirs->dir_header = NULL; in sqfs_opendir_nest()
922 dirs->entry = NULL; in sqfs_opendir_nest()
923 dirs->table = NULL; in sqfs_opendir_nest()
924 dirs->inode_table = NULL; in sqfs_opendir_nest()
925 dirs->dir_table = NULL; in sqfs_opendir_nest()
966 dirs->inode_table = inode_table; in sqfs_opendir_nest()
967 dirs->dir_table = dir_table; in sqfs_opendir_nest()
968 ret = sqfs_search_dir(dirs, token_list, token_count, pos_list, in sqfs_opendir_nest()
973 if (le16_to_cpu(dirs->i_dir.inode_type) == SQFS_DIR_TYPE) in sqfs_opendir_nest()
974 dirs->size = le16_to_cpu(dirs->i_dir.file_size); in sqfs_opendir_nest()
976 dirs->size = le32_to_cpu(dirs->i_ldir.file_size); in sqfs_opendir_nest()
979 memcpy(dirs->dir_header, dirs->table, SQFS_DIR_HEADER_SIZE); in sqfs_opendir_nest()
980 dirs->entry_count = dirs->dir_header->count + 1; in sqfs_opendir_nest()
981 dirs->size -= SQFS_DIR_HEADER_SIZE; in sqfs_opendir_nest()
984 dirs->entry = NULL; in sqfs_opendir_nest()
985 dirs->table += SQFS_DIR_HEADER_SIZE; in sqfs_opendir_nest()
987 *dirsp = (struct fs_dir_stream *)dirs; in sqfs_opendir_nest()
999 free(dirs); in sqfs_opendir_nest()
1020 struct squashfs_dir_stream *dirs; in sqfs_readdir_nest() local
1029 dirs = (struct squashfs_dir_stream *)fs_dirs; in sqfs_readdir_nest()
1030 if (!dirs->size) { in sqfs_readdir_nest()
1035 dent = &dirs->dentp; in sqfs_readdir_nest()
1037 if (!dirs->entry_count) { in sqfs_readdir_nest()
1038 if (dirs->size > SQFS_DIR_HEADER_SIZE) { in sqfs_readdir_nest()
1039 dirs->size -= SQFS_DIR_HEADER_SIZE; in sqfs_readdir_nest()
1042 dirs->size = 0; in sqfs_readdir_nest()
1046 if (dirs->size > SQFS_EMPTY_FILE_SIZE) { in sqfs_readdir_nest()
1048 memcpy(dirs->dir_header, dirs->table, in sqfs_readdir_nest()
1050 dirs->entry_count = dirs->dir_header->count + 1; in sqfs_readdir_nest()
1051 ret = sqfs_read_entry(&dirs->entry, dirs->table + in sqfs_readdir_nest()
1056 dirs->table += SQFS_DIR_HEADER_SIZE; in sqfs_readdir_nest()
1059 ret = sqfs_read_entry(&dirs->entry, dirs->table); in sqfs_readdir_nest()
1064 i_number = dirs->dir_header->inode_number + dirs->entry->inode_offset; in sqfs_readdir_nest()
1065 ipos = sqfs_find_inode(dirs->inode_table, i_number, sblk->inodes, in sqfs_readdir_nest()
1073 switch (dirs->entry->type) { in sqfs_readdir_nest()
1113 name_size = min_t(u16, dirs->entry->name_size + 1, FS_DIRENT_NAME_LEN - 1); in sqfs_readdir_nest()
1114 strncpy(dent->name, dirs->entry->name, name_size); in sqfs_readdir_nest()
1117 offset = dirs->entry->name_size + 1 + SQFS_ENTRY_BASE_LENGTH; in sqfs_readdir_nest()
1118 dirs->entry_count--; in sqfs_readdir_nest()
1121 if (dirs->size > offset) in sqfs_readdir_nest()
1122 dirs->size -= offset; in sqfs_readdir_nest()
1124 dirs->size = 0; in sqfs_readdir_nest()
1127 dirs->table += offset; in sqfs_readdir_nest()
1375 struct squashfs_dir_stream *dirs; in sqfs_read_nest() local
1404 dirs = (struct squashfs_dir_stream *)dirsp; in sqfs_read_nest()
1412 free(dirs->entry); in sqfs_read_nest()
1413 dirs->entry = NULL; in sqfs_read_nest()
1423 i_number = dirs->dir_header->inode_number + dirs->entry->inode_offset; in sqfs_read_nest()
1424 ipos = sqfs_find_inode(dirs->inode_table, i_number, sblk->inodes, in sqfs_read_nest()
1654 struct squashfs_dir_stream *dirs; in sqfs_size_nest() local
1673 dirs = (struct squashfs_dir_stream *)dirsp; in sqfs_size_nest()
1679 free(dirs->entry); in sqfs_size_nest()
1680 dirs->entry = NULL; in sqfs_size_nest()
1690 i_number = dirs->dir_header->inode_number + dirs->entry->inode_offset; in sqfs_size_nest()
1691 ipos = sqfs_find_inode(dirs->inode_table, i_number, sblk->inodes, in sqfs_size_nest()
1700 free(dirs->entry); in sqfs_size_nest()
1701 dirs->entry = NULL; in sqfs_size_nest()
1753 struct squashfs_dir_stream *dirs; in sqfs_exists() local
1770 dirs = (struct squashfs_dir_stream *)dirsp; in sqfs_exists()
1776 free(dirs->entry); in sqfs_exists()
1777 dirs->entry = NULL; in sqfs_exists()
1803 void sqfs_closedir(struct fs_dir_stream *dirs) in sqfs_closedir() argument
1807 if (!dirs) in sqfs_closedir()
1810 sqfs_dirs = (struct squashfs_dir_stream *)dirs; in sqfs_closedir()