X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwim.c;h=fc1cfef702816e0a0a71122a5cfbd724747c3e96;hb=43888a796d031a3382c3477557ef248b10c973de;hp=d885b7970988f6d6412cf1686b4f32c3d5c9c155;hpb=2850f8933244f6c63f608eec612ad804e01072e1;p=wimlib diff --git a/src/wim.c b/src/wim.c index d885b797..fc1cfef7 100644 --- a/src/wim.c +++ b/src/wim.c @@ -40,6 +40,7 @@ #include "wimlib/xml.h" #include "wimlib/compressor_ops.h" #include "wimlib/decompressor_ops.h" +#include "wimlib/version.h" #ifdef __WIN32__ # include "wimlib/win32.h" /* for realpath() replacement */ @@ -223,6 +224,8 @@ out_free: return ret; } +/* Load the metadata for the specified WIM image into memory and set it as the + * WIMStruct's currently selected WIM image. */ int select_wim_image(WIMStruct *wim, int image) { @@ -252,8 +255,8 @@ select_wim_image(WIMStruct *wim, int image) return WIMLIB_ERR_METADATA_NOT_FOUND; } - /* If a valid image is currently selected, it can be freed if it is not - * modified. */ + /* If a valid image is currently selected, its metadata can be freed if + * it has not been modified. */ if (wim->current_image != WIMLIB_NO_IMAGE) { imd = wim_get_current_image_metadata(wim); if (!imd->modified) { @@ -392,6 +395,12 @@ wimlib_set_wim_info(WIMStruct *wim, const struct wimlib_wim_info *info, int whic { int ret; + if (which & ~(WIMLIB_CHANGE_READONLY_FLAG | + WIMLIB_CHANGE_GUID | + WIMLIB_CHANGE_BOOT_INDEX | + WIMLIB_CHANGE_RPFIX_FLAG)) + return WIMLIB_ERR_INVALID_PARAM; + if (which & WIMLIB_CHANGE_READONLY_FLAG) { if (info->is_marked_readonly) wim->hdr.flags |= WIM_HDR_FLAG_READONLY; @@ -721,7 +730,11 @@ WIMLIBAPI int wimlib_open_wim(const tchar *wimfile, int open_flags, WIMStruct **wim_ret, wimlib_progress_func_t progress_func) { - open_flags &= WIMLIB_OPEN_MASK_PUBLIC; + if (open_flags & ~(WIMLIB_OPEN_FLAG_CHECK_INTEGRITY | + WIMLIB_OPEN_FLAG_ERROR_IF_SPLIT | + WIMLIB_OPEN_FLAG_WRITE_ACCESS)) + return WIMLIB_ERR_INVALID_PARAM; + return open_wim_as_WIMStruct(wimfile, open_flags, wim_ret, progress_func); } @@ -967,6 +980,13 @@ test_locale_ctype_utf8(void) #endif } +/* API function documented in wimlib.h */ +WIMLIBAPI u32 +wimlib_get_version(void) +{ + return WIMLIB_VERSION_CODE; +} + /* API function documented in wimlib.h */ WIMLIBAPI int wimlib_global_init(int init_flags) @@ -975,6 +995,15 @@ wimlib_global_init(int init_flags) if (already_inited) return 0; + + if (init_flags & ~(WIMLIB_INIT_FLAG_ASSUME_UTF8 | + WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES | + WIMLIB_INIT_FLAG_STRICT_CAPTURE_PRIVILEGES | + WIMLIB_INIT_FLAG_STRICT_APPLY_PRIVILEGES | + WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE | + WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)) + return WIMLIB_ERR_INVALID_PARAM; + libxml_global_init(); if (!(init_flags & WIMLIB_INIT_FLAG_ASSUME_UTF8)) { wimlib_mbs_is_utf8 = test_locale_ctype_utf8();