#include <ctype.h>
#include <errno.h>
#include <getopt.h>
-#include <glob.h>
+
#include <inttypes.h>
#include <libgen.h>
#include <limits.h>
#include <alloca.h>
#endif
+#ifdef __WIN32__
+# include "imagex-win32.h"
+#else
+# include <glob.h>
+#endif
+
#define ARRAY_LEN(array) (sizeof(array) / sizeof(array[0]))
#define for_opt(c, opts) while ((c = getopt_long_only(argc, (char**)argv, "", \
glob_t globbuf;
int ret;
+ /* Warning: glob() is replaced in Windows native builds */
ret = glob(swm_glob, GLOB_ERR | GLOB_NOSORT, NULL, &globbuf);
if (ret != 0) {
if (ret == GLOB_NOMATCH) {
}
}
+#ifdef __WIN32__
+ win32_acquire_restore_privileges();
+#endif
ret = wimlib_extract_image(w, image, target, extract_flags,
additional_swms, num_additional_swms,
imagex_progress_func);
if (ret == 0)
printf("Done applying WIM image.\n");
+#ifdef __WIN32__
+ win32_release_restore_privileges();
+#endif
out:
wimlib_free(w);
if (additional_swms) {
}
}
}
+#ifdef __WIN32__
+ win32_acquire_capture_privileges();
+#endif
ret = wimlib_add_image_multisource(w, capture_sources,
num_sources, name,
add_image_flags,
imagex_progress_func);
if (ret != 0)
- goto out;
+ goto out_release_privs;
cur_image = wimlib_get_num_images(w);
if (desc) {
ret = wimlib_set_image_descripton(w, cur_image, desc);
if (ret != 0)
- goto out;
+ goto out_release_privs;
}
if (flags_element) {
ret = wimlib_set_image_flags(w, cur_image, flags_element);
if (ret != 0)
- goto out;
+ goto out_release_privs;
}
if (cmd == APPEND) {
ret = wimlib_overwrite(w, write_flags, num_threads,
ret = 0;
if (ret != 0)
imagex_error("Failed to write the WIM file `%s'", wimfile);
+out_release_privs:
+#ifdef __WIN32__
+ win32_release_capture_privileges();
+#endif
out:
wimlib_free(w);
free(config_str);
wim_is_new = false;
/* Destination file exists. */
- if (!S_ISREG(stbuf.st_mode) && !S_ISLNK(stbuf.st_mode)) {
+
+ if (!S_ISREG(stbuf.st_mode)) {
imagex_error("`%s' is not a regular file",
- dest_wimfile);
+ dest_wimfile);
ret = -1;
goto out;
}