In MSYS2, clang emits many warnings like the following:
warning: redeclaration of 'wimlib_add_empty_image' should not add 'dllexport' attribute
The problem is that dllexport is used when defining the wimlib API
functions but not when declaring them. Fix this by using dllexport in
both places.
endif
libwim_la_CFLAGS = \
endif
libwim_la_CFLAGS = \
$(AM_CFLAGS) \
$(PTHREAD_CFLAGS) \
$(LIBNTFS_3G_CFLAGS) \
$(AM_CFLAGS) \
$(PTHREAD_CFLAGS) \
$(LIBNTFS_3G_CFLAGS) \
#include <stdint.h>
#include <time.h>
#include <stdint.h>
#include <time.h>
+#ifdef BUILDING_WIMLIB
+# ifdef _WIN32
+# define WIMLIBAPI __declspec(dllexport)
+# else
+# define WIMLIBAPI __attribute__((visibility("default")))
+# endif
+#else
+# define WIMLIBAPI
+#endif
+
/** @addtogroup G_general
* @{ */
/** @addtogroup G_general
* @{ */
* @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
* The WIM already contains an image with the requested name.
*/
* @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
* The WIM already contains an image with the requested name.
*/
wimlib_add_empty_image(WIMStruct *wim,
const wimlib_tchar *name,
int *new_idx_ret);
wimlib_add_empty_image(WIMStruct *wim,
const wimlib_tchar *name,
int *new_idx_ret);
* In addition, if ::WIMLIB_ADD_FLAG_VERBOSE is specified in @p add_flags, it
* will receive ::WIMLIB_PROGRESS_MSG_SCAN_DENTRY.
*/
* In addition, if ::WIMLIB_ADD_FLAG_VERBOSE is specified in @p add_flags, it
* will receive ::WIMLIB_PROGRESS_MSG_SCAN_DENTRY.
*/
wimlib_add_image(WIMStruct *wim,
const wimlib_tchar *source,
const wimlib_tchar *name,
wimlib_add_image(WIMStruct *wim,
const wimlib_tchar *source,
const wimlib_tchar *name,
* same as wimlib_add_image(). See the documentation for <b>wimcapture</b> for
* full details on how this mode works.
*/
* same as wimlib_add_image(). See the documentation for <b>wimcapture</b> for
* full details on how this mode works.
*/
wimlib_add_image_multisource(WIMStruct *wim,
const struct wimlib_capture_source *sources,
size_t num_sources,
wimlib_add_image_multisource(WIMStruct *wim,
const struct wimlib_capture_source *sources,
size_t num_sources,
* This just builds an appropriate ::wimlib_add_command and passes it to
* wimlib_update_image().
*/
* This just builds an appropriate ::wimlib_add_command and passes it to
* wimlib_update_image().
*/
wimlib_add_tree(WIMStruct *wim, int image,
const wimlib_tchar *fs_source_path,
const wimlib_tchar *wim_target_path, int add_flags);
wimlib_add_tree(WIMStruct *wim, int image,
const wimlib_tchar *fs_source_path,
const wimlib_tchar *wim_target_path, int add_flags);
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate a new ::WIMStruct.
*/
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate a new ::WIMStruct.
*/
wimlib_create_new_wim(enum wimlib_compression_type ctype, WIMStruct **wim_ret);
/**
wimlib_create_new_wim(enum wimlib_compression_type ctype, WIMStruct **wim_ret);
/**
* If this function fails when @p image was ::WIMLIB_ALL_IMAGES, then it's
* possible that some but not all of the images were deleted.
*/
* If this function fails when @p image was ::WIMLIB_ALL_IMAGES, then it's
* possible that some but not all of the images were deleted.
*/
wimlib_delete_image(WIMStruct *wim, int image);
/**
wimlib_delete_image(WIMStruct *wim, int image);
/**
* This just builds an appropriate ::wimlib_delete_command and passes it to
* wimlib_update_image().
*/
* This just builds an appropriate ::wimlib_delete_command and passes it to
* wimlib_update_image().
*/
wimlib_delete_path(WIMStruct *wim, int image,
const wimlib_tchar *path, int delete_flags);
wimlib_delete_path(WIMStruct *wim, int image,
const wimlib_tchar *path, int delete_flags);
* indicate failure (for different reasons) to read the metadata resource for an
* image in @p src_wim that needed to be exported.
*/
* indicate failure (for different reasons) to read the metadata resource for an
* image in @p src_wim that needed to be exported.
*/
wimlib_export_image(WIMStruct *src_wim, int src_image,
WIMStruct *dest_wim,
const wimlib_tchar *dest_name,
wimlib_export_image(WIMStruct *src_wim, int src_image,
WIMStruct *dest_wim,
const wimlib_tchar *dest_name,
* ::WIMLIB_PROGRESS_MSG_EXTRACT_METADATA messages, then
* ::WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END.
*/
* ::WIMLIB_PROGRESS_MSG_EXTRACT_METADATA messages, then
* ::WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END.
*/
wimlib_extract_image(WIMStruct *wim, int image,
const wimlib_tchar *target, int extract_flags);
wimlib_extract_image(WIMStruct *wim, int image,
const wimlib_tchar *target, int extract_flags);
* @retval ::WIMLIB_ERR_NOT_PIPABLE
* The WIM being piped over @p pipe_fd is a normal WIM, not a pipable WIM.
*/
* @retval ::WIMLIB_ERR_NOT_PIPABLE
* The WIM being piped over @p pipe_fd is a normal WIM, not a pipable WIM.
*/
wimlib_extract_image_from_pipe(int pipe_fd,
const wimlib_tchar *image_num_or_name,
const wimlib_tchar *target, int extract_flags);
wimlib_extract_image_from_pipe(int pipe_fd,
const wimlib_tchar *image_num_or_name,
const wimlib_tchar *target, int extract_flags);
* ::WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS, in addition to
* ::WIMLIB_PROGRESS_MSG_EXTRACT_SPWM_PART_BEGIN.
*/
* ::WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS, in addition to
* ::WIMLIB_PROGRESS_MSG_EXTRACT_SPWM_PART_BEGIN.
*/
wimlib_extract_image_from_pipe_with_progress(int pipe_fd,
const wimlib_tchar *image_num_or_name,
const wimlib_tchar *target,
wimlib_extract_image_from_pipe_with_progress(int pipe_fd,
const wimlib_tchar *image_num_or_name,
const wimlib_tchar *target,
* cannot read the path list file (e.g. ::WIMLIB_ERR_OPEN, ::WIMLIB_ERR_STAT,
* ::WIMLIB_ERR_READ).
*/
* cannot read the path list file (e.g. ::WIMLIB_ERR_OPEN, ::WIMLIB_ERR_STAT,
* ::WIMLIB_ERR_READ).
*/
wimlib_extract_pathlist(WIMStruct *wim, int image,
const wimlib_tchar *target,
const wimlib_tchar *path_list_file,
wimlib_extract_pathlist(WIMStruct *wim, int image,
const wimlib_tchar *target,
const wimlib_tchar *path_list_file,
* If a progress function is registered with @p wim, then it will receive
* ::WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS.
*/
* If a progress function is registered with @p wim, then it will receive
* ::WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS.
*/
wimlib_extract_paths(WIMStruct *wim,
int image,
const wimlib_tchar *target,
wimlib_extract_paths(WIMStruct *wim,
int image,
const wimlib_tchar *target,
* @retval ::WIMLIB_ERR_WRITE
* Failed to write the data to the requested file.
*/
* @retval ::WIMLIB_ERR_WRITE
* Failed to write the data to the requested file.
*/
wimlib_extract_xml_data(WIMStruct *wim, FILE *fp);
/**
wimlib_extract_xml_data(WIMStruct *wim, FILE *fp);
/**
* @param wim
* Pointer to the ::WIMStruct to release. If @c NULL, no action is taken.
*/
* @param wim
* Pointer to the ::WIMStruct to release. If @c NULL, no action is taken.
*/
wimlib_free(WIMStruct *wim);
/**
wimlib_free(WIMStruct *wim);
/**
* "None", "LZX", or "XPRESS". If the value was unrecognized, then
* the resulting string will be "Invalid".
*/
* "None", "LZX", or "XPRESS". If the value was unrecognized, then
* the resulting string will be "Invalid".
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_compression_type_string(enum wimlib_compression_type ctype);
/**
wimlib_get_compression_type_string(enum wimlib_compression_type ctype);
/**
* the value was unrecognized, then the resulting string will be "Unknown
* error".
*/
* the value was unrecognized, then the resulting string will be "Unknown
* error".
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_error_string(enum wimlib_error_code code);
/**
wimlib_get_error_string(enum wimlib_error_code code);
/**
* Get the description of the specified image. Equivalent to
* <tt>wimlib_get_image_property(wim, image, "DESCRIPTION")</tt>.
*/
* Get the description of the specified image. Equivalent to
* <tt>wimlib_get_image_property(wim, image, "DESCRIPTION")</tt>.
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_image_description(const WIMStruct *wim, int image);
/**
wimlib_get_image_description(const WIMStruct *wim, int image);
/**
* wimlib_get_image_name() will return an empty string if the image is unnamed
* whereas wimlib_get_image_property() may return @c NULL in that case.
*/
* wimlib_get_image_name() will return an empty string if the image is unnamed
* whereas wimlib_get_image_property() may return @c NULL in that case.
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_image_name(const WIMStruct *wim, int image);
/**
wimlib_get_image_name(const WIMStruct *wim, int image);
/**
* no such property. The string may not remain valid after later library
* calls, so the caller should duplicate it if needed.
*/
* no such property. The string may not remain valid after later library
* calls, so the caller should duplicate it if needed.
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_image_property(const WIMStruct *wim, int image,
const wimlib_tchar *property_name);
wimlib_get_image_property(const WIMStruct *wim, int image,
const wimlib_tchar *property_name);
* 20) | (WIMLIB_MINOR_VERSION << 10) | WIMLIB_PATCH_VERSION)</c> for the
* corresponding header file.
*/
* 20) | (WIMLIB_MINOR_VERSION << 10) | WIMLIB_PATCH_VERSION)</c> for the
* corresponding header file.
*/
wimlib_get_version(void);
/**
wimlib_get_version(void);
/**
* PACKAGE_VERSION string that was set at build time. (This allows a beta
* release to be distinguished from an official release.)
*/
* PACKAGE_VERSION string that was set at build time. (This allows a beta
* release to be distinguished from an official release.)
*/
-extern const wimlib_tchar *
+WIMLIBAPI const wimlib_tchar *
wimlib_get_version_string(void);
/**
wimlib_get_version_string(void);
/**
wimlib_get_wim_info(WIMStruct *wim, struct wimlib_wim_info *info);
/**
wimlib_get_wim_info(WIMStruct *wim, struct wimlib_wim_info *info);
/**
* @retval ::WIMLIB_ERR_UNEXPECTED_END_OF_FILE
* Failed to read the XML document from the WIM file.
*/
* @retval ::WIMLIB_ERR_UNEXPECTED_END_OF_FILE
* Failed to read the XML document from the WIM file.
*/
wimlib_get_xml_data(WIMStruct *wim, void **buf_ret, size_t *bufsize_ret);
/**
wimlib_get_xml_data(WIMStruct *wim, void **buf_ret, size_t *bufsize_ret);
/**
* ::WIMLIB_INIT_FLAG_STRICT_CAPTURE_PRIVILEGES were specified in @p
* init_flags, but the corresponding privileges could not be acquired.
*/
* ::WIMLIB_INIT_FLAG_STRICT_CAPTURE_PRIVILEGES were specified in @p
* init_flags, but the corresponding privileges could not be acquired.
*/
wimlib_global_init(int init_flags);
/**
wimlib_global_init(int init_flags);
/**
* Cleanup function for wimlib. You are not required to call this function, but
* it will release any global resources allocated by the library.
*/
* Cleanup function for wimlib. You are not required to call this function, but
* it will release any global resources allocated by the library.
*/
wimlib_global_cleanup(void);
/**
wimlib_global_cleanup(void);
/**
* if there is no image named @p name in @p wim. If @p name is @c NULL or
* the empty string, then @c false is returned.
*/
* if there is no image named @p name in @p wim. If @p name is @c NULL or
* the empty string, then @c false is returned.
*/
wimlib_image_name_in_use(const WIMStruct *wim, const wimlib_tchar *name);
/**
wimlib_image_name_in_use(const WIMStruct *wim, const wimlib_tchar *name);
/**
* indicate failure (for different reasons) to read the metadata resource for an
* image over which iteration needed to be done.
*/
* indicate failure (for different reasons) to read the metadata resource for an
* image over which iteration needed to be done.
*/
wimlib_iterate_dir_tree(WIMStruct *wim, int image, const wimlib_tchar *path,
int flags,
wimlib_iterate_dir_tree_callback_t cb, void *user_ctx);
wimlib_iterate_dir_tree(WIMStruct *wim, int image, const wimlib_tchar *path,
int flags,
wimlib_iterate_dir_tree_callback_t cb, void *user_ctx);
* @return 0 if all calls to @p cb returned 0; otherwise the first nonzero value
* that was returned from @p cb.
*/
* @return 0 if all calls to @p cb returned 0; otherwise the first nonzero value
* that was returned from @p cb.
*/
wimlib_iterate_lookup_table(WIMStruct *wim, int flags,
wimlib_iterate_lookup_table_callback_t cb,
void *user_ctx);
wimlib_iterate_lookup_table(WIMStruct *wim, int flags,
wimlib_iterate_lookup_table_callback_t cb,
void *user_ctx);
* an easy-to-use wrapper around this that has some advantages (e.g. extra
* sanity checks).
*/
* an easy-to-use wrapper around this that has some advantages (e.g. extra
* sanity checks).
*/
wimlib_join(const wimlib_tchar * const *swms,
unsigned num_swms,
const wimlib_tchar *output_path,
wimlib_join(const wimlib_tchar * const *swms,
unsigned num_swms,
const wimlib_tchar *output_path,
* ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY messages when each of the split WIM
* parts is opened.
*/
* ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY messages when each of the split WIM
* parts is opened.
*/
wimlib_join_with_progress(const wimlib_tchar * const *swms,
unsigned num_swms,
const wimlib_tchar *output_path,
wimlib_join_with_progress(const wimlib_tchar * const *swms,
unsigned num_swms,
const wimlib_tchar *output_path,
* To unmount the image, call wimlib_unmount_image(). This may be done in a
* different process.
*/
* To unmount the image, call wimlib_unmount_image(). This may be done in a
* different process.
*/
wimlib_mount_image(WIMStruct *wim,
int image,
const wimlib_tchar *dir,
wimlib_mount_image(WIMStruct *wim,
int image,
const wimlib_tchar *dir,
* @retval ::WIMLIB_ERR_XML
* The XML data of the WIM was invalid.
*/
* @retval ::WIMLIB_ERR_XML
* The XML data of the WIM was invalid.
*/
wimlib_open_wim(const wimlib_tchar *wim_file,
int open_flags,
WIMStruct **wim_ret);
wimlib_open_wim(const wimlib_tchar *wim_file,
int open_flags,
WIMStruct **wim_ret);
* progress function will receive ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY
* messages while checking the WIM file's integrity.
*/
* progress function will receive ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY
* messages while checking the WIM file's integrity.
*/
wimlib_open_wim_with_progress(const wimlib_tchar *wim_file,
int open_flags,
WIMStruct **wim_ret,
wimlib_open_wim_with_progress(const wimlib_tchar *wim_file,
int open_flags,
WIMStruct **wim_ret,
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_BEGIN, and
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_END.
*/
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_BEGIN, and
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_END.
*/
wimlib_overwrite(WIMStruct *wim, int write_flags, unsigned num_threads);
/**
wimlib_overwrite(WIMStruct *wim, int write_flags, unsigned num_threads);
/**
* This function is deprecated; use wimlib_get_xml_data() or
* wimlib_get_image_property() to query image information instead.
*/
* This function is deprecated; use wimlib_get_xml_data() or
* wimlib_get_image_property() to query image information instead.
*/
wimlib_print_available_images(const WIMStruct *wim, int image);
/**
wimlib_print_available_images(const WIMStruct *wim, int image);
/**
*
* Print the header of the WIM file (intended for debugging only).
*/
*
* Print the header of the WIM file (intended for debugging only).
*/
wimlib_print_header(const WIMStruct *wim);
/**
wimlib_print_header(const WIMStruct *wim);
/**
* This function can additionally return most values that can be returned by
* wimlib_open_wim().
*/
* This function can additionally return most values that can be returned by
* wimlib_open_wim().
*/
wimlib_reference_resource_files(WIMStruct *wim,
const wimlib_tchar * const *resource_wimfiles_or_globs,
unsigned count,
wimlib_reference_resource_files(WIMStruct *wim,
const wimlib_tchar * const *resource_wimfiles_or_globs,
unsigned count,
*
* @return 0 on success; a ::wimlib_error_code value on failure.
*/
*
* @return 0 on success; a ::wimlib_error_code value on failure.
*/
wimlib_reference_resources(WIMStruct *wim, WIMStruct **resource_wims,
unsigned num_resource_wims, int ref_flags);
wimlib_reference_resources(WIMStruct *wim, WIMStruct **resource_wims,
unsigned num_resource_wims, int ref_flags);
* indicate failure (for different reasons) to read the metadata resource for
* the template image.
*/
* indicate failure (for different reasons) to read the metadata resource for
* the template image.
*/
wimlib_reference_template_image(WIMStruct *wim, int new_image,
WIMStruct *template_wim, int template_image,
int flags);
wimlib_reference_template_image(WIMStruct *wim, int new_image,
WIMStruct *template_wim, int template_image,
int flags);
* The value which will be passed as the third argument to calls to @p
* progfunc.
*/
* The value which will be passed as the third argument to calls to @p
* progfunc.
*/
wimlib_register_progress_function(WIMStruct *wim,
wimlib_progress_func_t progfunc,
void *progctx);
wimlib_register_progress_function(WIMStruct *wim,
wimlib_progress_func_t progfunc,
void *progctx);
* This just builds an appropriate ::wimlib_rename_command and passes it to
* wimlib_update_image().
*/
* This just builds an appropriate ::wimlib_rename_command and passes it to
* wimlib_update_image().
*/
wimlib_rename_path(WIMStruct *wim, int image,
const wimlib_tchar *source_path, const wimlib_tchar *dest_path);
wimlib_rename_path(WIMStruct *wim, int image,
const wimlib_tchar *source_path, const wimlib_tchar *dest_path);
* images, an unnamed image must be specified by index to eliminate the
* ambiguity.)
*/
* images, an unnamed image must be specified by index to eliminate the
* ambiguity.)
*/
wimlib_resolve_image(WIMStruct *wim,
const wimlib_tchar *image_name_or_num);
wimlib_resolve_image(WIMStruct *wim,
const wimlib_tchar *image_name_or_num);
wimlib_set_error_file(FILE *fp);
/**
wimlib_set_error_file(FILE *fp);
/**
* @retval ::WIMLIB_ERR_OPEN
* The file named by @p path could not be opened for appending.
*/
* @retval ::WIMLIB_ERR_OPEN
* The file named by @p path could not be opened for appending.
*/
wimlib_set_error_file_by_name(const wimlib_tchar *path);
/**
wimlib_set_error_file_by_name(const wimlib_tchar *path);
/**
*
* Note that "description" is misspelled in the name of this function.
*/
*
* Note that "description" is misspelled in the name of this function.
*/
wimlib_set_image_descripton(WIMStruct *wim, int image,
const wimlib_tchar *description);
wimlib_set_image_descripton(WIMStruct *wim, int image,
const wimlib_tchar *description);
* (usually something like "Core" or "Ultimate"). Equivalent to
* <tt>wimlib_set_image_property(wim, image, "FLAGS", flags)</tt>.
*/
* (usually something like "Core" or "Ultimate"). Equivalent to
* <tt>wimlib_set_image_property(wim, image, "FLAGS", flags)</tt>.
*/
wimlib_set_image_flags(WIMStruct *wim, int image, const wimlib_tchar *flags);
/**
wimlib_set_image_flags(WIMStruct *wim, int image, const wimlib_tchar *flags);
/**
* Change the name of a WIM image. Equivalent to
* <tt>wimlib_set_image_property(wim, image, "NAME", name)</tt>.
*/
* Change the name of a WIM image. Equivalent to
* <tt>wimlib_set_image_property(wim, image, "NAME", name)</tt>.
*/
wimlib_set_image_name(WIMStruct *wim, int image, const wimlib_tchar *name);
/**
wimlib_set_image_name(WIMStruct *wim, int image, const wimlib_tchar *name);
/**
* @p property_name has an unsupported format, or @p property_name included
* a bracketed index that was too high.
*/
* @p property_name has an unsupported format, or @p property_name included
* a bracketed index that was too high.
*/
wimlib_set_image_property(WIMStruct *wim, int image,
const wimlib_tchar *property_name,
const wimlib_tchar *property_value);
wimlib_set_image_property(WIMStruct *wim, int image,
const wimlib_tchar *property_name,
const wimlib_tchar *property_value);
wimlib_set_memory_allocator(void *(*malloc_func)(size_t),
void (*free_func)(void *),
void *(*realloc_func)(void *, size_t));
wimlib_set_memory_allocator(void *(*malloc_func)(size_t),
void (*free_func)(void *),
void *(*realloc_func)(void *, size_t));
* @p chunk_size was not 0 or a supported chunk size for the currently
* selected output compression type.
*/
* @p chunk_size was not 0 or a supported chunk size for the currently
* selected output compression type.
*/
wimlib_set_output_chunk_size(WIMStruct *wim, uint32_t chunk_size);
/**
wimlib_set_output_chunk_size(WIMStruct *wim, uint32_t chunk_size);
/**
* Similar to wimlib_set_output_chunk_size(), but set the chunk size for writing
* solid resources.
*/
* Similar to wimlib_set_output_chunk_size(), but set the chunk size for writing
* solid resources.
*/
wimlib_set_output_pack_chunk_size(WIMStruct *wim, uint32_t chunk_size);
/**
wimlib_set_output_pack_chunk_size(WIMStruct *wim, uint32_t chunk_size);
/**
* @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE
* @p ctype did not specify a valid compression type.
*/
* @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE
* @p ctype did not specify a valid compression type.
*/
wimlib_set_output_compression_type(WIMStruct *wim,
enum wimlib_compression_type ctype);
wimlib_set_output_compression_type(WIMStruct *wim,
enum wimlib_compression_type ctype);
* Similar to wimlib_set_output_compression_type(), but set the compression type
* for writing solid resources. This cannot be ::WIMLIB_COMPRESSION_TYPE_NONE.
*/
* Similar to wimlib_set_output_compression_type(), but set the compression type
* for writing solid resources. This cannot be ::WIMLIB_COMPRESSION_TYPE_NONE.
*/
wimlib_set_output_pack_compression_type(WIMStruct *wim,
enum wimlib_compression_type ctype);
wimlib_set_output_pack_compression_type(WIMStruct *wim,
enum wimlib_compression_type ctype);
wimlib_set_print_errors(bool show_messages);
/**
wimlib_set_print_errors(bool show_messages);
/**
* ::wimlib_wim_info.boot_index did not specify 0 or a valid 1-based image
* index in the WIM.
*/
* ::wimlib_wim_info.boot_index did not specify 0 or a valid 1-based image
* index in the WIM.
*/
wimlib_set_wim_info(WIMStruct *wim, const struct wimlib_wim_info *info,
int which);
wimlib_set_wim_info(WIMStruct *wim, const struct wimlib_wim_info *info,
int which);
* receive ::WIMLIB_PROGRESS_MSG_WRITE_STREAMS messages while writing each part;
* these messages will report the progress of the current part only.
*/
* receive ::WIMLIB_PROGRESS_MSG_WRITE_STREAMS messages while writing each part;
* these messages will report the progress of the current part only.
*/
wimlib_split(WIMStruct *wim,
const wimlib_tchar *swm_name,
uint64_t part_size,
wimlib_split(WIMStruct *wim,
const wimlib_tchar *swm_name,
uint64_t part_size,
* ::WIMLIB_PROGRESS_MSG_END_VERIFY_IMAGE, and
* ::WIMLIB_PROGRESS_MSG_VERIFY_STREAMS.
*/
* ::WIMLIB_PROGRESS_MSG_END_VERIFY_IMAGE, and
* ::WIMLIB_PROGRESS_MSG_VERIFY_STREAMS.
*/
wimlib_verify_wim(WIMStruct *wim, int verify_flags);
/**
wimlib_verify_wim(WIMStruct *wim, int verify_flags);
/**
* by using the @c umount or @c fusermount programs. However, you need to call
* this function if you want changes to be committed.
*/
* by using the @c umount or @c fusermount programs. However, you need to call
* this function if you want changes to be committed.
*/
wimlib_unmount_image(const wimlib_tchar *dir, int unmount_flags);
/**
wimlib_unmount_image(const wimlib_tchar *dir, int unmount_flags);
/**
* message. In addition, if changes are committed from a read-write mount, the
* progress function will receive ::WIMLIB_PROGRESS_MSG_WRITE_STREAMS messages.
*/
* message. In addition, if changes are committed from a read-write mount, the
* progress function will receive ::WIMLIB_PROGRESS_MSG_WRITE_STREAMS messages.
*/
wimlib_unmount_image_with_progress(const wimlib_tchar *dir,
int unmount_flags,
wimlib_progress_func_t progfunc,
wimlib_unmount_image_with_progress(const wimlib_tchar *dir,
int unmount_flags,
wimlib_progress_func_t progfunc,
* indicate failure (for different reasons) to read the metadata resource for an
* image that needed to be updated.
*/
* indicate failure (for different reasons) to read the metadata resource for an
* image that needed to be updated.
*/
wimlib_update_image(WIMStruct *wim,
int image,
const struct wimlib_update_command *cmds,
wimlib_update_image(WIMStruct *wim,
int image,
const struct wimlib_update_command *cmds,
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_BEGIN, and
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_END.
*/
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_BEGIN, and
* ::WIMLIB_PROGRESS_MSG_WRITE_METADATA_END.
*/
wimlib_write(WIMStruct *wim,
const wimlib_tchar *path,
int image,
wimlib_write(WIMStruct *wim,
const wimlib_tchar *path,
int image,
* @p fd was not seekable, but ::WIMLIB_WRITE_FLAG_PIPABLE was not
* specified in @p write_flags.
*/
* @p fd was not seekable, but ::WIMLIB_WRITE_FLAG_PIPABLE was not
* specified in @p write_flags.
*/
wimlib_write_to_fd(WIMStruct *wim,
int fd,
int image,
wimlib_write_to_fd(WIMStruct *wim,
int fd,
int image,
* @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE
* @p ctype was neither a supported compression type nor -1.
*/
* @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE
* @p ctype was neither a supported compression type nor -1.
*/
wimlib_set_default_compression_level(int ctype, unsigned int compression_level);
/**
wimlib_set_default_compression_level(int ctype, unsigned int compression_level);
/**
* compression type is invalid, or the @p max_block_size for that compression
* type is invalid.
*/
* compression type is invalid, or the @p max_block_size for that compression
* type is invalid.
*/
wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype,
size_t max_block_size,
unsigned int compression_level);
wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype,
size_t max_block_size,
unsigned int compression_level);
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate the compressor.
*/
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate the compressor.
*/
wimlib_create_compressor(enum wimlib_compression_type ctype,
size_t max_block_size,
unsigned int compression_level,
wimlib_create_compressor(enum wimlib_compression_type ctype,
size_t max_block_size,
unsigned int compression_level,
* The size of the compressed data, in bytes, or 0 if the data could not be
* compressed to @p compressed_size_avail or fewer bytes.
*/
* The size of the compressed data, in bytes, or 0 if the data could not be
* compressed to @p compressed_size_avail or fewer bytes.
*/
wimlib_compress(const void *uncompressed_data, size_t uncompressed_size,
void *compressed_data, size_t compressed_size_avail,
struct wimlib_compressor *compressor);
wimlib_compress(const void *uncompressed_data, size_t uncompressed_size,
void *compressed_data, size_t compressed_size_avail,
struct wimlib_compressor *compressor);
* @param compressor
* The compressor to free. If @c NULL, no action is taken.
*/
* @param compressor
* The compressor to free. If @c NULL, no action is taken.
*/
wimlib_free_compressor(struct wimlib_compressor *compressor);
/**
wimlib_free_compressor(struct wimlib_compressor *compressor);
/**
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate the decompressor.
*/
* @retval ::WIMLIB_ERR_NOMEM
* Insufficient memory to allocate the decompressor.
*/
wimlib_create_decompressor(enum wimlib_compression_type ctype,
size_t max_block_size,
struct wimlib_decompressor **decompressor_ret);
wimlib_create_decompressor(enum wimlib_compression_type ctype,
size_t max_block_size,
struct wimlib_decompressor **decompressor_ret);
* as the @p uncompressed_size parameter. If this is not done correctly,
* decompression may fail or the data may be decompressed incorrectly.
*/
* as the @p uncompressed_size parameter. If this is not done correctly,
* decompression may fail or the data may be decompressed incorrectly.
*/
wimlib_decompress(const void *compressed_data, size_t compressed_size,
void *uncompressed_data, size_t uncompressed_size,
struct wimlib_decompressor *decompressor);
wimlib_decompress(const void *compressed_data, size_t compressed_size,
void *uncompressed_data, size_t uncompressed_size,
struct wimlib_decompressor *decompressor);
* @param decompressor
* The decompressor to free. If @c NULL, no action is taken.
*/
* @param decompressor
* The decompressor to free. If @c NULL, no action is taken.
*/
wimlib_free_decompressor(struct wimlib_decompressor *decompressor);
wimlib_free_decompressor(struct wimlib_decompressor *decompressor);
# define __has_builtin(builtin) 0
#endif
# define __has_builtin(builtin) 0
#endif
-/* Declare that the annotated function should be exported from the shared
- * library (or DLL). */
-#ifdef _WIN32
-# define WIMLIBAPI __declspec(dllexport)
-#else
-# define WIMLIBAPI __attribute__((visibility("default")))
-#endif
-
/* Declare that the annotated function should always be inlined. This might be
* desirable in highly tuned code, e.g. compression codecs. */
#define forceinline inline __attribute__((always_inline))
/* Declare that the annotated function should always be inlined. This might be
* desirable in highly tuned code, e.g. compression codecs. */
#define forceinline inline __attribute__((always_inline))
#ifdef ENABLE_TEST_SUPPORT
#ifdef ENABLE_TEST_SUPPORT
#include "wimlib/types.h"
#define WIMLIB_ERR_IMAGES_ARE_DIFFERENT 200
#include "wimlib/types.h"
#define WIMLIB_ERR_IMAGES_ARE_DIFFERENT 200
#define WIMLIB_CMP_FLAG_NTFS_3G_MODE 0x00000002
#define WIMLIB_CMP_FLAG_WINDOWS_MODE 0x00000004
#define WIMLIB_CMP_FLAG_NTFS_3G_MODE 0x00000002
#define WIMLIB_CMP_FLAG_WINDOWS_MODE 0x00000004
wimlib_compare_images(WIMStruct *wim1, int image1,
WIMStruct *wim2, int image2, int cmp_flags);
wimlib_compare_images(WIMStruct *wim1, int image1,
WIMStruct *wim2, int image2, int cmp_flags);
wimlib_parse_and_write_xml_doc(const tchar *in, tchar **out_ret);
#endif /* ENABLE_TEST_SUPPORT */
wimlib_parse_and_write_xml_doc(const tchar *in, tchar **out_ret);
#endif /* ENABLE_TEST_SUPPORT */