Parse capture configuration file in library
[wimlib] / include / wimlib / capture.h
1 #ifndef _WIMLIB_CAPTURE_H
2 #define _WIMLIB_CAPTURE_H
3
4 #include "wimlib.h"
5 #include "wimlib/inode_table.h"
6 #include "wimlib/list.h"
7 #include "wimlib/security.h"
8 #include "wimlib/textfile.h"
9 #include "wimlib/util.h"
10
11 struct wim_lookup_table;
12 struct wim_dentry;
13 struct wim_inode;
14
15 struct capture_config {
16         struct string_set exclusion_pats;
17         struct string_set exclusion_exception_pats;
18         tchar *prefix;
19         size_t prefix_num_tchars;
20         tchar *buf;
21 };
22
23 /* Common parameters to implementations of building an in-memory dentry tree
24  * from an on-disk directory structure. */
25 struct add_image_params {
26         /* Pointer to the lookup table of the WIM.  */
27         struct wim_lookup_table *lookup_table;
28
29         /* List of streams that have been added so far, but without their SHA1
30          * message digests being calculated (as a shortcut).  */
31         struct list_head *unhashed_streams;
32
33         /* Hash table of inodes that have been captured for this tree so far. */
34         struct wim_inode_table inode_table;
35
36         /* The set of security descriptors that have been captured for this
37          * image so far. */
38         struct wim_sd_set sd_set;
39
40         /* Pointer to the capture configuration.  */
41         struct capture_config *config;
42
43         /* Flags that affect the capture operation (WIMLIB_ADD_FLAG_*) */
44         int add_flags;
45
46         /* Extra argument; set to point to a pointer to the ntfs_volume for
47          * libntfs-3g capture.  */
48         void *extra_arg;
49
50         u64 capture_root_ino;
51         u64 capture_root_dev;
52
53         /* If non-NULL, the user-supplied progress function. */
54         wimlib_progress_func_t progress_func;
55
56         /* Progress data.  */
57         union wimlib_progress_info progress;
58 };
59
60
61 /* capture_common.c */
62
63 extern void
64 do_capture_progress(struct add_image_params *params, int status,
65                     const struct wim_inode *inode);
66
67 extern int
68 do_read_capture_config_file(const tchar *config_file, tchar *buf, size_t buflen,
69                             struct capture_config *config);
70
71 extern void
72 destroy_capture_config(struct capture_config *config);
73
74 extern bool
75 exclude_path(const tchar *path, size_t path_len,
76              const struct capture_config *config,
77              bool exclude_prefix);
78
79
80 #ifdef WITH_NTFS_3G
81 /* ntfs-3g_capture.c */
82 extern int
83 build_dentry_tree_ntfs(struct wim_dentry **root_p,
84                        const tchar *device,
85                        struct add_image_params *params);
86 #endif
87
88 #ifdef __WIN32__
89 /* win32_capture.c */
90 extern int
91 win32_build_dentry_tree(struct wim_dentry **root_ret,
92                         const tchar *root_disk_path,
93                         struct add_image_params *params);
94 #else
95 /* unix_capture.c */
96 extern int
97 unix_build_dentry_tree(struct wim_dentry **root_ret,
98                        const tchar *root_disk_path,
99                        struct add_image_params *params);
100 #endif
101
102 #define WIMLIB_ADD_FLAG_ROOT    0x80000000
103
104 #endif /* _WIMLIB_CAPTURE_H */