]> wimlib.net Git - wimlib/blobdiff - include/wimlib/capture.h
LCP-interval tree matchfinder improvements
[wimlib] / include / wimlib / capture.h
index 8d79542f1a4073eff0f3d71ccaeb0c9615957283..ae2640a78ce6b9cded698c11773469f1e509fce0 100644 (file)
@@ -4,6 +4,7 @@
 #include "wimlib.h"
 #include "wimlib/inode_table.h"
 #include "wimlib/list.h"
+#include "wimlib/progress.h"
 #include "wimlib/security.h"
 #include "wimlib/textfile.h"
 #include "wimlib/util.h"
@@ -20,7 +21,7 @@ struct capture_config {
 
 /* Common parameters to implementations of building an in-memory dentry tree
  * from an on-disk directory structure. */
-struct add_image_params {
+struct capture_params {
        /* Pointer to the lookup table of the WIM.  */
        struct wim_lookup_table *lookup_table;
 
@@ -45,32 +46,35 @@ struct add_image_params {
         * libntfs-3g capture.  */
        void *extra_arg;
 
-
        /* 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;
 
+       /* The capture implementation must set this to the number of characters
+        * that try_exclude() will strip from the path before testing exclusion
+        * patterns from the capture configuration file.  */
+       size_t capture_root_nchars;
+
        /* 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
-do_capture_progress(struct add_image_params *params, int status,
+extern int
+do_capture_progress(struct capture_params *params, int status,
                    const struct wim_inode *inode);
 
 extern int
 mangle_pat(tchar *pat, const tchar *path, unsigned long line_no);
 
 extern int
-do_read_capture_config_file(const tchar *config_file, const void *buf,
-                           size_t bufsize, struct capture_config *config);
+read_capture_config(const tchar *config_file, const void *buf,
+                   size_t bufsize, struct capture_config *config);
 
 extern void
 destroy_capture_config(struct capture_config *config);
@@ -79,19 +83,19 @@ extern bool
 match_pattern_list(const tchar *path, size_t path_nchars,
                   const struct string_set *list);
 
-extern bool
-exclude_path(const tchar *path, size_t path_len,
-            const struct capture_config *config);
+extern int
+try_exclude(const tchar *full_path, size_t full_path_nchars,
+           const struct capture_params *params);
 
 typedef int (*capture_tree_t)(struct wim_dentry **, const tchar *,
-                             struct add_image_params *);
+                             struct capture_params *);
 
 #ifdef WITH_NTFS_3G
 /* ntfs-3g_capture.c */
 extern int
 build_dentry_tree_ntfs(struct wim_dentry **root_p,
                       const tchar *device,
-                      struct add_image_params *params);
+                      struct capture_params *params);
 #endif
 
 #ifdef __WIN32__
@@ -99,17 +103,24 @@ build_dentry_tree_ntfs(struct wim_dentry **root_p,
 extern int
 win32_build_dentry_tree(struct wim_dentry **root_ret,
                        const tchar *root_disk_path,
-                       struct add_image_params *params);
+                       struct capture_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);
+                      struct capture_params *params);
 #define platform_default_capture_tree unix_build_dentry_tree
 #endif
 
 #define WIMLIB_ADD_FLAG_ROOT   0x80000000
 
+static inline int
+report_capture_error(struct capture_params *params, int error_code,
+                    const tchar *path)
+{
+       return report_error(params->progfunc, params->progctx, error_code, path);
+}
+
 #endif /* _WIMLIB_CAPTURE_H */