#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 <fnmatch.h>
-#endif
#include <string.h>
-
static int
canonicalize_pattern(const tchar *pat, tchar **canonical_pat_ret)
{
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:
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);