Select the default integrity check type at runtime.
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 31 Jan 2010 17:52:38 +0000 (19:52 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 31 Jan 2010 17:52:38 +0000 (19:52 +0200)
Previously it was set statically to CRC64 or CRC32
depending on options passed to the configure script.

src/xz/coder.c

index e6ed3e5..cd5da29 100644 (file)
@@ -56,17 +56,17 @@ static bool preset_default = true;
 static bool preset_extreme = false;
 
 /// Integrity check type
-#ifdef HAVE_CHECK_CRC64
-static lzma_check check = LZMA_CHECK_CRC64;
-#else
-static lzma_check check = LZMA_CHECK_CRC32;
-#endif
+static lzma_check check;
+
+/// This becomes false if the --check=CHECK option is used.
+static bool check_default = true;
 
 
 extern void
 coder_set_check(lzma_check new_check)
 {
        check = new_check;
+       check_default = false;
        return;
 }
 
@@ -265,6 +265,15 @@ coder_set_compression_settings(void)
                opt_threads = thread_limit;
 */
 
+       if (check_default) {
+               // The default check type is CRC64, but fallback to CRC32
+               // if CRC64 isn't supported by the copy of liblzma we are
+               // using. CRC32 is always supported.
+               check = LZMA_CHECK_CRC64;
+               if (!lzma_check_is_supported(check))
+                       check = LZMA_CHECK_CRC32;
+       }
+
        return;
 }