]> wimlib.net Git - wimlib/blobdiff - include/wimlib/capture.h
Update progress functions
[wimlib] / include / wimlib / capture.h
index 9f9e4617fb44111b3fdcc3f2bfffdb84a7072666..58e0eac3a80439675cabad9d5cd209c903c9bada 100644 (file)
@@ -2,53 +2,41 @@
 #define _WIMLIB_CAPTURE_H
 
 #include "wimlib.h"
+#include "wimlib/inode_table.h"
 #include "wimlib/list.h"
 #include "wimlib/security.h"
+#include "wimlib/textfile.h"
 #include "wimlib/util.h"
 
 struct wim_lookup_table;
 struct wim_dentry;
 struct wim_inode;
 
-/* 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 capture_config {
+       struct string_set exclusion_pats;
+       struct string_set exclusion_exception_pats;
+       void *buf;
 };
 
 /* 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;
+       struct wim_inode_table *inode_table;
 
        /* The set of security descriptors that have been captured for this
         * image so far. */
-       struct wim_sd_set sd_set;
+       struct wim_sd_set *sd_set;
 
-       /* Pointer to the capture configuration, which indicates whether any
-        * files should be excluded from capture or not. */
-       struct wimlib_capture_config *config;
+       /* Pointer to the capture configuration.  */
+       struct capture_config *config;
 
        /* Flags that affect the capture operation (WIMLIB_ADD_FLAG_*) */
        int add_flags;
@@ -57,58 +45,45 @@ struct add_image_params {
         * 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;
+       wimlib_progress_func_t progfunc;
+       void *progctx;
 
        /* Progress data.  */
        union wimlib_progress_info progress;
-};
 
+       /* Can be used by the capture implementation.  */
+       u64 capture_root_ino;
+       u64 capture_root_dev;
+       size_t capture_root_nchars;
+};
 
 /* capture_common.c */
 
-extern void
+extern int
 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,
-            bool exclude_prefix);
-
-extern struct wimlib_capture_config *
-copy_capture_config(const struct wimlib_capture_config *config);
-
-extern int
-copy_and_canonicalize_capture_config(const struct wimlib_capture_config *config,
-                                    struct wimlib_capture_config **config_copy_ret);
-
-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);
+mangle_pat(tchar *pat, const tchar *path, unsigned long line_no);
 
 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);
+read_capture_config(const tchar *config_file, const void *buf,
+                   size_t bufsize, struct capture_config *config);
 
 extern void
-inode_table_prepare_inode_list(struct wim_inode_table *table,
-                              struct list_head *head);
+destroy_capture_config(struct capture_config *config);
 
-static inline void
-destroy_inode_table(struct wim_inode_table *table)
-{
-       FREE(table->array);
-}
+extern bool
+match_pattern_list(const tchar *path, size_t path_nchars,
+                  const struct string_set *list);
+
+extern bool
+should_exclude_path(const tchar *path, size_t path_nchars,
+                   const struct capture_config *config);
 
+typedef int (*capture_tree_t)(struct wim_dentry **, const tchar *,
+                             struct add_image_params *);
 
 #ifdef WITH_NTFS_3G
 /* ntfs-3g_capture.c */
@@ -124,12 +99,14 @@ extern int
 win32_build_dentry_tree(struct wim_dentry **root_ret,
                        const tchar *root_disk_path,
                        struct add_image_params *params);
+#define platform_default_capture_tree win32_build_dentry_tree
 #else
 /* unix_capture.c */
 extern int
 unix_build_dentry_tree(struct wim_dentry **root_ret,
                       const tchar *root_disk_path,
                       struct add_image_params *params);
+#define platform_default_capture_tree unix_build_dentry_tree
 #endif
 
 #define WIMLIB_ADD_FLAG_ROOT   0x80000000