*
* \section intro Introduction
*
- * This is the documentation for the library interface of wimlib 1.2.3. If you
+ * This is the documentation for the library interface of wimlib 1.2.5. If you
* have installed wimlib and want to know how to use the @c imagex program,
* please see the man pages instead.
*
*
* wimlib is thread-safe as long as different ::WIMStruct's are used, except for
* the fact that wimlib_set_print_errors() and wimlib_set_memory_allocator()
- * both apply globally.
+ * both apply globally, and you also must call wimlib_global_init() in the main
+ * thread to avoid any race conditions with one-time allocations of memory.
*
* To open an existing WIM, use wimlib_open_wim().
*
#define WIMLIB_MAJOR_VERSION 1
#define WIMLIB_MINOR_VERSION 2
-#define WIMLIB_PATCH_VERSION 3
+#define WIMLIB_PATCH_VERSION 5
/**
* Opaque structure that represents a WIM file. This is an in-memory structure
*/
extern int wimlib_get_part_number(const WIMStruct *wim, int *total_parts_ret);
+/**
+ * Since wimlib 1.2.6: Initialization function for wimlib. This is not
+ * re-entrant. If you are calling wimlib functions concurrently in different
+ * threads, then you must call this function serially first. Otherwise, calling
+ * this function is not required.
+ *
+ * @return 0 on success; nonzero on error.
+ * @retval ::WIMLIB_ERR_NOMEM
+ * Could not allocate memory.
+ * @retval ::WIMLIB_ERR_ICONV_NOT_AVAILABLE
+ * wimlib was configured --without-libntfs-3g at compilation time, and at
+ * runtime the iconv() set of functions did not seem to be available,
+ * perhaps due to missing files in the C library installation.
+ *
+ * If this function is not called or returns nonzero, then it will not be safe
+ * to use wimlib in multiple threads. Furthermore, a nonzero return value here
+ * indicates that further calls into wimlib will probably fail when they try to
+ * repeat the same initializations.
+ */
+extern int wimlib_global_init();
+
+/**
+ * Since wimlib 1.2.6: Cleanup function for wimlib. This is not re-entrant.
+ * You are not required to call this function, but it will release any global
+ * memory allocated by the library.
+ */
+extern void wimlib_global_cleanup();
+
/**
* Returns true if the WIM has an integrity table.
*
* @param image
* The number of the image for which to change the name.
* @param name
- * The new name to give the image. It must not a nonempty string.
+ * The new name to give the image. It must be a nonempty string.
*
* @return 0 on success; nonzero on error.
* @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
* @return 0 on success; nonzero on error. This function may return any value
* returned by wimlib_write() as well as the following error codes:
*
- * @retval ::WIMLIB_ERR_SPLIT_UNSUPPORTED:
+ * @retval ::WIMLIB_ERR_SPLIT_UNSUPPORTED
* @a wim is not part 1 of a stand-alone WIM.
* @retval ::WIMLIB_ERR_INVALID_PARAM
* @a swm_name was @c NULL, or @a part_size was 0.