#include <ctype.h>
#include <errno.h>
#include <getopt.h>
-#include <glob.h>
+
#include <inttypes.h>
#include <libgen.h>
#include <limits.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <locale.h>
#ifdef HAVE_ALLOCA_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;
}
const struct imagex_command *cmd;
int ret;
+ setlocale(LC_ALL, "");
+
if (argc < 2) {
imagex_error("No command specified");
usage_all();
/* The user may like to see more informative error messages. */
wimlib_set_print_errors(true);
- /* Calling wimlib_global_init() is not strictly necessary because
- * 'imagex' is single-threaded. */
+ /* Do any initializations that the library needs */
ret = wimlib_global_init();
if (ret)
goto out;
if (ret == WIMLIB_ERR_NTFS_3G && errno != 0)
imagex_error_with_errno("errno");
}
- /* Calling wimlib_global_cleanup() is not strictly necessary because the
- * process is exiting anyway. */
+
+ /* Make the library free any resources it's holding (not strictly
+ * necessary because the process is ending anyway). */
wimlib_global_cleanup();
return ret;
}