X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fexfatprogs.git;a=blobdiff_plain;f=include%2Fexfat_dir.h;fp=include%2Fexfat_dir.h;h=d450c61000cbc8c9e978c00a1dff7da57561228c;hp=12e154600b1f28747b6cd3f356e534a8a835b468;hb=fa2bd7b968e130b5833bb0bebffda6c14c34de31;hpb=18d68918e6789c8e26d7a44751192f58787e3cd6 diff --git a/include/exfat_dir.h b/include/exfat_dir.h index 12e1546..d450c61 100644 --- a/include/exfat_dir.h +++ b/include/exfat_dir.h @@ -25,13 +25,16 @@ struct exfat_de_iter { off_t de_file_offset; off_t next_read_offset; int max_skip_dentries; -#define DOT_NAME_NUM_MAX 9999999 - unsigned int dot_name_num; +#define INVALID_NAME_NUM_MAX 9999999 + unsigned int invalid_name_num; + + char *name_hash_bitmap; /* bitmap of children's name hashes */ }; struct exfat_lookup_filter { struct { uint8_t type; + int dentry_count; /* return 0 if matched, return 1 if not matched, * otherwise return errno */ @@ -43,8 +46,15 @@ struct exfat_lookup_filter { struct exfat_dentry *dentry_set; int dentry_count; off_t file_offset; - /* device offset where the dentry_set locates, or - * the empty slot locates or EOF if not found. + /* + * If the dentry_set found: + * - device offset where the dentry_set locates. + * If the dentry_set not found: + * - device offset where the first empty dentry_set locates + * if in.dentry_count > 0 and there are enough empty dentry. + * - device offset where the last empty dentry_set locates + * if in.dentry_count = 0 or no enough empty dentry. + * - EOF if no empty dentry_set. */ off_t dev_offset; } out; @@ -65,6 +75,10 @@ int exfat_lookup_dentry_set(struct exfat *exfat, struct exfat_inode *parent, struct exfat_lookup_filter *filter); int exfat_lookup_file(struct exfat *exfat, struct exfat_inode *parent, const char *name, struct exfat_lookup_filter *filter_out); +int exfat_lookup_file_by_utf16name(struct exfat *exfat, + struct exfat_inode *parent, + __le16 *utf16_name, + struct exfat_lookup_filter *filter_out); int exfat_create_file(struct exfat *exfat, struct exfat_inode *parent, const char *name, unsigned short attr); @@ -75,7 +89,6 @@ int exfat_update_file_dentry_set(struct exfat *exfat, int exfat_build_file_dentry_set(struct exfat *exfat, const char *name, unsigned short attr, struct exfat_dentry **dentry_set, int *dentry_count); -int exfat_find_free_cluster(struct exfat *exfat, clus_t start, clus_t *new_clu); int exfat_add_dentry_set(struct exfat *exfat, struct exfat_dentry_loc *loc, struct exfat_dentry *dset, int dcount, bool need_next_loc);