]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.h
compiles (IN PROGRESS)
[wimlib] / src / lookup_table.h
index a269e512ebef8465dc8d151eb02432278e046739..9e082c77761b7b9bbd727201b80fd48672006518 100644 (file)
@@ -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);