#include "wimlib/win32_common.h"
#include "wimlib/apply.h"
-#include "wimlib/capture.h"
+#include "wimlib/capture.h" /* for mangle_pat() */
#include "wimlib/dentry.h"
#include "wimlib/error.h"
#include "wimlib/lookup_table.h"
-#include "wimlib/paths.h"
#include "wimlib/resource.h"
#include "wimlib/textfile.h"
#include "wimlib/xml.h"
+#include "wimlib/wildcard.h"
#include "wimlib/wim.h"
#include "wimlib/wimboot.h"
LOAD_TEXT_FILE_REMOVE_QUOTES |
LOAD_TEXT_FILE_NO_WARNINGS,
mangle_pat);
+ BUILD_BUG_ON(OS_PREFERRED_PATH_SEPARATOR != WIM_PATH_SEPARATOR);
FREE(buf);
if (ret) {
FREE(s);
{
struct string_set *pats;
const tchar *path;
+ size_t path_nchars;
pats = get_private_data(ctx)->prepopulate_pats;
- if (!pats)
+ if (!pats || !pats->num_strings)
return false;
+
path = dentry_full_path(dentry);
if (!path)
return false;
- return match_pattern(path, path_basename(path), pats);
+ path_nchars = tstrlen(path);
+
+ for (size_t i = 0; i < pats->num_strings; i++)
+ if (match_path(path, path_nchars, pats->strings[i],
+ OS_PREFERRED_PATH_SEPARATOR, true))
+ return true;
+
+ return false;
}
static int
&& lte
&& lte->resource_location == RESOURCE_IN_WIM
&& lte->rspec->wim == ctx->wim
- && lte->size == lte->rspec->uncompressed_size
- && !in_prepopulate_list(dentry, ctx))
+ && lte->size == lte->rspec->uncompressed_size)
{
- const struct win32_apply_private_data *dat;
+ if (in_prepopulate_list(dentry, ctx)) {
+ if (ctx->progress_func) {
+ union wimlib_progress_info info;
- dat = get_private_data(ctx);
- return wimboot_set_pointer(file.path, lte,
- dat->data_source_id,
- dat->wim_lookup_table_hash,
- dat->wof_running);
+ info.wimboot_exclude.path_in_wim = dentry->_full_path;
+ info.wimboot_exclude.extraction_path = file.path;
+
+ ctx->progress_func(WIMLIB_PROGRESS_MSG_WIMBOOT_EXCLUDE,
+ &info);
+ }
+ } else {
+ const struct win32_apply_private_data *dat;
+
+ dat = get_private_data(ctx);
+ return wimboot_set_pointer(file.path, lte,
+ dat->data_source_id,
+ dat->wim_lookup_table_hash,
+ dat->wof_running);
+ }
}
return win32_extract_stream(file.path, NULL, 0, lte, ctx);