Lines Matching refs:dir
80 static int read_entries(struct exfat* ef, struct exfat_node* dir, in read_entries() argument
85 if (!(dir->attrib & EXFAT_ATTRIB_DIR)) in read_entries()
88 size = exfat_generic_pread(ef, dir, entries, in read_entries()
101 static int write_entries(struct exfat* ef, struct exfat_node* dir, in write_entries() argument
106 if (!(dir->attrib & EXFAT_ATTRIB_DIR)) in write_entries()
109 size = exfat_generic_pwrite(ef, dir, entries, in write_entries()
532 int exfat_cache_directory(struct exfat* ef, struct exfat_node* dir) in exfat_cache_directory() argument
539 if (dir->is_cached) in exfat_cache_directory()
542 while ((rc = readdir(ef, dir, &node, &offset)) == 0) in exfat_cache_directory()
544 node->parent = dir; in exfat_cache_directory()
551 dir->child = node; in exfat_cache_directory()
559 for (current = dir->child; current; current = node) in exfat_cache_directory()
564 dir->child = NULL; in exfat_cache_directory()
568 dir->is_cached = true; in exfat_cache_directory()
572 static void tree_attach(struct exfat_node* dir, struct exfat_node* node) in tree_attach() argument
574 node->parent = dir; in tree_attach()
575 if (dir->child) in tree_attach()
577 dir->child->prev = node; in tree_attach()
578 node->next = dir->child; in tree_attach()
580 dir->child = node; in tree_attach()
680 static int erase_entries(struct exfat* ef, struct exfat_node* dir, int n, in erase_entries() argument
687 rc = read_entries(ef, dir, entries, n, offset); in erase_entries()
692 return write_entries(ef, dir, entries, n, offset); in erase_entries()
712 static int shrink_directory(struct exfat* ef, struct exfat_node* dir, in shrink_directory() argument
720 if (!(dir->attrib & EXFAT_ATTRIB_DIR)) in shrink_directory()
722 if (!dir->is_cached) in shrink_directory()
725 for (last_node = node = dir->child; node; node = node->next) in shrink_directory()
752 if (new_size == dir->size) in shrink_directory()
754 return exfat_truncate(ef, dir, new_size, true); in shrink_directory()
807 static int check_slot(struct exfat* ef, struct exfat_node* dir, off_t offset, in check_slot() argument
817 if (dir != ef->root) in check_slot()
820 rc = read_entries(ef, dir, entries, n, offset); in check_slot()
829 static int find_slot(struct exfat* ef, struct exfat_node* dir, in find_slot() argument
837 if (!dir->is_cached) in find_slot()
841 dmap = calloc(BMAP_SIZE(dir->size / sizeof(struct exfat_entry)), in find_slot()
846 dir->size / sizeof(struct exfat_entry)); in find_slot()
849 for (p = dir->child; p != NULL; p = p->next) in find_slot()
854 for (i = 0; i < dir->size / sizeof(struct exfat_entry); i++) in find_slot()
865 rc = check_slot(ef, dir, *offset, n); in find_slot()
887 *offset = dir->size; in find_slot()
888 return exfat_truncate(ef, dir, in find_slot()
889 ROUND_UP(dir->size + sizeof(struct exfat_entry[n - contiguous]), in find_slot()
894 static int commit_entry(struct exfat* ef, struct exfat_node* dir, in commit_entry() argument
937 rc = write_entries(ef, dir, entries, 2 + name_entries, offset); in commit_entry()
949 tree_attach(dir, node); in commit_entry()
955 struct exfat_node* dir; in create() local
961 rc = exfat_split(ef, &dir, &existing, name, path); in create()
967 exfat_put_node(ef, dir); in create()
971 rc = find_slot(ef, dir, &offset, in create()
975 exfat_put_node(ef, dir); in create()
978 rc = commit_entry(ef, dir, name, offset, attrib); in create()
981 exfat_put_node(ef, dir); in create()
984 exfat_update_mtime(dir); in create()
985 rc = exfat_flush_node(ef, dir); in create()
986 exfat_put_node(ef, dir); in create()
1025 static int rename_entry(struct exfat* ef, struct exfat_node* dir, in rename_entry() argument
1063 rc = write_entries(ef, dir, entries, 2 + name_entries, new_offset); in rename_entry()
1069 tree_attach(dir, node); in rename_entry()
1077 struct exfat_node* dir; in exfat_rename() local
1086 rc = exfat_split(ef, &dir, &existing, name, new_path); in exfat_rename()
1098 for (p = dir; p; p = p->parent) in exfat_rename()
1103 exfat_put_node(ef, dir); in exfat_rename()
1134 exfat_put_node(ef, dir); in exfat_rename()
1141 exfat_put_node(ef, dir); in exfat_rename()
1150 rc = find_slot(ef, dir, &offset, in exfat_rename()
1154 exfat_put_node(ef, dir); in exfat_rename()
1158 rc = rename_entry(ef, dir, node, name, offset); in exfat_rename()
1161 exfat_put_node(ef, dir); in exfat_rename()
1165 rc = exfat_flush_node(ef, dir); in exfat_rename()
1166 exfat_put_node(ef, dir); in exfat_rename()