X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwim.c;h=a82bd479117831b217af8c5400a0163c8fff1cb2;hb=2fc33f535a398ea85964c0e483c5692821d775f3;hp=6522d7bcc8fb5b81babdf1e7a87b827df80d69a3;hpb=1855a4637636e8b00ff30fdbee6d2628de73381a;p=wimlib diff --git a/src/wim.c b/src/wim.c index 6522d7bc..a82bd479 100644 --- a/src/wim.c +++ b/src/wim.c @@ -217,7 +217,7 @@ destroy_image_metadata(struct wim_image_metadata *imd, free_blob_descriptor(blob); } INIT_LIST_HEAD(&imd->unhashed_blobs); - INIT_LIST_HEAD(&imd->inode_list); + INIT_HLIST_HEAD(&imd->inode_list); #ifdef WITH_NTFS_3G if (imd->ntfs_vol) { do_ntfs_umount(imd->ntfs_vol); @@ -260,7 +260,7 @@ new_image_metadata(void) imd = CALLOC(1, sizeof(*imd)); if (imd) { imd->refcnt = 1; - INIT_LIST_HEAD(&imd->inode_list); + INIT_HLIST_HEAD(&imd->inode_list); INIT_LIST_HEAD(&imd->unhashed_blobs); } return imd; @@ -929,16 +929,15 @@ static pthread_mutex_t lib_initialization_mutex = PTHREAD_MUTEX_INITIALIZER; WIMLIBAPI int wimlib_global_init(int init_flags) { - int ret; + int ret = 0; if (lib_initialized) - return 0; + goto out; pthread_mutex_lock(&lib_initialization_mutex); - ret = 0; if (lib_initialized) - goto out; + goto out_unlock; #ifdef ENABLE_ERROR_MESSAGES if (!wimlib_error_file) @@ -952,7 +951,14 @@ wimlib_global_init(int init_flags) WIMLIB_INIT_FLAG_STRICT_APPLY_PRIVILEGES | WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE | WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)) - goto out; + goto out_unlock; + + ret = WIMLIB_ERR_INVALID_PARAM; + if ((init_flags & (WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE | + WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)) + == (WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE | + WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)) + goto out_unlock; libxml_global_init(); if (!(init_flags & WIMLIB_INIT_FLAG_ASSUME_UTF8)) { @@ -965,7 +971,7 @@ wimlib_global_init(int init_flags) #ifdef __WIN32__ ret = win32_global_init(init_flags); if (ret) - goto out; + goto out_unlock; #endif iconv_global_init(); init_upcase(); @@ -975,8 +981,9 @@ wimlib_global_init(int init_flags) default_ignore_case = true; lib_initialized = true; ret = 0; -out: +out_unlock: pthread_mutex_unlock(&lib_initialization_mutex); +out: return ret; } @@ -990,7 +997,7 @@ wimlib_global_cleanup(void) pthread_mutex_lock(&lib_initialization_mutex); if (!lib_initialized) - goto out; + goto out_unlock; libxml_global_cleanup(); iconv_global_cleanup(); @@ -1001,6 +1008,6 @@ wimlib_global_cleanup(void) wimlib_set_error_file(NULL); lib_initialized = false; -out: +out_unlock: pthread_mutex_unlock(&lib_initialization_mutex); }