X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Flookup_table.h;h=9e082c77761b7b9bbd727201b80fd48672006518;hb=f46894fd897b721ac3128743147bdbad70d19414;hp=a269e512ebef8465dc8d151eb02432278e046739;hpb=815ad485b8ce48db48a3137d73e511f6c9af868c;p=wimlib diff --git a/src/lookup_table.h b/src/lookup_table.h index a269e512..9e082c77 100644 --- a/src/lookup_table.h +++ b/src/lookup_table.h @@ -7,7 +7,9 @@ /* Size of each lookup table entry in the WIM file. */ #define WIM_LOOKUP_TABLE_ENTRY_DISK_SIZE 50 -#define LOOKUP_FLAG_ADS_OK +#define LOOKUP_FLAG_ADS_OK 0x00000001 +#define LOOKUP_FLAG_DIRECTORY_OK 0x00000002 +#define LOOKUP_FLAG_FOLLOW_SYMLINKS 0x00000004 /* A lookup table that is used to translate the hash codes of dentries into the @@ -19,6 +21,8 @@ struct lookup_table { u64 capacity; }; +struct wimlib_fd; + /* An entry in the lookup table in the WIM file. */ struct lookup_table_entry { @@ -78,23 +82,9 @@ struct lookup_table_entry { /* Compression type used in other WIM. */ int other_wim_ctype; }; - - struct { /* Used for read-write mounts. */ - - - /* Offset of the stream file_on_disk_fd. */ - off_t staging_offset; - - - /* If file_on_disk_fd, if it is not -1, is the file - * descriptor, opened for reading, for file_on_disk. */ - int staging_fd; - - /* Number of times the file has been opened. - * file_on_disk_fd can be closed when num_times_opened - * is decremented to 0. */ - int staging_num_times_opened; - }; + struct wimlib_fd **fds; + u16 num_allocated_fds; + u16 num_opened_fds; }; /* When a WIM file is written, out_refcnt starts at 0 and is incremented @@ -112,6 +102,7 @@ struct lookup_table_entry { bool refcnt_is_incremented; }; struct resource_entry output_resource_entry; + struct dentry *hard_link_sets; }; extern struct lookup_table *new_lookup_table(size_t capacity); @@ -122,7 +113,7 @@ extern void lookup_table_insert(struct lookup_table *table, extern void lookup_table_unlink(struct lookup_table *table, struct lookup_table_entry *lte); -extern void lookup_table_decrement_refcnt(struct lookup_table* table, +extern bool lookup_table_decrement_refcnt(struct lookup_table* table, const u8 hash[]); @@ -132,15 +123,13 @@ extern int for_lookup_table_entry(struct lookup_table *table, int (*visitor)(struct lookup_table_entry *, void *), void *arg); -extern struct lookup_table_entry *lookup_resource(const struct lookup_table *table, - const u8 hash[]); - -static inline struct lookup_table_entry * -wim_lookup_resource(const WIMStruct *w, const struct dentry *dentry) -{ - return lookup_resource(w->lookup_table, dentry->hash); -} +extern struct lookup_table_entry * +__lookup_resource(const struct lookup_table *lookup_table, const u8 hash[]); +extern int lookup_resource(WIMStruct *w, const char *path, + int lookup_flags, struct dentry **dentry_ret, + struct lookup_table_entry **lte_ret, + u8 **hash_ret); extern int zero_out_refcnts(struct lookup_table_entry *entry, void *ignore);