Lines Matching refs:itr

733 static int fat_itr_isdir(fat_itr *itr);
743 static int fat_itr_root(fat_itr *itr, fsdata *fsdata) in fat_itr_root() argument
748 itr->fsdata = fsdata; in fat_itr_root()
749 itr->start_clust = fsdata->root_cluster; in fat_itr_root()
750 itr->clust = fsdata->root_cluster; in fat_itr_root()
751 itr->next_clust = fsdata->root_cluster; in fat_itr_root()
752 itr->dent = NULL; in fat_itr_root()
753 itr->remaining = 0; in fat_itr_root()
754 itr->last_cluster = 0; in fat_itr_root()
755 itr->is_root = 1; in fat_itr_root()
777 static void fat_itr_child(fat_itr *itr, fat_itr *parent) in fat_itr_child() argument
784 itr->fsdata = parent->fsdata; in fat_itr_child()
785 itr->start_clust = clustnum; in fat_itr_child()
787 itr->clust = clustnum; in fat_itr_child()
788 itr->next_clust = clustnum; in fat_itr_child()
789 itr->is_root = 0; in fat_itr_child()
791 itr->clust = parent->fsdata->root_cluster; in fat_itr_child()
792 itr->next_clust = parent->fsdata->root_cluster; in fat_itr_child()
793 itr->start_clust = parent->fsdata->root_cluster; in fat_itr_child()
794 itr->is_root = 1; in fat_itr_child()
796 itr->dent = NULL; in fat_itr_child()
797 itr->remaining = 0; in fat_itr_child()
798 itr->last_cluster = 0; in fat_itr_child()
811 void *fat_next_cluster(fat_itr *itr, unsigned int *nbytes) in fat_next_cluster() argument
818 if (itr->last_cluster) in fat_next_cluster()
821 if (itr->is_root && itr->fsdata->fatsize != 32) { in fat_next_cluster()
829 unsigned sect_offset = itr->next_clust * itr->fsdata->clust_size; in fat_next_cluster()
830 unsigned remaining_sects = itr->fsdata->rootdir_size - sect_offset; in fat_next_cluster()
831 sect = itr->fsdata->rootdir_sect + sect_offset; in fat_next_cluster()
833 read_size = min_t(u32, itr->fsdata->clust_size, in fat_next_cluster()
836 sect = clust_to_sect(itr->fsdata, itr->next_clust); in fat_next_cluster()
837 read_size = itr->fsdata->clust_size; in fat_next_cluster()
841 sect, itr->fsdata->clust_size, read_size); in fat_next_cluster()
852 ret = disk_read(sect, read_size, itr->block); in fat_next_cluster()
858 *nbytes = read_size * itr->fsdata->sect_size; in fat_next_cluster()
859 itr->clust = itr->next_clust; in fat_next_cluster()
860 if (itr->is_root && itr->fsdata->fatsize != 32) { in fat_next_cluster()
861 itr->next_clust++; in fat_next_cluster()
862 if (itr->next_clust * itr->fsdata->clust_size >= in fat_next_cluster()
863 itr->fsdata->rootdir_size) { in fat_next_cluster()
864 debug("nextclust: 0x%x\n", itr->next_clust); in fat_next_cluster()
865 itr->last_cluster = 1; in fat_next_cluster()
868 itr->next_clust = get_fatent(itr->fsdata, itr->next_clust); in fat_next_cluster()
869 if (CHECK_CLUST(itr->next_clust, itr->fsdata->fatsize)) { in fat_next_cluster()
870 debug("nextclust: 0x%x\n", itr->next_clust); in fat_next_cluster()
871 itr->last_cluster = 1; in fat_next_cluster()
875 return itr->block; in fat_next_cluster()
878 static dir_entry *next_dent(fat_itr *itr) in next_dent() argument
880 if (itr->remaining == 0) { in next_dent()
882 struct dir_entry *dent = fat_next_cluster(itr, &nbytes); in next_dent()
887 itr->dent = NULL; in next_dent()
891 itr->remaining = nbytes / sizeof(dir_entry) - 1; in next_dent()
892 itr->dent = dent; in next_dent()
894 itr->remaining--; in next_dent()
895 itr->dent++; in next_dent()
899 if (itr->dent->nameext.name[0] == 0) in next_dent()
902 return itr->dent; in next_dent()
905 static dir_entry *extract_vfat_name(fat_itr *itr) in extract_vfat_name() argument
907 struct dir_entry *dent = itr->dent; in extract_vfat_name()
908 int seqn = itr->dent->nameext.name[0] & ~LAST_LONG_ENTRY_MASK; in extract_vfat_name()
918 if (n + idx >= sizeof(itr->l_name)) in extract_vfat_name()
922 memmove(itr->l_name + idx, itr->l_name, n); in extract_vfat_name()
923 memcpy(itr->l_name, buf, idx); in extract_vfat_name()
926 dent = next_dent(itr); in extract_vfat_name()
939 itr->l_name[n] = '\0'; in extract_vfat_name()
946 chksum, alias_checksum, itr->l_name, dent->nameext.name, in extract_vfat_name()
963 static int fat_itr_next(fat_itr *itr) in fat_itr_next() argument
967 itr->name = NULL; in fat_itr_next()
980 dent = next_dent(itr); in fat_itr_next()
982 itr->dent_start = NULL; in fat_itr_next()
985 itr->dent_rem = itr->remaining; in fat_itr_next()
986 itr->dent_start = itr->dent; in fat_itr_next()
987 itr->dent_clust = itr->clust; in fat_itr_next()
995 dent = extract_vfat_name(itr); in fat_itr_next()
1007 itr->name = itr->l_name; in fat_itr_next()
1019 get_name(dent, itr->s_name); in fat_itr_next()
1020 if (!itr->name) in fat_itr_next()
1021 itr->name = itr->s_name; in fat_itr_next()
1032 static int fat_itr_isdir(fat_itr *itr) in fat_itr_isdir() argument
1034 return !!(itr->dent->attr & ATTR_DIR); in fat_itr_isdir()
1060 static int fat_itr_resolve(fat_itr *itr, const char *path, unsigned type) in fat_itr_resolve() argument
1080 if (itr->is_root) { in fat_itr_resolve()
1085 itr->clust = itr->fsdata->root_cluster; in fat_itr_resolve()
1086 itr->next_clust = itr->fsdata->root_cluster; in fat_itr_resolve()
1087 itr->start_clust = itr->fsdata->root_cluster; in fat_itr_resolve()
1088 itr->dent = NULL; in fat_itr_resolve()
1089 itr->remaining = 0; in fat_itr_resolve()
1090 itr->last_cluster = 0; in fat_itr_resolve()
1099 return fat_itr_resolve(itr, next, type); in fat_itr_resolve()
1103 while (fat_itr_next(itr)) { in fat_itr_resolve()
1105 unsigned n = max(strlen(itr->name), (size_t)(next - path)); in fat_itr_resolve()
1108 if (!strncasecmp(path, itr->name, n)) in fat_itr_resolve()
1110 else if (itr->name != itr->s_name && in fat_itr_resolve()
1111 !strncasecmp(path, itr->s_name, n)) in fat_itr_resolve()
1117 if (fat_itr_isdir(itr)) { in fat_itr_resolve()
1119 fat_itr_child(itr, itr); in fat_itr_resolve()
1120 return fat_itr_resolve(itr, next, type); in fat_itr_resolve()
1173 fat_itr *itr; in fat_exists() local
1176 itr = malloc_cache_aligned(sizeof(fat_itr)); in fat_exists()
1177 if (!itr) in fat_exists()
1179 ret = fat_itr_root(itr, &fsdata); in fat_exists()
1183 ret = fat_itr_resolve(itr, filename, TYPE_ANY); in fat_exists()
1186 free(itr); in fat_exists()
1193 fat_itr *itr; in fat_size() local
1196 itr = malloc_cache_aligned(sizeof(fat_itr)); in fat_size()
1197 if (!itr) in fat_size()
1199 ret = fat_itr_root(itr, &fsdata); in fat_size()
1203 ret = fat_itr_resolve(itr, filename, TYPE_FILE); in fat_size()
1210 ret = fat_itr_root(itr, &fsdata); in fat_size()
1213 ret = fat_itr_resolve(itr, filename, TYPE_DIR); in fat_size()
1219 *size = FAT2CPU32(itr->dent->size); in fat_size()
1223 free(itr); in fat_size()
1231 fat_itr *itr; in file_fat_read_at() local
1234 itr = malloc_cache_aligned(sizeof(fat_itr)); in file_fat_read_at()
1235 if (!itr) in file_fat_read_at()
1237 ret = fat_itr_root(itr, &fsdata); in file_fat_read_at()
1241 ret = fat_itr_resolve(itr, filename, TYPE_FILE); in file_fat_read_at()
1248 dir_entry *dentptr = itr->dent; in file_fat_read_at()
1255 free(itr); in file_fat_read_at()
1287 fat_itr itr; member
1300 ret = fat_itr_root(&dir->itr, &dir->fsdata); in fat_opendir()
1304 ret = fat_itr_resolve(&dir->itr, filename, TYPE_DIR); in fat_opendir()
1323 if (!fat_itr_next(&dir->itr)) in fat_readdir()
1327 strcpy(dent->name, dir->itr.name); in fat_readdir()
1329 if (fat_itr_isdir(&dir->itr)) { in fat_readdir()
1333 dent->size = FAT2CPU32(dir->itr.dent->size); in fat_readdir()