static int file_writable(const char *path)
{
int ret;
- ret = access(path, F_OK | W_OK);
+ ret = access(path, W_OK);
if (ret != 0)
imagex_error_with_errno("Can't modify `%s'", path);
return ret;
info->write_streams.completed_bytes >> 20,
info->write_streams.total_bytes >> 20,
percent_done);
- if (info->write_streams.completed_bytes == info->write_streams.total_bytes)
+ if (info->write_streams.completed_bytes >= info->write_streams.total_bytes)
putchar('\n');
break;
case WIMLIB_PROGRESS_MSG_SCAN_BEGIN:
"NTFS volume" : "directory"),
info->extract.target);
break;
- case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END:
- printf("Done applying WIM image.\n");
- if (info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) {
- printf("Unmounting NTFS volume `%s'...\n",
- info->extract.target);
- }
- break;
/*case WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN:*/
/*printf("Applying directory structure to %s\n",*/
/*info->extract.target);*/
info->extract.completed_bytes >> 20,
info->extract.total_bytes >> 20,
percent_done);
- if (info->extract.completed_bytes == info->extract.total_bytes)
+ if (info->extract.completed_bytes >= info->extract.total_bytes)
putchar('\n');
break;
case WIMLIB_PROGRESS_MSG_EXTRACT_DENTRY:
puts(info->extract.cur_path);
break;
+ case WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS:
+ printf("Setting timestamps on all extracted files...\n");
+ break;
+ case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END:
+ if (info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) {
+ printf("Unmounting NTFS volume `%s'...\n",
+ info->extract.target);
+ }
+ break;
case WIMLIB_PROGRESS_MSG_JOIN_STREAMS:
percent_done = TO_PERCENT(info->join.completed_bytes,
info->join.total_bytes);
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");
out:
wimlib_free(w);
if (additional_swms) {
ret = file_writable(dest_wimfile);
if (ret != 0)
- return ret;
+ goto out;
dest_ctype = wimlib_get_compression_type(dest_w);
if (compression_type_specified
if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
ret = file_writable(wimfile);
if (ret != 0)
- return ret;
+ goto out;
}
ret = wimlib_mount_image(w, image, dir, mount_flags, additional_swms,
argv++;
wimlib_set_print_errors(true);
+ ret = wimlib_global_init();
+ if (ret)
+ goto out;
for_imagex_command(cmd) {
if (strcmp(cmd->name, *argv) == 0) {
ret = cmd->func(argc, argv);
- if (ret > 0) {
- imagex_error("Exiting with error code %d:\n"
- " %s.", ret,
- wimlib_get_error_string(ret));
- if (ret == WIMLIB_ERR_NTFS_3G)
- imagex_error_with_errno("errno");
- }
- return ret;
+ goto out;
}
}
imagex_error("Unrecognized command: `%s'", argv[0]);
usage_all();
return 1;
+out:
+ if (ret > 0) {
+ imagex_error("Exiting with error code %d:\n"
+ " %s.", ret,
+ wimlib_get_error_string(ret));
+ if (ret == WIMLIB_ERR_NTFS_3G && errno != 0)
+ imagex_error_with_errno("errno");
+ }
+ wimlib_global_cleanup();
+ return ret;
}