X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fcapture_common.c;h=419786120f746c48a6962e44e894addc9ff31cb6;hp=967d58eb53efc7987dbf84278a2f6c3b9b24929f;hb=335e7f84a6ea46ea13e333c7294be0594fc859ca;hpb=0ab938cc9554f3d5c6835c14b9177823e0e9b7bb diff --git a/src/capture_common.c b/src/capture_common.c index 967d58eb..41978612 100644 --- a/src/capture_common.c +++ b/src/capture_common.c @@ -27,17 +27,14 @@ #include "wimlib/assert.h" #include "wimlib/capture.h" +#include "wimlib/dentry.h" #include "wimlib/error.h" +#include "wimlib/lookup_table.h" #include "wimlib/paths.h" +#include "wimlib/wildcard.h" -#ifdef __WIN32__ -# include "wimlib/win32.h" /* for fnmatch() equivalent */ -#else -# include -#endif #include - static int canonicalize_pattern(const tchar *pat, tchar **canonical_pat_ret) { @@ -167,23 +164,21 @@ match_pattern(const tchar *path, * replacement function in win32.c. */ if (fnmatch(pat, string, FNM_PATHNAME | FNM_NOESCAPE #ifdef FNM_CASEFOLD - | FNM_CASEFOLD + | FNM_CASEFOLD #endif ) == 0) { DEBUG("\"%"TS"\" matches the pattern \"%"TS"\"", string, pat); return true; - } else { - DEBUG2("\"%"TS"\" does not match the pattern \"%"TS"\"", - string, pat); } } return false; } void -do_capture_progress(struct add_image_params *params, int status) +do_capture_progress(struct add_image_params *params, int status, + const struct wim_inode *inode) { switch (status) { case WIMLIB_SCAN_DENTRY_OK: @@ -191,10 +186,23 @@ do_capture_progress(struct add_image_params *params, int status) return; case WIMLIB_SCAN_DENTRY_UNSUPPORTED: case WIMLIB_SCAN_DENTRY_EXCLUDED: + case WIMLIB_SCAN_DENTRY_EXCLUDED_SYMLINK: if (!(params->add_flags & WIMLIB_ADD_FLAG_EXCLUDE_VERBOSE)) return; } params->progress.scan.status = status; + if (status == WIMLIB_SCAN_DENTRY_OK && inode->i_nlink == 1) { + const struct wim_lookup_table_entry *lte; + for (unsigned i = 0; i <= inode->i_num_ads; i++) { + lte = inode_stream_lte_resolved(inode, i); + if (lte != NULL) + params->progress.scan.num_bytes_scanned += lte->size; + } + if (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) + params->progress.scan.num_dirs_scanned++; + else + params->progress.scan.num_nondirs_scanned++; + } if (params->progress_func) { params->progress_func(WIMLIB_PROGRESS_MSG_SCAN_DENTRY, ¶ms->progress);