X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwim.c;h=ff4ac29be3e53b7c3d981924ee8f452be0b1dcdc;hb=b5b9681794d1f5f13350e3567f6f6e74f5c779cf;hp=2d788b07f40be7aab418b4b2cfda078eccb21d45;hpb=57b76fd45cccd09aa1276c65a0097bdc69bd367f;p=wimlib diff --git a/src/wim.c b/src/wim.c index 2d788b07..ff4ac29b 100644 --- a/src/wim.c +++ b/src/wim.c @@ -512,10 +512,8 @@ wimlib_set_wim_info(WIMStruct *wim, const struct wimlib_wim_info *info, int whic if (ret) return ret; - if (which & WIMLIB_CHANGE_GUID) { + if (which & WIMLIB_CHANGE_GUID) memcpy(wim->hdr.guid, info->guid, WIM_GUID_LEN); - wim->guid_set_explicitly = 1; - } if (which & WIMLIB_CHANGE_BOOT_INDEX) { if (info->boot_index > wim->hdr.image_count) { @@ -624,6 +622,15 @@ wimlib_set_output_pack_chunk_size(WIMStruct *wim, uint32_t chunk_size) &wim->out_pack_chunk_size); } +WIMLIBAPI void +wimlib_register_progress_function(WIMStruct *wim, + wimlib_progress_func_t progfunc, + void *progctx) +{ + wim->progfunc = progfunc; + wim->progctx = progctx; +} + static int open_wim_file(const tchar *filename, struct filedes *fd_ret) { @@ -643,8 +650,7 @@ open_wim_file(const tchar *filename, struct filedes *fd_ret) * lookup table, and optionally checks the integrity. */ static int -begin_read(WIMStruct *wim, const void *wim_filename_or_fd, - int open_flags, wimlib_progress_func_t progress_func) +begin_read(WIMStruct *wim, const void *wim_filename_or_fd, int open_flags) { int ret; int xml_num_images; @@ -745,7 +751,7 @@ begin_read(WIMStruct *wim, const void *wim_filename_or_fd, } if (open_flags & WIMLIB_OPEN_FLAG_CHECK_INTEGRITY) { - ret = check_wim_integrity(wim, progress_func); + ret = check_wim_integrity(wim); if (ret == WIM_INTEGRITY_NONEXISTENT) { WARNING("No integrity information for `%"TS"'; skipping " "integrity check.", wimfile); @@ -793,7 +799,8 @@ begin_read(WIMStruct *wim, const void *wim_filename_or_fd, int open_wim_as_WIMStruct(const void *wim_filename_or_fd, int open_flags, - WIMStruct **wim_ret, wimlib_progress_func_t progress_func) + WIMStruct **wim_ret, + wimlib_progress_func_t progfunc, void *progctx) { WIMStruct *wim; int ret; @@ -812,7 +819,10 @@ open_wim_as_WIMStruct(const void *wim_filename_or_fd, int open_flags, if (wim == NULL) return WIMLIB_ERR_NOMEM; - ret = begin_read(wim, wim_filename_or_fd, open_flags, progress_func); + wim->progfunc = progfunc; + wim->progctx = progctx; + + ret = begin_read(wim, wim_filename_or_fd, open_flags); if (ret) { wimlib_free(wim); return ret; @@ -825,8 +835,9 @@ open_wim_as_WIMStruct(const void *wim_filename_or_fd, int open_flags, /* API function documented in wimlib.h */ WIMLIBAPI int -wimlib_open_wim(const tchar *wimfile, int open_flags, - WIMStruct **wim_ret, wimlib_progress_func_t progress_func) +wimlib_open_wim_with_progress(const tchar *wimfile, int open_flags, + WIMStruct **wim_ret, + wimlib_progress_func_t progfunc, void *progctx) { if (open_flags & ~(WIMLIB_OPEN_FLAG_CHECK_INTEGRITY | WIMLIB_OPEN_FLAG_ERROR_IF_SPLIT | @@ -834,7 +845,15 @@ wimlib_open_wim(const tchar *wimfile, int open_flags, return WIMLIB_ERR_INVALID_PARAM; return open_wim_as_WIMStruct(wimfile, open_flags, wim_ret, - progress_func); + progfunc, progctx); +} + +/* API function documented in wimlib.h */ +WIMLIBAPI int +wimlib_open_wim(const tchar *wimfile, int open_flags, WIMStruct **wim_ret) +{ + return wimlib_open_wim_with_progress(wimfile, open_flags, wim_ret, + NULL, NULL); } /* Checksum all streams that are unhashed (other than the metadata streams),