]> wimlib.net Git - wimlib/blobdiff - src/wim.c
Merge compression updates
[wimlib] / src / wim.c
index 2dd0787238863a7dac8dafbe003f0ba41b2bbea9..3ab0266b9216a1d8cacf480cb40fc8d367a07466 100644 (file)
--- a/src/wim.c
+++ b/src/wim.c
@@ -38,8 +38,6 @@
 #include "wimlib/security.h"
 #include "wimlib/wim.h"
 #include "wimlib/xml.h"
-#include "wimlib/compressor_ops.h"
-#include "wimlib/decompressor_ops.h"
 #include "wimlib/version.h"
 
 #ifdef __WIN32__
@@ -66,7 +64,7 @@ static u32
 wim_default_pack_chunk_size(int ctype) {
        switch (ctype) {
        case WIMLIB_COMPRESSION_TYPE_LZMS:
-               return 1U << 26; /* 67108864  */
+               return 1U << 25; /* 33554432  */
        default:
                return 1U << 15; /* 32768     */
        }
@@ -126,9 +124,8 @@ wim_chunk_size_valid(u32 chunk_size, int ctype)
        switch (ctype) {
        case WIMLIB_COMPRESSION_TYPE_LZX:
                return order >= 15 && order <= 21;
-
        case WIMLIB_COMPRESSION_TYPE_XPRESS:
-               return order >= 12 && order <= 26;
+               return order >= 12 && order <= 16;
        case WIMLIB_COMPRESSION_TYPE_LZMS:
                return order >= 15 && order <= 30;
        }
@@ -549,8 +546,6 @@ static int
 set_out_ctype(int ctype, u8 *out_ctype_p)
 {
        switch (ctype) {
-       case WIMLIB_COMPRESSION_TYPE_INVALID:
-               break;
        case WIMLIB_COMPRESSION_TYPE_NONE:
        case WIMLIB_COMPRESSION_TYPE_LZX:
        case WIMLIB_COMPRESSION_TYPE_XPRESS:
@@ -1013,15 +1008,20 @@ wimlib_get_version(void)
        return WIMLIB_VERSION_CODE;
 }
 
+static bool lib_initialized = false;
+
 /* API function documented in wimlib.h  */
 WIMLIBAPI int
 wimlib_global_init(int init_flags)
 {
-       static bool already_inited = false;
-
-       if (already_inited)
+       if (lib_initialized)
                return 0;
 
+#ifdef ENABLE_ERROR_MESSAGES
+       if (wimlib_error_file == NULL)
+               wimlib_error_file = stderr;
+#endif
+
        if (init_flags & ~(WIMLIB_INIT_FLAG_ASSUME_UTF8 |
                           WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES |
                           WIMLIB_INIT_FLAG_STRICT_CAPTURE_PRIVILEGES |
@@ -1045,12 +1045,13 @@ wimlib_global_init(int init_flags)
                        return ret;
        }
 #endif
+       iconv_global_init();
        init_upcase();
        if (init_flags & WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE)
                default_ignore_case = false;
        else if (init_flags & WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE)
                default_ignore_case = true;
-       already_inited = true;
+       lib_initialized = true;
        return 0;
 }
 
@@ -1058,11 +1059,14 @@ wimlib_global_init(int init_flags)
 WIMLIBAPI void
 wimlib_global_cleanup(void)
 {
+       if (!lib_initialized)
+               return;
        libxml_global_cleanup();
        iconv_global_cleanup();
 #ifdef __WIN32__
        win32_global_cleanup();
 #endif
-       cleanup_decompressor_params();
-       cleanup_compressor_params();
+
+       wimlib_set_error_file(NULL);
+       lib_initialized = false;
 }