X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwim.c;h=cf7965e7168ffa6c237e96d79e505da9d161ab56;hp=2d788b07f40be7aab418b4b2cfda078eccb21d45;hb=b4f0ab9002559b774407fb692bcc7e83a6c82ab7;hpb=57b76fd45cccd09aa1276c65a0097bdc69bd367f diff --git a/src/wim.c b/src/wim.c index 2d788b07..cf7965e7 100644 --- a/src/wim.c +++ b/src/wim.c @@ -66,9 +66,7 @@ static u32 wim_default_pack_chunk_size(int ctype) { switch (ctype) { case WIMLIB_COMPRESSION_TYPE_LZMS: - /* Note: WIMGAPI uses 1 << 26, but lower sizes are compatible. - * */ - return 1U << 25; /* 33554432 */ + return 1U << 26; /* 67108864 */ default: return 1U << 15; /* 32768 */ } @@ -328,8 +326,22 @@ new_image_metadata_array(unsigned num_images) } -/* Load the metadata for the specified WIM image into memory and set it as the - * WIMStruct's currently selected WIM image. */ +/* + * Load the metadata for the specified WIM image into memory and set it + * as the WIMStruct's currently selected image. + * + * @wim + * The WIMStruct for the WIM. + * @image + * The 1-based index of the image in the WIM to select. + * + * On success, 0 will be returned, wim->current_image will be set to + * @image, and wim_get_current_image_metadata() can be used to retrieve + * metadata information for the image. + * + * On failure, WIMLIB_ERR_INVALID_IMAGE, WIMLIB_ERR_METADATA_NOT_FOUND, + * or another error code will be returned. + */ int select_wim_image(WIMStruct *wim, int image) { @@ -512,10 +524,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) { @@ -539,8 +549,6 @@ static int set_out_ctype(int ctype, u8 *out_ctype_p) { switch (ctype) { - case WIMLIB_COMPRESSION_TYPE_INVALID: - break; case WIMLIB_COMPRESSION_TYPE_NONE: case WIMLIB_COMPRESSION_TYPE_LZX: case WIMLIB_COMPRESSION_TYPE_XPRESS: @@ -624,6 +632,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 +660,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 +761,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 +809,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 +829,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 +845,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 +855,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),