]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.h
inode updates (IN PROGRESS)
[wimlib] / src / lookup_table.h
index ede2bfe6fa5d7ba9be1444764f3877ad6fc95091..193cef03cefbd101d2aa1d504e594fba268e66a4 100644 (file)
@@ -154,16 +154,7 @@ struct lookup_table_entry {
        #endif
        };
 #ifdef WITH_FUSE
-       /* File descriptors table for this data stream.  This is used if the WIM
-        * is mounted.  Basically, each time a file is open()ed, a new file
-        * descriptor is added here, and each time a file is close()ed, the file
-        * descriptor is gotten rid of.  If the stream is opened for writing, it
-        * will be extracted to the staging directory and there will be an
-        * actual native file descriptor associated with each "wimlib file
-        * descriptor". */
        u16 num_opened_fds;
-       u16 num_allocated_fds;
-       struct wimlib_fd **fds;
 #endif
 
        /* When a WIM file is written, out_refcnt starts at 0 and is incremented
@@ -173,30 +164,23 @@ struct lookup_table_entry {
         * dentries. */
        u32 out_refcnt;
 
-       union {
-               /* When a WIM file is written, @output_resource_entry is filled
-                * in with the resource entry for the output WIM.  This will not
-                * necessarily be the same as the @resource_entry since:
-                *      - The stream may have a different offset in the new WIM
-                *      - The stream may have a different compressed size in the
-                *      new WIM if the compression type changed
-                */
-               struct resource_entry output_resource_entry;
-
-               /* This field is used for the special hardlink or symlink image
-                * application mode.   In these mode, all identical files are
-                * linked together, and @extracted_file will be set to the
-                * filename of the first extracted file containing this stream.
-                * */
-               char *extracted_file;
-       };
+       u32 real_refcnt;
+
+       /* When a WIM file is written, @output_resource_entry is filled
+        * in with the resource entry for the output WIM.  This will not
+        * necessarily be the same as the @resource_entry since:
+        *      - The stream may have a different offset in the new WIM
+        *      - The stream may have a different compressed size in the
+        *      new WIM if the compression type changed
+        */
+       struct resource_entry output_resource_entry;
 
-       /* Circular linked list of streams that share the same lookup table
-        * entry.
-        * 
-        * This list of streams may include streams from different hard link
-        * sets that happen to be the same.  */
-       struct list_head lte_group_list;
+       /* This field is used for the special hardlink or symlink image
+        * application mode.   In these mode, all identical files are
+        * linked together, and @extracted_file will be set to the
+        * filename of the first extracted file containing this stream.
+        * */
+       char *extracted_file;
 
        /* List of lookup table entries that correspond to streams that have
         * been extracted to the staging directory when modifying a read-write
@@ -246,6 +230,12 @@ static inline void lookup_table_unlink(struct lookup_table *table,
 extern struct lookup_table_entry *
 lookup_table_decrement_refcnt(struct lookup_table* table, const u8 hash[]);
 
+#ifdef WITH_FUSE
+extern struct lookup_table_entry *
+lte_decrement_num_opened_fds(struct lookup_table_entry *lte,
+                            struct lookup_table *table);
+#endif
+
 extern struct lookup_table_entry *
 lte_decrement_refcnt(struct lookup_table_entry *lte,
                     struct lookup_table *table);
@@ -263,9 +253,11 @@ __lookup_resource(const struct lookup_table *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,
-                          unsigned *stream_idx_ret);
+                          u16 *stream_idx_ret);
 
-extern int zero_out_refcnts(struct lookup_table_entry *entry, void *ignore);
+extern int lte_zero_out_refcnt(struct lookup_table_entry *entry, void *ignore);
+extern int lte_zero_real_refcnt(struct lookup_table_entry *entry, void *ignore);
+extern int lte_free_extracted_file(struct lookup_table_entry *lte, void *ignone);
 
 extern void print_lookup_table_entry(const struct lookup_table_entry *entry);