1 #ifndef _WIMLIB_CAPTURE_H
2 #define _WIMLIB_CAPTURE_H
5 #include "wimlib/inode_table.h"
6 #include "wimlib/list.h"
7 #include "wimlib/progress.h"
8 #include "wimlib/security.h"
9 #include "wimlib/textfile.h"
10 #include "wimlib/util.h"
12 struct wim_lookup_table;
16 struct capture_config {
17 struct string_set exclusion_pats;
18 struct string_set exclusion_exception_pats;
22 /* Common parameters to implementations of building an in-memory dentry tree
23 * from an on-disk directory structure. */
24 struct capture_params {
25 /* Pointer to the lookup table of the WIM. */
26 struct wim_lookup_table *lookup_table;
28 /* List of streams that have been added so far, but without their SHA1
29 * message digests being calculated (as a shortcut). */
30 struct list_head *unhashed_streams;
32 /* Hash table of inodes that have been captured for this tree so far. */
33 struct wim_inode_table *inode_table;
35 /* The set of security descriptors that have been captured for this
37 struct wim_sd_set *sd_set;
39 /* Pointer to the capture configuration. */
40 struct capture_config *config;
42 /* Flags that affect the capture operation (WIMLIB_ADD_FLAG_*) */
45 /* Extra argument; set to point to a pointer to the ntfs_volume for
46 * libntfs-3g capture. */
49 /* If non-NULL, the user-supplied progress function. */
50 wimlib_progress_func_t progfunc;
54 union wimlib_progress_info progress;
56 /* The capture implementation must set this to the number of characters
57 * that try_exclude() will strip from the path before testing exclusion
58 * patterns from the capture configuration file. */
59 size_t capture_root_nchars;
61 /* Can be used by the capture implementation. */
66 /* capture_common.c */
69 do_capture_progress(struct capture_params *params, int status,
70 const struct wim_inode *inode);
73 mangle_pat(tchar *pat, const tchar *path, unsigned long line_no);
76 read_capture_config(const tchar *config_file, const void *buf,
77 size_t bufsize, struct capture_config *config);
80 destroy_capture_config(struct capture_config *config);
83 match_pattern_list(const tchar *path, size_t path_nchars,
84 const struct string_set *list);
87 try_exclude(const tchar *full_path, size_t full_path_nchars,
88 const struct capture_params *params);
90 typedef int (*capture_tree_t)(struct wim_dentry **, const tchar *,
91 struct capture_params *);
94 /* ntfs-3g_capture.c */
96 build_dentry_tree_ntfs(struct wim_dentry **root_p,
98 struct capture_params *params);
102 /* win32_capture.c */
104 win32_build_dentry_tree(struct wim_dentry **root_ret,
105 const tchar *root_disk_path,
106 struct capture_params *params);
107 #define platform_default_capture_tree win32_build_dentry_tree
111 unix_build_dentry_tree(struct wim_dentry **root_ret,
112 const tchar *root_disk_path,
113 struct capture_params *params);
114 #define platform_default_capture_tree unix_build_dentry_tree
117 #define WIMLIB_ADD_FLAG_ROOT 0x80000000
120 report_capture_error(struct capture_params *params, int error_code,
123 return report_error(params->progfunc, params->progctx, error_code, path);
126 #endif /* _WIMLIB_CAPTURE_H */