X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fcapture.h;h=7ff82db233d4c2f4b0dba989c1a8955cbb71504f;hb=e20f8057569b65f75994e8d88c7a0be80a749888;hp=8b67c949c4b2870fb5c01776b3fda78b16e0cf78;hpb=8d6441232a9080d8f7d9db839c4c3e17349c4a77;p=wimlib diff --git a/include/wimlib/capture.h b/include/wimlib/capture.h index 8b67c949..7ff82db2 100644 --- a/include/wimlib/capture.h +++ b/include/wimlib/capture.h @@ -2,42 +2,25 @@ #define _WIMLIB_CAPTURE_H #include "wimlib.h" +#include "wimlib/inode_table.h" #include "wimlib/list.h" #include "wimlib/security.h" #include "wimlib/util.h" struct wim_lookup_table; struct wim_dentry; - -/* Hash table to find inodes, given an inode number (in the case of reading - * a WIM images), or both an inode number and a device number (in the case of - * capturing a WIM image). */ -struct wim_inode_table { - /* Fields for the hash table */ - struct hlist_head *array; - u64 num_entries; - u64 capacity; - - /* - * Linked list of "extra" inodes. These may be: - * - * - inodes with link count 1, which are all allowed to have 0 for their - * inode number, meaning we cannot insert them into the hash table. - * - * - Groups we create ourselves by splitting a nominal inode due to - * inconsistencies in the dentries. These inodes will share an inode - * number with some other inode until assign_inode_numbers() is - * called. - */ - struct list_head extra_inodes; -}; +struct wim_inode; /* Common parameters to implementations of building an in-memory dentry tree * from an on-disk directory structure. */ struct add_image_params { - /* Pointer to the lookup table of the WIM. */ + /* Pointer to the lookup table of the WIM. */ struct wim_lookup_table *lookup_table; + /* List of streams that have been added so far, but without their SHA1 + * message digests being calculated (as a shortcut). */ + struct list_head *unhashed_streams; + /* Hash table of inodes that have been captured for this tree so far. */ struct wim_inode_table inode_table; @@ -52,20 +35,27 @@ struct add_image_params { /* Flags that affect the capture operation (WIMLIB_ADD_FLAG_*) */ int add_flags; - /* If non-NULL, the user-supplied progress function. */ - wimlib_progress_func_t progress_func; - /* Extra argument; set to point to a pointer to the ntfs_volume for * libntfs-3g capture. */ void *extra_arg; u64 capture_root_ino; u64 capture_root_dev; + + /* If non-NULL, the user-supplied progress function. */ + wimlib_progress_func_t progress_func; + + /* Progress data. */ + union wimlib_progress_info progress; }; /* capture_common.c */ +extern void +do_capture_progress(struct add_image_params *params, int status, + const struct wim_inode *inode); + extern bool exclude_path(const tchar *path, size_t path_len, const struct wimlib_capture_config *config, @@ -81,26 +71,6 @@ copy_and_canonicalize_capture_config(const struct wimlib_capture_config *config, extern void free_capture_config(struct wimlib_capture_config *config); -/* hardlink.c */ - -extern int -init_inode_table(struct wim_inode_table *table, size_t capacity); - -extern int -inode_table_new_dentry(struct wim_inode_table *table, const tchar *name, - u64 ino, u64 devno, bool noshare, - struct wim_dentry **dentry_ret); - -extern void -inode_table_prepare_inode_list(struct wim_inode_table *table, - struct list_head *head); - -static inline void -destroy_inode_table(struct wim_inode_table *table) -{ - FREE(table->array); -} - #ifdef WITH_NTFS_3G /* ntfs-3g_capture.c */