X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Fcapture.h;h=e41e1b0f2ce3e66d0dd91a01d5b200fdf82abd56;hp=aea3e3c9dfd8cd163793034a9857bdcf5b2c8e99;hb=b82856cb22783df0e19990eb68d3694753f52220;hpb=269f10a27c62027d48c0ba58f164d20e3bf3cf85 diff --git a/include/wimlib/capture.h b/include/wimlib/capture.h index aea3e3c9..e41e1b0f 100644 --- a/include/wimlib/capture.h +++ b/include/wimlib/capture.h @@ -4,31 +4,30 @@ #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" -struct wim_lookup_table; +struct blob_table; struct wim_dentry; struct wim_inode; struct capture_config { struct string_set exclusion_pats; struct string_set exclusion_exception_pats; - tchar *prefix; - size_t prefix_num_tchars; 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. */ - struct wim_lookup_table *lookup_table; +struct capture_params { + /* Pointer to the blob table of the WIM. */ + struct blob_table *blob_table; - /* List of streams that have been added so far, but without their SHA1 + /* List of blobs that have been added so far, but without their SHA-1 * message digests being calculated (as a shortcut). */ - struct list_head *unhashed_streams; + struct list_head *unhashed_blobs; /* Hash table of inodes that have been captured for this tree so far. */ struct wim_inode_table *inode_table; @@ -43,57 +42,56 @@ struct add_image_params { /* Flags that affect the capture operation (WIMLIB_ADD_FLAG_*) */ int add_flags; - /* 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; + 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; +}; /* 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); extern bool -match_pattern(const tchar *path, - const tchar *path_basename, - const struct string_set *list); - -extern bool -exclude_path(const tchar *path, size_t path_len, - const struct capture_config *config, - bool exclude_prefix); +match_pattern_list(const tchar *path, size_t path_nchars, + const struct string_set *list); +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__ @@ -101,17 +99,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 */