]> wimlib.net Git - wimlib/blobdiff - include/wimlib/scan.h
Various renamings from "capture" to "scan"
[wimlib] / include / wimlib / scan.h
diff --git a/include/wimlib/scan.h b/include/wimlib/scan.h
new file mode 100644 (file)
index 0000000..903f3d7
--- /dev/null
@@ -0,0 +1,132 @@
+#ifndef _WIMLIB_SCAN_H
+#define _WIMLIB_SCAN_H
+
+#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 blob_table;
+struct wim_dentry;
+struct wim_inode;
+
+struct capture_config {
+
+       /* List of path patterns to exclude  */
+       struct string_set exclusion_pats;
+
+       /* List of path patterns to include, overriding exclusion_pats  */
+       struct string_set exclusion_exception_pats;
+
+       void *buf;
+};
+
+/* Scan parameters: common parameters to implementations of building an
+ * in-memory dentry tree from an external directory structure.  */
+struct scan_params {
+
+       /* The blob table within which any new blobs discovered during the scan
+        * will be deduplicated.  */
+       struct blob_table *blob_table;
+
+       /* List of new blobs that have been discovered without their SHA-1
+        * message digests having been calculated (as a shortcut).  */
+       struct list_head *unhashed_blobs;
+
+       /* Map from (inode number, device number) pair to inode for new inodes
+        * that have been discovered so far.  */
+       struct wim_inode_table *inode_table;
+
+       /* The set of unique security descriptors to which each newly
+        * discovered, unique security descriptor will be added.  */
+       struct wim_sd_set *sd_set;
+
+       /* The capture configuration in effect, or NULL if none.  */
+       struct capture_config *config;
+
+       /* Flags that affect the scan operation (WIMLIB_ADD_FLAG_*) */
+       int add_flags;
+
+       /* If non-NULL, the user-supplied progress function. */
+       wimlib_progress_func_t progfunc;
+       void *progctx;
+
+       /* Progress data.  */
+       union wimlib_progress_info progress;
+
+       /* Before calling try_exclude(), the scan implementation must set this
+        * to the number of characters that try_exclude() will strip from the
+        * path when testing exclusion patterns.  */
+       size_t capture_root_nchars;
+
+       /* Can be used by the scan implementation.  */
+       u64 capture_root_ino;
+       u64 capture_root_dev;
+};
+
+/* scan.c */
+
+extern int
+do_scan_progress(struct scan_params *params, int status,
+                const struct wim_inode *inode);
+
+extern int
+mangle_pat(tchar *pat, const tchar *path, unsigned long line_no);
+
+extern int
+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_list(const tchar *path, const struct string_set *list);
+
+extern int
+try_exclude(const tchar *full_path, const struct scan_params *params);
+
+typedef int (*scan_tree_t)(struct wim_dentry **, const tchar *,
+                          struct scan_params *);
+
+#ifdef WITH_NTFS_3G
+/* ntfs-3g_capture.c */
+extern int
+ntfs_3g_build_dentry_tree(struct wim_dentry **root_ret,
+                         const tchar *device, struct scan_params *params);
+#endif
+
+#ifdef __WIN32__
+/* win32_capture.c */
+extern int
+win32_build_dentry_tree(struct wim_dentry **root_ret,
+                       const tchar *root_disk_path,
+                       struct scan_params *params);
+#define platform_default_scan_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 scan_params *params);
+#define platform_default_scan_tree unix_build_dentry_tree
+#endif
+
+#define WIMLIB_ADD_FLAG_ROOT   0x80000000
+
+static inline int
+report_scan_error(struct scan_params *params, int error_code, const tchar *path)
+{
+       return report_error(params->progfunc, params->progctx, error_code, path);
+}
+
+extern bool
+should_ignore_filename(const tchar *name, int name_nchars);
+
+extern void
+attach_scanned_tree(struct wim_dentry *parent, struct wim_dentry *child,
+                   struct blob_table *blob_table);
+
+#endif /* _WIMLIB_SCAN_H */