X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwim.c;h=b1902f41b6c1898f25072d80b678ce1661c3d791;hb=6979188381ba0bd7519afdd264e8d028326ab7dd;hp=8c3dbfc4f17945803b169361e075e55dae1bf071;hpb=4e32f48feb64932954953a87f064170500f93221;p=wimlib diff --git a/src/wim.c b/src/wim.c index 8c3dbfc4..b1902f41 100644 --- a/src/wim.c +++ b/src/wim.c @@ -25,22 +25,20 @@ #include #include -#ifndef __WIN32__ -# include -#endif -#include #include #include #include "wimlib.h" #include "wimlib/assert.h" #include "wimlib/blob_table.h" +#include "wimlib/cpu_features.h" #include "wimlib/dentry.h" #include "wimlib/encoding.h" #include "wimlib/file_io.h" #include "wimlib/integrity.h" #include "wimlib/metadata.h" #include "wimlib/security.h" +#include "wimlib/threads.h" #include "wimlib/wim.h" #include "wimlib/xml.h" #include "wimlib/win32.h" @@ -175,31 +173,25 @@ wimlib_create_new_wim(enum wimlib_compression_type ctype, WIMStruct **wim_ret) if (!wim) return WIMLIB_ERR_NOMEM; - wim->xml_info = xml_new_info_struct(); - wim->blob_table = new_blob_table(64); - if (!wim->xml_info || !wim->blob_table) { - wimlib_free(wim); - return WIMLIB_ERR_NOMEM; - } - - /* Fill in wim->hdr with default values */ + /* Fill in wim->hdr with default values */ wim->hdr.magic = WIM_MAGIC; wim->hdr.wim_version = WIM_VERSION_DEFAULT; - wim->hdr.flags = 0; - wim->hdr.chunk_size = 0; - generate_guid(wim->hdr.guid); wim->hdr.part_number = 1; wim->hdr.total_parts = 1; - wim->hdr.image_count = 0; - wim->hdr.boot_idx = 0; - wim->compression_type = WIMLIB_COMPRESSION_TYPE_NONE; - wim->chunk_size = wim->hdr.chunk_size; - /* Set the output compression type */ + /* Set the output compression type */ wim->out_compression_type = ctype; wim->out_chunk_size = wim_default_nonsolid_chunk_size(ctype); + /* Allocate an empty XML info and blob table */ + wim->xml_info = xml_new_info_struct(); + wim->blob_table = new_blob_table(64); + if (!wim->xml_info || !wim->blob_table) { + wimlib_free(wim); + return WIMLIB_ERR_NOMEM; + } + *wim_ret = wim; return 0; } @@ -944,8 +936,14 @@ wimlib_get_version(void) WIMLIB_PATCH_VERSION; } +WIMLIBAPI const tchar * +wimlib_get_version_string(void) +{ + return T(PACKAGE_VERSION); +} + static bool lib_initialized = false; -static pthread_mutex_t lib_initialization_mutex = PTHREAD_MUTEX_INITIALIZER; +static struct mutex lib_initialization_mutex = MUTEX_INITIALIZER; /* API function documented in wimlib.h */ WIMLIBAPI int @@ -956,15 +954,13 @@ wimlib_global_init(int init_flags) if (lib_initialized) goto out; - pthread_mutex_lock(&lib_initialization_mutex); + mutex_lock(&lib_initialization_mutex); if (lib_initialized) goto out_unlock; -#ifdef ENABLE_ERROR_MESSAGES if (!wimlib_error_file) wimlib_error_file = stderr; -#endif ret = WIMLIB_ERR_INVALID_PARAM; if (init_flags & ~(WIMLIB_INIT_FLAG_ASSUME_UTF8 | @@ -982,6 +978,7 @@ wimlib_global_init(int init_flags) WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)) goto out_unlock; + init_cpu_features(); xml_global_init(); #ifdef __WIN32__ ret = win32_global_init(init_flags); @@ -996,7 +993,7 @@ wimlib_global_init(int init_flags) lib_initialized = true; ret = 0; out_unlock: - pthread_mutex_unlock(&lib_initialization_mutex); + mutex_unlock(&lib_initialization_mutex); out: return ret; } @@ -1008,7 +1005,7 @@ wimlib_global_cleanup(void) if (!lib_initialized) return; - pthread_mutex_lock(&lib_initialization_mutex); + mutex_lock(&lib_initialization_mutex); if (!lib_initialized) goto out_unlock; @@ -1022,5 +1019,5 @@ wimlib_global_cleanup(void) lib_initialized = false; out_unlock: - pthread_mutex_unlock(&lib_initialization_mutex); + mutex_unlock(&lib_initialization_mutex); }