stormlib 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CMakeCCompiler.cmake +72 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake +83 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_C.bin +0 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_CXX.bin +0 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CMakeSystem.cmake +15 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CompilerIdC/CMakeCCompilerId.c +803 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CompilerIdC/a.out +0 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
- data/ext/stormlib/StormLib/CMakeFiles/3.22.1/CompilerIdCXX/a.out +0 -0
- data/ext/stormlib/StormLib/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/ext/stormlib/StormLib/CMakeFiles/CMakeOutput.log +478 -0
- data/ext/stormlib/StormLib/CMakeFiles/Export/share/StormLib/StormLibConfig-noconfig.cmake +19 -0
- data/ext/stormlib/StormLib/CMakeFiles/Export/share/StormLib/StormLibConfig.cmake +99 -0
- data/ext/stormlib/StormLib/CMakeFiles/Makefile.cmake +61 -0
- data/ext/stormlib/StormLib/CMakeFiles/Makefile2 +112 -0
- data/ext/stormlib/StormLib/CMakeFiles/TargetDirectories.txt +9 -0
- data/ext/stormlib/StormLib/CMakeFiles/cmake.check_cache +1 -0
- data/ext/stormlib/StormLib/CMakeFiles/progress.marks +1 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/DependInfo.cmake +243 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/build.make +3695 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/cmake_clean.cmake +459 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/cmake_clean_target.cmake +3 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/compiler_depend.make +2 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/compiler_depend.ts +2 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/depend.make +2 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/flags.make +17 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/link.txt +2 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/progress.make +227 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/FileStream.cpp.o.d +160 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SBaseCommon.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SBaseDumpData.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SBaseFileTable.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SBaseSubTypes.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SCompression.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileAddFile.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileAttributes.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileCompactArchive.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileCreateArchive.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileExtractFile.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileFindFile.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileGetFileInfo.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileListFile.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileOpenArchive.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileOpenFileEx.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFilePatchArchives.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileReadFile.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/SFileVerify.cpp.o.d +159 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/adpcm/adpcm.cpp.o.d +12 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/huffman/huff.cpp.o.d +16 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/jenkins/lookup3.c.o.d +88 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/hashes/hash_memory.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/hashes/md5.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/hashes/sha1.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/hashes/sha256.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/math/ltm_desc.c.o.d +105 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/math/multi.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/math/rand_prime.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/base64_decode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_argchk.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_find_hash.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_find_prng.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_hash_descriptor.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_hash_is_valid.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_libc.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_prng_descriptor.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_prng_is_valid.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_register_hash.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/crypt_register_prng.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/misc/zeromem.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_bit_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_boolean.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_choice.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_octet_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_printable_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_short_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_utctime.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_bit_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_boolean.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_octet_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_printable_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_set.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_setof.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_short_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_utctime.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_bit_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_boolean.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_ia5_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_object_identifier.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_octet_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_printable_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_sequence.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_short_integer.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_utctime.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_length_utf8_string.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/asn1/der_sequence_free.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_map.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_points.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_exptmod.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_free.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_import.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_make_key.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_sign_hash.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_verify_hash.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtomcrypt/src/pk/rsa/rsa_verify_simple.c.o.d +102 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_fast_mp_invmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_fast_mp_montgomery_reduce.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_fast_s_mp_mul_digs.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_fast_s_mp_mul_high_digs.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_fast_s_mp_sqr.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_2expt.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_abs.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_add.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_add_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_addmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_and.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_clamp.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_clear.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_clear_multi.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_cmp.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_cmp_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_cmp_mag.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_cnt_lsb.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_copy.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_count_bits.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_div.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_div_2.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_div_2d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_div_3.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_div_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_dr_is_modulus.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_dr_reduce.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_dr_setup.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_exch.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_expt_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_exptmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_exptmod_fast.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_exteuclid.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_fread.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_fwrite.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_gcd.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_get_int.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_grow.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init_copy.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init_multi.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init_set.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init_set_int.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_init_size.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_invmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_invmod_slow.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_is_square.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_jacobi.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_karatsuba_mul.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_karatsuba_sqr.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_lcm.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_lshd.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mod_2d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mod_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_montgomery_calc_normalization.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_montgomery_reduce.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_montgomery_setup.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mul.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mul_2.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mul_2d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mul_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_mulmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_n_root.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_neg.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_or.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_fermat.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_is_divisible.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_is_prime.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_miller_rabin.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_next_prime.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_rabin_miller_trials.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_prime_random_ex.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_radix_size.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_radix_smap.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_rand.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_read_radix.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_read_signed_bin.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_read_unsigned_bin.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_2k.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_2k_l.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_2k_setup.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_2k_setup_l.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_is_2k.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_is_2k_l.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_reduce_setup.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_rshd.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_set.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_set_int.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_shrink.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_signed_bin_size.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_sqr.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_sqrmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_sqrt.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_sub.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_sub_d.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_submod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_to_signed_bin.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_to_signed_bin_n.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_to_unsigned_bin.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_to_unsigned_bin_n.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_toom_mul.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_toom_sqr.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_toradix.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_toradix_n.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_unsigned_bin_size.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_xor.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_mp_zero.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_prime_tab.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_reverse.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_add.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_exptmod.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_mul_digs.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_mul_high_digs.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_sqr.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bn_s_mp_sub.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/libtommath/bncore.c.o.d +65 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/lzma/C/LzFind.c.o.d +18 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/lzma/C/LzmaDec.c.o.d +17 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/lzma/C/LzmaEnc.c.o.d +18 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/pklib/explode.c.o.d +16 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/pklib/implode.c.o.d +23 -0
- data/ext/stormlib/StormLib/CMakeFiles/storm.dir/src/sparse/sparse.cpp.o.d +16 -0
- data/ext/stormlib/StormLib/CMakeLists.txt +418 -0
- data/ext/stormlib/StormLib/Info.plist +22 -0
- data/ext/stormlib/StormLib/LICENSE +21 -0
- data/ext/stormlib/StormLib/Premake5.lua +132 -0
- data/ext/stormlib/StormLib/README.md +39 -0
- data/ext/stormlib/StormLib/StormLib.sln +162 -0
- data/ext/stormlib/StormLib/StormLib.vcxproj +1024 -0
- data/ext/stormlib/StormLib/StormLib.vcxproj.filters +221 -0
- data/ext/stormlib/StormLib/StormLib.xcodeproj/project.pbxproj +2104 -0
- data/ext/stormlib/StormLib/StormLib_dll.vcxproj +348 -0
- data/ext/stormlib/StormLib/StormLib_dll.vcxproj.filters +229 -0
- data/ext/stormlib/StormLib/StormLib_test.vcxproj +360 -0
- data/ext/stormlib/StormLib/StormLib_test.vcxproj.filters +230 -0
- data/ext/stormlib/StormLib/StormLib_vs08.sln +139 -0
- data/ext/stormlib/StormLib/StormLib_vs08.vcproj +4205 -0
- data/ext/stormlib/StormLib/StormLib_vs08_dll.vcproj +1851 -0
- data/ext/stormlib/StormLib/StormLib_vs08_test.vcproj +1289 -0
- data/ext/stormlib/StormLib/doc/History.txt +78 -0
- data/ext/stormlib/StormLib/doc/The MoPaQ File Format 0.9.txt +318 -0
- data/ext/stormlib/StormLib/doc/The MoPaQ File Format 1.0.txt +433 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-deDE.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-enGB.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-enSG.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-enUS.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-esES.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-esMX.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-frFR.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-itIT.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-koKR.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-plPL.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-ptBR.txt +1 -0
- data/ext/stormlib/StormLib/doc/d3-authenticationcode/d3-authenticationcode-zhTW.txt +1 -0
- data/ext/stormlib/StormLib/doc/hots-authenticationcode/hots-authenticationcode-bgdl.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-deDE.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-enGB.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-enUS.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-esES.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-esMX.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-frFR.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-itIT.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-koKR.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-plPL.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-ptBR.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-ruRU.txt +1 -0
- data/ext/stormlib/StormLib/doc/sc2-authenticationcode/sc2-authenticationcode-zhTW.txt +1 -0
- data/ext/stormlib/StormLib/make-msvc.bat +95 -0
- data/ext/stormlib/StormLib/make.bat +46 -0
- data/ext/stormlib/StormLib/sources +14 -0
- data/ext/stormlib/StormLib/src/DllMain.c +24 -0
- data/ext/stormlib/StormLib/src/DllMain.def +79 -0
- data/ext/stormlib/StormLib/src/DllMain.rc +110 -0
- data/ext/stormlib/StormLib/src/FileStream.cpp +2928 -0
- data/ext/stormlib/StormLib/src/FileStream.h +217 -0
- data/ext/stormlib/StormLib/src/LibTomCrypt.c +85 -0
- data/ext/stormlib/StormLib/src/LibTomMath.c +125 -0
- data/ext/stormlib/StormLib/src/LibTomMathDesc.c +4 -0
- data/ext/stormlib/StormLib/src/SBaseCommon.cpp +1970 -0
- data/ext/stormlib/StormLib/src/SBaseDumpData.cpp +183 -0
- data/ext/stormlib/StormLib/src/SBaseFileTable.cpp +3194 -0
- data/ext/stormlib/StormLib/src/SBaseSubTypes.cpp +688 -0
- data/ext/stormlib/StormLib/src/SCompression.cpp +1183 -0
- data/ext/stormlib/StormLib/src/SFileAddFile.cpp +1337 -0
- data/ext/stormlib/StormLib/src/SFileAttributes.cpp +573 -0
- data/ext/stormlib/StormLib/src/SFileCompactArchive.cpp +654 -0
- data/ext/stormlib/StormLib/src/SFileCreateArchive.cpp +285 -0
- data/ext/stormlib/StormLib/src/SFileExtractFile.cpp +64 -0
- data/ext/stormlib/StormLib/src/SFileFindFile.cpp +484 -0
- data/ext/stormlib/StormLib/src/SFileGetFileInfo.cpp +627 -0
- data/ext/stormlib/StormLib/src/SFileListFile.cpp +750 -0
- data/ext/stormlib/StormLib/src/SFileOpenArchive.cpp +723 -0
- data/ext/stormlib/StormLib/src/SFileOpenFileEx.cpp +423 -0
- data/ext/stormlib/StormLib/src/SFilePatchArchives.cpp +1175 -0
- data/ext/stormlib/StormLib/src/SFileReadFile.cpp +922 -0
- data/ext/stormlib/StormLib/src/SFileVerify.cpp +1059 -0
- data/ext/stormlib/StormLib/src/StormCommon.h +450 -0
- data/ext/stormlib/StormLib/src/StormLib.exp +74 -0
- data/ext/stormlib/StormLib/src/StormLib.h +1157 -0
- data/ext/stormlib/StormLib/src/StormPort.h +474 -0
- data/ext/stormlib/StormLib/src/adpcm/adpcm.cpp +539 -0
- data/ext/stormlib/StormLib/src/adpcm/adpcm.h +27 -0
- data/ext/stormlib/StormLib/src/bzip2/blocksort.c +1094 -0
- data/ext/stormlib/StormLib/src/bzip2/bzlib.c +1573 -0
- data/ext/stormlib/StormLib/src/bzip2/bzlib.h +282 -0
- data/ext/stormlib/StormLib/src/bzip2/bzlib_private.h +509 -0
- data/ext/stormlib/StormLib/src/bzip2/compress.c +672 -0
- data/ext/stormlib/StormLib/src/bzip2/crctable.c +104 -0
- data/ext/stormlib/StormLib/src/bzip2/decompress.c +626 -0
- data/ext/stormlib/StormLib/src/bzip2/huffman.c +205 -0
- data/ext/stormlib/StormLib/src/bzip2/randtable.c +84 -0
- data/ext/stormlib/StormLib/src/huffman/huff.cpp +915 -0
- data/ext/stormlib/StormLib/src/huffman/huff.h +143 -0
- data/ext/stormlib/StormLib/src/jenkins/lookup.h +24 -0
- data/ext/stormlib/StormLib/src/jenkins/lookup3.c +1003 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/hashes/hash_memory.c +69 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/hashes/md5.c +368 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/hashes/sha1.c +288 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/hashes/sha256.c +340 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt.h +91 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_argchk.h +38 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_cfg.h +144 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_cipher.h +891 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_custom.h +424 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_hash.h +378 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_mac.h +384 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_macros.h +424 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_math.h +500 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_misc.h +23 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_pk.h +558 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_pkcs.h +89 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/headers/tomcrypt_prng.h +199 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/math/ltm_desc.c +483 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/math/multi.c +61 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/math/rand_prime.c +87 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/base64_decode.c +104 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_argchk.c +30 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_find_hash.c +40 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_find_prng.c +41 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_hash_descriptor.c +27 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_hash_is_valid.c +36 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_libc.c +43 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.c +13 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_prng_descriptor.c +26 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_prng_is_valid.c +36 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_register_hash.c +54 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/crypt_register_prng.c +54 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/misc/zeromem.c +34 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_bit_string.c +102 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_boolean.c +47 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_choice.c +182 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.c +96 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_integer.c +110 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.c +99 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_octet_string.c +91 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_printable_string.c +96 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.c +287 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.c +386 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.c +139 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_short_integer.c +68 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_utctime.c +127 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.c +111 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_bit_string.c +89 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_boolean.c +51 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.c +85 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_integer.c +130 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.c +111 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_octet_string.c +86 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_printable_string.c +85 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.c +335 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.c +138 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_set.c +103 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_setof.c +162 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_short_integer.c +97 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_utctime.c +83 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.c +105 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_bit_string.c +54 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_boolean.c +35 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_ia5_string.c +194 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_integer.c +82 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_object_identifier.c +89 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_octet_string.c +53 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_printable_string.c +166 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_sequence.c +169 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_short_integer.c +70 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_utctime.c +46 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_length_utf8_string.c +83 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/asn1/der_sequence_free.c +65 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_map.c +76 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c +207 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c +222 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_points.c +60 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c +196 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c +147 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c +108 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c +189 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c +177 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c +175 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c +110 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c +111 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_exptmod.c +113 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_free.c +34 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_import.c +143 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_make_key.c +112 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_sign_hash.c +134 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_verify_hash.c +167 -0
- data/ext/stormlib/StormLib/src/libtomcrypt/src/pk/rsa/rsa_verify_simple.c +87 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_fast_mp_invmod.c +148 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_fast_mp_montgomery_reduce.c +172 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_fast_s_mp_mul_digs.c +107 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_fast_s_mp_mul_high_digs.c +98 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_fast_s_mp_sqr.c +114 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_2expt.c +48 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_abs.c +43 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_add.c +53 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_add_d.c +112 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_addmod.c +41 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_and.c +57 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_clamp.c +44 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_clear.c +44 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_clear_multi.c +34 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_cmp.c +43 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_cmp_d.c +44 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_cmp_mag.c +55 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_cnt_lsb.c +53 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_copy.c +68 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_count_bits.c +45 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_div.c +292 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_div_2.c +68 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_div_2d.c +97 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_div_3.c +79 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_div_d.c +115 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_dr_is_modulus.c +43 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_dr_reduce.c +94 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_dr_setup.c +32 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_exch.c +34 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_expt_d.c +57 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_exptmod.c +112 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_exptmod_fast.c +321 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_exteuclid.c +82 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_fread.c +67 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_fwrite.c +52 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_gcd.c +105 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_get_int.c +45 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_grow.c +57 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init.c +46 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init_copy.c +32 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init_multi.c +59 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init_set.c +32 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init_set_int.c +31 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_init_size.c +48 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_invmod.c +43 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_invmod_slow.c +175 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_is_square.c +109 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_jacobi.c +105 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_karatsuba_mul.c +167 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_karatsuba_sqr.c +121 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_lcm.c +60 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_lshd.c +67 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mod.c +48 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mod_2d.c +55 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mod_d.c +27 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_montgomery_calc_normalization.c +59 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_montgomery_reduce.c +118 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_montgomery_setup.c +59 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mul.c +66 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mul_2.c +82 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mul_2d.c +85 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mul_d.c +79 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_mulmod.c +40 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_n_root.c +132 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_neg.c +40 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_or.c +50 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_fermat.c +62 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_is_divisible.c +50 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_is_prime.c +83 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_miller_rabin.c +103 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_next_prime.c +170 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_rabin_miller_trials.c +52 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_prime_random_ex.c +125 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_radix_size.c +78 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_radix_smap.c +24 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_rand.c +55 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_read_radix.c +85 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_read_signed_bin.c +41 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_read_unsigned_bin.c +55 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce.c +100 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_2k.c +61 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_2k_l.c +62 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_2k_setup.c +47 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_2k_setup_l.c +44 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_is_2k.c +52 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_is_2k_l.c +44 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_reduce_setup.c +34 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_rshd.c +72 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_set.c +29 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_set_int.c +48 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_shrink.c +35 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_signed_bin_size.c +27 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_sqr.c +58 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_sqrmod.c +41 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_sqrt.c +81 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_sub.c +59 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_sub_d.c +93 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_submod.c +42 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_to_signed_bin.c +33 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_to_signed_bin_n.c +31 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_to_unsigned_bin.c +48 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_to_unsigned_bin_n.c +31 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_toom_mul.c +284 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_toom_sqr.c +226 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_toradix.c +75 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_toradix_n.c +88 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_unsigned_bin_size.c +28 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_xor.c +51 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_mp_zero.c +36 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_prime_tab.c +61 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_reverse.c +39 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_add.c +109 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_exptmod.c +252 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_mul_digs.c +90 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_mul_high_digs.c +81 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_sqr.c +84 -0
- data/ext/stormlib/StormLib/src/libtommath/bn_s_mp_sub.c +89 -0
- data/ext/stormlib/StormLib/src/libtommath/bncore.c +36 -0
- data/ext/stormlib/StormLib/src/libtommath/tommath.h +584 -0
- data/ext/stormlib/StormLib/src/libtommath/tommath_class.h +999 -0
- data/ext/stormlib/StormLib/src/libtommath/tommath_superclass.h +76 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzFind.c +761 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzFind.h +115 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzFindMt.c +793 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzFindMt.h +105 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzHash.h +54 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzmaDec.c +999 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzmaDec.h +231 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzmaEnc.c +2268 -0
- data/ext/stormlib/StormLib/src/lzma/C/LzmaEnc.h +80 -0
- data/ext/stormlib/StormLib/src/lzma/C/Threads.c +84 -0
- data/ext/stormlib/StormLib/src/lzma/C/Threads.h +59 -0
- data/ext/stormlib/StormLib/src/lzma/C/Types.h +236 -0
- data/ext/stormlib/StormLib/src/lzma/info.txt +1 -0
- data/ext/stormlib/StormLib/src/pklib/crc32.c +66 -0
- data/ext/stormlib/StormLib/src/pklib/explode.c +521 -0
- data/ext/stormlib/StormLib/src/pklib/implode.c +674 -0
- data/ext/stormlib/StormLib/src/pklib/pklib.h +160 -0
- data/ext/stormlib/StormLib/src/resource.h +15 -0
- data/ext/stormlib/StormLib/src/sparse/sparse.cpp +287 -0
- data/ext/stormlib/StormLib/src/sparse/sparse.h +17 -0
- data/ext/stormlib/StormLib/src/wdk/sources-cpp.cpp +26 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-bzip2.c +13 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-ltc.c +4 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-lzma.c +8 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-misc.c +6 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-tomcrypt.c +82 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-tommath.c +123 -0
- data/ext/stormlib/StormLib/src/wdk/sources-wdk-zlib.c +21 -0
- data/ext/stormlib/StormLib/src/zlib/adler32.c +169 -0
- data/ext/stormlib/StormLib/src/zlib/compress.c +80 -0
- data/ext/stormlib/StormLib/src/zlib/compress_zlib.c +5 -0
- data/ext/stormlib/StormLib/src/zlib/crc32.c +442 -0
- data/ext/stormlib/StormLib/src/zlib/crc32.h +441 -0
- data/ext/stormlib/StormLib/src/zlib/deflate.c +1834 -0
- data/ext/stormlib/StormLib/src/zlib/deflate.h +342 -0
- data/ext/stormlib/StormLib/src/zlib/gzguts.h +218 -0
- data/ext/stormlib/StormLib/src/zlib/inffast.c +340 -0
- data/ext/stormlib/StormLib/src/zlib/inffast.h +11 -0
- data/ext/stormlib/StormLib/src/zlib/inffixed.h +94 -0
- data/ext/stormlib/StormLib/src/zlib/inflate.c +1480 -0
- data/ext/stormlib/StormLib/src/zlib/inflate.h +130 -0
- data/ext/stormlib/StormLib/src/zlib/inftrees.c +330 -0
- data/ext/stormlib/StormLib/src/zlib/inftrees.h +67 -0
- data/ext/stormlib/StormLib/src/zlib/trees.c +1244 -0
- data/ext/stormlib/StormLib/src/zlib/trees.h +128 -0
- data/ext/stormlib/StormLib/src/zlib/zconf.h +428 -0
- data/ext/stormlib/StormLib/src/zlib/zlib.h +1613 -0
- data/ext/stormlib/StormLib/src/zlib/zutil.c +318 -0
- data/ext/stormlib/StormLib/src/zlib/zutil.h +274 -0
- data/ext/stormlib/StormLib/storm_dll/storm.cpp +117 -0
- data/ext/stormlib/StormLib/storm_dll/storm.def +25 -0
- data/ext/stormlib/StormLib/storm_dll/storm.h +65 -0
- data/ext/stormlib/StormLib/storm_dll/storm.vcxproj +209 -0
- data/ext/stormlib/StormLib/storm_dll/storm.vcxproj.filters +28 -0
- data/ext/stormlib/StormLib/storm_dll/storm_test.cpp +182 -0
- data/ext/stormlib/StormLib/storm_dll/storm_test.vcxproj +202 -0
- data/ext/stormlib/StormLib/storm_dll/storm_test.vcxproj.filters +22 -0
- data/ext/stormlib/StormLib/test/StormTest.cpp +4393 -0
- data/ext/stormlib/StormLib/test/TLogHelper.cpp +567 -0
- data/ext/stormlib/StormLib/test/stormlib-test-001.txt +164 -0
- data/ext/stormlib/extconf.rb +0 -2
- data/lib/stormlib/version.rb +1 -1
- data/stormlib.gemspec +1 -1
- metadata +621 -2
|
@@ -0,0 +1,1175 @@
|
|
|
1
|
+
/*****************************************************************************/
|
|
2
|
+
/* SFilePatchArchives.cpp Copyright (c) Ladislav Zezula 2010 */
|
|
3
|
+
/*---------------------------------------------------------------------------*/
|
|
4
|
+
/* Description: */
|
|
5
|
+
/*---------------------------------------------------------------------------*/
|
|
6
|
+
/* Date Ver Who Comment */
|
|
7
|
+
/* -------- ---- --- ------- */
|
|
8
|
+
/* 18.08.10 1.00 Lad The first version of SFilePatchArchives.cpp */
|
|
9
|
+
/*****************************************************************************/
|
|
10
|
+
|
|
11
|
+
#define __STORMLIB_SELF__
|
|
12
|
+
#include "StormLib.h"
|
|
13
|
+
#include "StormCommon.h"
|
|
14
|
+
|
|
15
|
+
//-----------------------------------------------------------------------------
|
|
16
|
+
// Local structures
|
|
17
|
+
|
|
18
|
+
#define MAX_SC2_PATCH_PREFIX 0x80
|
|
19
|
+
|
|
20
|
+
#define PATCH_SIGNATURE_HEADER 0x48435450
|
|
21
|
+
#define PATCH_SIGNATURE_MD5 0x5f35444d
|
|
22
|
+
#define PATCH_SIGNATURE_XFRM 0x4d524658
|
|
23
|
+
|
|
24
|
+
#define SIZE_OF_XFRM_HEADER 0x0C
|
|
25
|
+
|
|
26
|
+
// Header for incremental patch files
|
|
27
|
+
typedef struct _MPQ_PATCH_HEADER
|
|
28
|
+
{
|
|
29
|
+
//-- PATCH header -----------------------------------
|
|
30
|
+
DWORD dwSignature; // 'PTCH'
|
|
31
|
+
DWORD dwSizeOfPatchData; // Size of the entire patch (decompressed)
|
|
32
|
+
DWORD dwSizeBeforePatch; // Size of the file before patch
|
|
33
|
+
DWORD dwSizeAfterPatch; // Size of file after patch
|
|
34
|
+
|
|
35
|
+
//-- MD5 block --------------------------------------
|
|
36
|
+
DWORD dwMD5; // 'MD5_'
|
|
37
|
+
DWORD dwMd5BlockSize; // Size of the MD5 block, including the signature and size itself
|
|
38
|
+
BYTE md5_before_patch[0x10]; // MD5 of the original (unpached) file
|
|
39
|
+
BYTE md5_after_patch[0x10]; // MD5 of the patched file
|
|
40
|
+
|
|
41
|
+
//-- XFRM block -------------------------------------
|
|
42
|
+
DWORD dwXFRM; // 'XFRM'
|
|
43
|
+
DWORD dwXfrmBlockSize; // Size of the XFRM block, includes XFRM header and patch data
|
|
44
|
+
DWORD dwPatchType; // Type of patch ('BSD0' or 'COPY')
|
|
45
|
+
|
|
46
|
+
// Followed by the patch data
|
|
47
|
+
} MPQ_PATCH_HEADER, *PMPQ_PATCH_HEADER;
|
|
48
|
+
|
|
49
|
+
typedef struct _BLIZZARD_BSDIFF40_FILE
|
|
50
|
+
{
|
|
51
|
+
ULONGLONG Signature;
|
|
52
|
+
ULONGLONG CtrlBlockSize;
|
|
53
|
+
ULONGLONG DataBlockSize;
|
|
54
|
+
ULONGLONG NewFileSize;
|
|
55
|
+
} BLIZZARD_BSDIFF40_FILE, *PBLIZZARD_BSDIFF40_FILE;
|
|
56
|
+
|
|
57
|
+
typedef struct _BSDIFF_CTRL_BLOCK
|
|
58
|
+
{
|
|
59
|
+
DWORD dwAddDataLength;
|
|
60
|
+
DWORD dwMovDataLength;
|
|
61
|
+
DWORD dwOldMoveLength;
|
|
62
|
+
|
|
63
|
+
} BSDIFF_CTRL_BLOCK, *PBSDIFF_CTRL_BLOCK;
|
|
64
|
+
|
|
65
|
+
typedef struct _LOCALIZED_MPQ_INFO
|
|
66
|
+
{
|
|
67
|
+
const char * szNameTemplate; // Name template
|
|
68
|
+
size_t nLangOffset; // Offset of the language
|
|
69
|
+
size_t nLength; // Length of the name template
|
|
70
|
+
} LOCALIZED_MPQ_INFO, *PLOCALIZED_MPQ_INFO;
|
|
71
|
+
|
|
72
|
+
//-----------------------------------------------------------------------------
|
|
73
|
+
// Local variables
|
|
74
|
+
|
|
75
|
+
// 4-byte groups for all languages
|
|
76
|
+
static const char * LanguageList = "baseteenenUSenGBenCNenTWdeDEesESesMXfrFRitITkoKRptBRptPTruRUzhCNzhTW";
|
|
77
|
+
|
|
78
|
+
// List of localized MPQs for World of Warcraft
|
|
79
|
+
static LOCALIZED_MPQ_INFO LocaleMpqs_WoW[] =
|
|
80
|
+
{
|
|
81
|
+
{"expansion1-locale-####", 18, 22},
|
|
82
|
+
{"expansion1-speech-####", 18, 22},
|
|
83
|
+
{"expansion2-locale-####", 18, 22},
|
|
84
|
+
{"expansion2-speech-####", 18, 22},
|
|
85
|
+
{"expansion3-locale-####", 18, 22},
|
|
86
|
+
{"expansion3-speech-####", 18, 22},
|
|
87
|
+
{"locale-####", 7, 11},
|
|
88
|
+
{"speech-####", 7, 11},
|
|
89
|
+
{NULL, 0, 0}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//-----------------------------------------------------------------------------
|
|
93
|
+
// Local functions
|
|
94
|
+
|
|
95
|
+
static inline bool IsPatchMetadataFile(TFileEntry * pFileEntry)
|
|
96
|
+
{
|
|
97
|
+
// The file must ave a name
|
|
98
|
+
if(pFileEntry->szFileName != NULL && (pFileEntry->dwFlags & MPQ_FILE_PATCH_FILE) == 0)
|
|
99
|
+
{
|
|
100
|
+
// The file must be small
|
|
101
|
+
if(0 < pFileEntry->dwFileSize && pFileEntry->dwFileSize < 0x40)
|
|
102
|
+
{
|
|
103
|
+
// Compare the plain name
|
|
104
|
+
return (_stricmp(GetPlainFileName(pFileEntry->szFileName), PATCH_METADATA_NAME) == 0);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Not a patch_metadata
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
static void Decompress_RLE(LPBYTE pbDecompressed, DWORD cbDecompressed, LPBYTE pbCompressed, DWORD cbCompressed)
|
|
113
|
+
{
|
|
114
|
+
LPBYTE pbDecompressedEnd = pbDecompressed + cbDecompressed;
|
|
115
|
+
LPBYTE pbCompressedEnd = pbCompressed + cbCompressed;
|
|
116
|
+
BYTE RepeatCount;
|
|
117
|
+
BYTE OneByte;
|
|
118
|
+
|
|
119
|
+
// Cut the initial DWORD from the compressed chunk
|
|
120
|
+
pbCompressed += sizeof(DWORD);
|
|
121
|
+
|
|
122
|
+
// Pre-fill decompressed buffer with zeros
|
|
123
|
+
memset(pbDecompressed, 0, cbDecompressed);
|
|
124
|
+
|
|
125
|
+
// Unpack
|
|
126
|
+
while(pbCompressed < pbCompressedEnd && pbDecompressed < pbDecompressedEnd)
|
|
127
|
+
{
|
|
128
|
+
OneByte = *pbCompressed++;
|
|
129
|
+
|
|
130
|
+
// Is it a repetition byte ?
|
|
131
|
+
if(OneByte & 0x80)
|
|
132
|
+
{
|
|
133
|
+
RepeatCount = (OneByte & 0x7F) + 1;
|
|
134
|
+
for(BYTE i = 0; i < RepeatCount; i++)
|
|
135
|
+
{
|
|
136
|
+
if(pbDecompressed == pbDecompressedEnd || pbCompressed == pbCompressedEnd)
|
|
137
|
+
break;
|
|
138
|
+
|
|
139
|
+
*pbDecompressed++ = *pbCompressed++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
{
|
|
144
|
+
pbDecompressed += (OneByte + 1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
static DWORD LoadFilePatch_COPY(TMPQFile * hf, PMPQ_PATCH_HEADER pFullPatch)
|
|
150
|
+
{
|
|
151
|
+
DWORD cbBytesToRead = pFullPatch->dwSizeOfPatchData - sizeof(MPQ_PATCH_HEADER);
|
|
152
|
+
DWORD cbBytesRead = 0;
|
|
153
|
+
|
|
154
|
+
// Simply load the rest of the patch
|
|
155
|
+
SFileReadFile((HANDLE)hf, (pFullPatch + 1), cbBytesToRead, &cbBytesRead, NULL);
|
|
156
|
+
return (cbBytesRead == cbBytesToRead) ? ERROR_SUCCESS : ERROR_FILE_CORRUPT;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static DWORD LoadFilePatch_BSD0(TMPQFile * hf, PMPQ_PATCH_HEADER pFullPatch)
|
|
160
|
+
{
|
|
161
|
+
LPBYTE pbDecompressed = (LPBYTE)(pFullPatch + 1);
|
|
162
|
+
LPBYTE pbCompressed = NULL;
|
|
163
|
+
DWORD cbDecompressed = 0;
|
|
164
|
+
DWORD cbCompressed = 0;
|
|
165
|
+
DWORD dwBytesRead = 0;
|
|
166
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
167
|
+
|
|
168
|
+
// Calculate the size of compressed data
|
|
169
|
+
cbDecompressed = pFullPatch->dwSizeOfPatchData - sizeof(MPQ_PATCH_HEADER);
|
|
170
|
+
cbCompressed = pFullPatch->dwXfrmBlockSize - SIZE_OF_XFRM_HEADER;
|
|
171
|
+
|
|
172
|
+
// Is that file compressed?
|
|
173
|
+
if(cbCompressed < cbDecompressed)
|
|
174
|
+
{
|
|
175
|
+
pbCompressed = STORM_ALLOC(BYTE, cbCompressed);
|
|
176
|
+
if(pbCompressed == NULL)
|
|
177
|
+
dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
|
|
178
|
+
|
|
179
|
+
// Read the compressed patch data
|
|
180
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
181
|
+
{
|
|
182
|
+
SFileReadFile((HANDLE)hf, pbCompressed, cbCompressed, &dwBytesRead, NULL);
|
|
183
|
+
if(dwBytesRead != cbCompressed)
|
|
184
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Decompress the data
|
|
188
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
189
|
+
Decompress_RLE(pbDecompressed, cbDecompressed, pbCompressed, cbCompressed);
|
|
190
|
+
|
|
191
|
+
if(pbCompressed != NULL)
|
|
192
|
+
STORM_FREE(pbCompressed);
|
|
193
|
+
}
|
|
194
|
+
else
|
|
195
|
+
{
|
|
196
|
+
SFileReadFile((HANDLE)hf, pbDecompressed, cbDecompressed, &dwBytesRead, NULL);
|
|
197
|
+
if(dwBytesRead != cbDecompressed)
|
|
198
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return dwErrCode;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
static DWORD ApplyFilePatch_COPY(
|
|
205
|
+
TMPQPatcher * pPatcher,
|
|
206
|
+
PMPQ_PATCH_HEADER pFullPatch,
|
|
207
|
+
LPBYTE pbTarget,
|
|
208
|
+
LPBYTE pbSource)
|
|
209
|
+
{
|
|
210
|
+
// Sanity checks
|
|
211
|
+
assert(pPatcher->cbMaxFileData >= pPatcher->cbFileData);
|
|
212
|
+
pFullPatch = pFullPatch;
|
|
213
|
+
|
|
214
|
+
// Copy the patch data as-is
|
|
215
|
+
memcpy(pbTarget, pbSource, pPatcher->cbFileData);
|
|
216
|
+
return ERROR_SUCCESS;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
static DWORD ApplyFilePatch_BSD0(
|
|
220
|
+
TMPQPatcher * pPatcher,
|
|
221
|
+
PMPQ_PATCH_HEADER pFullPatch,
|
|
222
|
+
LPBYTE pbTarget,
|
|
223
|
+
LPBYTE pbSource)
|
|
224
|
+
{
|
|
225
|
+
PBLIZZARD_BSDIFF40_FILE pBsdiff;
|
|
226
|
+
PBSDIFF_CTRL_BLOCK pCtrlBlock;
|
|
227
|
+
LPBYTE pbPatchData = (LPBYTE)(pFullPatch + 1);
|
|
228
|
+
LPBYTE pDataBlock;
|
|
229
|
+
LPBYTE pExtraBlock;
|
|
230
|
+
LPBYTE pbOldData = pbSource;
|
|
231
|
+
LPBYTE pbNewData = pbTarget;
|
|
232
|
+
DWORD dwCombineSize;
|
|
233
|
+
DWORD dwNewOffset = 0; // Current position to patch
|
|
234
|
+
DWORD dwOldOffset = 0; // Current source position
|
|
235
|
+
DWORD dwNewSize; // Patched file size
|
|
236
|
+
DWORD dwOldSize = pPatcher->cbFileData; // File size before patch
|
|
237
|
+
|
|
238
|
+
// Get pointer to the patch header
|
|
239
|
+
// Format of BSDIFF header corresponds to original BSDIFF, which is:
|
|
240
|
+
// 0000 8 bytes signature "BSDIFF40"
|
|
241
|
+
// 0008 8 bytes size of the control block
|
|
242
|
+
// 0010 8 bytes size of the data block
|
|
243
|
+
// 0018 8 bytes new size of the patched file
|
|
244
|
+
pBsdiff = (PBLIZZARD_BSDIFF40_FILE)pbPatchData;
|
|
245
|
+
pbPatchData += sizeof(BLIZZARD_BSDIFF40_FILE);
|
|
246
|
+
|
|
247
|
+
// Get pointer to the 32-bit BSDIFF control block
|
|
248
|
+
// The control block follows immediately after the BSDIFF header
|
|
249
|
+
// and consists of three 32-bit integers
|
|
250
|
+
// 0000 4 bytes Length to copy from the BSDIFF data block the new file
|
|
251
|
+
// 0004 4 bytes Length to copy from the BSDIFF extra block
|
|
252
|
+
// 0008 4 bytes Size to increment source file offset
|
|
253
|
+
pCtrlBlock = (PBSDIFF_CTRL_BLOCK)pbPatchData;
|
|
254
|
+
pbPatchData += (size_t)BSWAP_INT64_UNSIGNED(pBsdiff->CtrlBlockSize);
|
|
255
|
+
|
|
256
|
+
// Get the pointer to the data block
|
|
257
|
+
pDataBlock = (LPBYTE)pbPatchData;
|
|
258
|
+
pbPatchData += (size_t)BSWAP_INT64_UNSIGNED(pBsdiff->DataBlockSize);
|
|
259
|
+
|
|
260
|
+
// Get the pointer to the extra block
|
|
261
|
+
pExtraBlock = (LPBYTE)pbPatchData;
|
|
262
|
+
dwNewSize = (DWORD)BSWAP_INT64_UNSIGNED(pBsdiff->NewFileSize);
|
|
263
|
+
|
|
264
|
+
// Now patch the file
|
|
265
|
+
while(dwNewOffset < dwNewSize)
|
|
266
|
+
{
|
|
267
|
+
DWORD dwAddDataLength = BSWAP_INT32_UNSIGNED(pCtrlBlock->dwAddDataLength);
|
|
268
|
+
DWORD dwMovDataLength = BSWAP_INT32_UNSIGNED(pCtrlBlock->dwMovDataLength);
|
|
269
|
+
DWORD dwOldMoveLength = BSWAP_INT32_UNSIGNED(pCtrlBlock->dwOldMoveLength);
|
|
270
|
+
DWORD i;
|
|
271
|
+
|
|
272
|
+
// Sanity check
|
|
273
|
+
if((dwNewOffset + dwAddDataLength) > dwNewSize)
|
|
274
|
+
return ERROR_FILE_CORRUPT;
|
|
275
|
+
|
|
276
|
+
// Read the diff string to the target buffer
|
|
277
|
+
memcpy(pbNewData + dwNewOffset, pDataBlock, dwAddDataLength);
|
|
278
|
+
pDataBlock += dwAddDataLength;
|
|
279
|
+
|
|
280
|
+
// Get the longest block that we can combine
|
|
281
|
+
dwCombineSize = ((dwOldOffset + dwAddDataLength) >= dwOldSize) ? (dwOldSize - dwOldOffset) : dwAddDataLength;
|
|
282
|
+
if((dwNewOffset + dwCombineSize) > dwNewSize || (dwNewOffset + dwCombineSize) < dwNewOffset)
|
|
283
|
+
return ERROR_FILE_CORRUPT;
|
|
284
|
+
|
|
285
|
+
// Now combine the patch data with the original file
|
|
286
|
+
for(i = 0; i < dwCombineSize; i++)
|
|
287
|
+
pbNewData[dwNewOffset + i] = pbNewData[dwNewOffset + i] + pbOldData[dwOldOffset + i];
|
|
288
|
+
|
|
289
|
+
// Move the offsets
|
|
290
|
+
dwNewOffset += dwAddDataLength;
|
|
291
|
+
dwOldOffset += dwAddDataLength;
|
|
292
|
+
|
|
293
|
+
// Sanity check
|
|
294
|
+
if((dwNewOffset + dwMovDataLength) > dwNewSize)
|
|
295
|
+
return ERROR_FILE_CORRUPT;
|
|
296
|
+
|
|
297
|
+
// Copy the data from the extra block in BSDIFF patch
|
|
298
|
+
memcpy(pbNewData + dwNewOffset, pExtraBlock, dwMovDataLength);
|
|
299
|
+
pExtraBlock += dwMovDataLength;
|
|
300
|
+
dwNewOffset += dwMovDataLength;
|
|
301
|
+
|
|
302
|
+
// Move the old offset
|
|
303
|
+
if(dwOldMoveLength & 0x80000000)
|
|
304
|
+
dwOldMoveLength = 0x80000000 - dwOldMoveLength;
|
|
305
|
+
dwOldOffset += dwOldMoveLength;
|
|
306
|
+
pCtrlBlock++;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// The size after patch must match
|
|
310
|
+
if(dwNewOffset != pFullPatch->dwSizeAfterPatch)
|
|
311
|
+
return ERROR_FILE_CORRUPT;
|
|
312
|
+
|
|
313
|
+
// Update the new data size
|
|
314
|
+
pPatcher->cbFileData = dwNewOffset;
|
|
315
|
+
return ERROR_SUCCESS;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
static PMPQ_PATCH_HEADER LoadFullFilePatch(TMPQFile * hf, MPQ_PATCH_HEADER & PatchHeader)
|
|
319
|
+
{
|
|
320
|
+
PMPQ_PATCH_HEADER pFullPatch;
|
|
321
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
322
|
+
|
|
323
|
+
// BSWAP the entire header, if needed
|
|
324
|
+
BSWAP_ARRAY32_UNSIGNED(&PatchHeader, sizeof(DWORD) * 6);
|
|
325
|
+
BSWAP_ARRAY32_UNSIGNED(&PatchHeader.dwXFRM, sizeof(DWORD) * 3);
|
|
326
|
+
|
|
327
|
+
// Verify the signatures in the patch header
|
|
328
|
+
if(PatchHeader.dwSignature != PATCH_SIGNATURE_HEADER || PatchHeader.dwMD5 != PATCH_SIGNATURE_MD5 || PatchHeader.dwXFRM != PATCH_SIGNATURE_XFRM)
|
|
329
|
+
return NULL;
|
|
330
|
+
|
|
331
|
+
// Allocate space for patch header and compressed data
|
|
332
|
+
pFullPatch = (PMPQ_PATCH_HEADER)STORM_ALLOC(BYTE, PatchHeader.dwSizeOfPatchData);
|
|
333
|
+
if(pFullPatch != NULL)
|
|
334
|
+
{
|
|
335
|
+
// Copy the patch header
|
|
336
|
+
memcpy(pFullPatch, &PatchHeader, sizeof(MPQ_PATCH_HEADER));
|
|
337
|
+
|
|
338
|
+
// Read the patch, depending on patch type
|
|
339
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
340
|
+
{
|
|
341
|
+
switch(PatchHeader.dwPatchType)
|
|
342
|
+
{
|
|
343
|
+
case 0x59504f43: // 'COPY'
|
|
344
|
+
dwErrCode = LoadFilePatch_COPY(hf, pFullPatch);
|
|
345
|
+
break;
|
|
346
|
+
|
|
347
|
+
case 0x30445342: // 'BSD0'
|
|
348
|
+
dwErrCode = LoadFilePatch_BSD0(hf, pFullPatch);
|
|
349
|
+
break;
|
|
350
|
+
|
|
351
|
+
default:
|
|
352
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// If something failed, free the patch buffer
|
|
358
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
359
|
+
{
|
|
360
|
+
STORM_FREE(pFullPatch);
|
|
361
|
+
pFullPatch = NULL;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Give the result to the caller
|
|
366
|
+
return pFullPatch;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
static DWORD ApplyFilePatch(
|
|
370
|
+
TMPQPatcher * pPatcher,
|
|
371
|
+
PMPQ_PATCH_HEADER pFullPatch)
|
|
372
|
+
{
|
|
373
|
+
LPBYTE pbSource = (pPatcher->nCounter & 0x1) ? pPatcher->pbFileData2 : pPatcher->pbFileData1;
|
|
374
|
+
LPBYTE pbTarget = (pPatcher->nCounter & 0x1) ? pPatcher->pbFileData1 : pPatcher->pbFileData2;
|
|
375
|
+
DWORD dwErrCode;
|
|
376
|
+
|
|
377
|
+
// Sanity checks
|
|
378
|
+
assert(pFullPatch->dwSizeAfterPatch <= pPatcher->cbMaxFileData);
|
|
379
|
+
|
|
380
|
+
// Apply the patch according to the type
|
|
381
|
+
switch(pFullPatch->dwPatchType)
|
|
382
|
+
{
|
|
383
|
+
case 0x59504f43: // 'COPY'
|
|
384
|
+
dwErrCode = ApplyFilePatch_COPY(pPatcher, pFullPatch, pbTarget, pbSource);
|
|
385
|
+
break;
|
|
386
|
+
|
|
387
|
+
case 0x30445342: // 'BSD0'
|
|
388
|
+
dwErrCode = ApplyFilePatch_BSD0(pPatcher, pFullPatch, pbTarget, pbSource);
|
|
389
|
+
break;
|
|
390
|
+
|
|
391
|
+
default:
|
|
392
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// Verify MD5 after patch
|
|
397
|
+
if(dwErrCode == ERROR_SUCCESS && pFullPatch->dwSizeAfterPatch != 0)
|
|
398
|
+
{
|
|
399
|
+
// Verify the patched file
|
|
400
|
+
if(!VerifyDataBlockHash(pbTarget, pFullPatch->dwSizeAfterPatch, pFullPatch->md5_after_patch))
|
|
401
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
402
|
+
|
|
403
|
+
// Copy the MD5 of the new block
|
|
404
|
+
memcpy(pPatcher->this_md5, pFullPatch->md5_after_patch, MD5_DIGEST_SIZE);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return dwErrCode;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
//-----------------------------------------------------------------------------
|
|
411
|
+
// Local functions (patch prefix matching)
|
|
412
|
+
|
|
413
|
+
static bool CreatePatchPrefix(TMPQArchive * ha, const char * szFileName, size_t nLength)
|
|
414
|
+
{
|
|
415
|
+
TMPQNamePrefix * pNewPrefix;
|
|
416
|
+
|
|
417
|
+
// If the length of the patch prefix was not entered, find it
|
|
418
|
+
// Not that the patch prefix must always begin with backslash
|
|
419
|
+
if(szFileName != NULL && nLength == 0)
|
|
420
|
+
nLength = strlen(szFileName);
|
|
421
|
+
|
|
422
|
+
// Create the patch prefix
|
|
423
|
+
pNewPrefix = (TMPQNamePrefix *)STORM_ALLOC(BYTE, sizeof(TMPQNamePrefix) + nLength + 1);
|
|
424
|
+
if(pNewPrefix != NULL)
|
|
425
|
+
{
|
|
426
|
+
// Fill the name prefix. Also add the backslash
|
|
427
|
+
if(szFileName && nLength)
|
|
428
|
+
{
|
|
429
|
+
memcpy(pNewPrefix->szPatchPrefix, szFileName, nLength);
|
|
430
|
+
if(pNewPrefix->szPatchPrefix[nLength - 1] != '\\')
|
|
431
|
+
pNewPrefix->szPatchPrefix[nLength++] = '\\';
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Terminate the string and fill the length
|
|
435
|
+
pNewPrefix->szPatchPrefix[nLength] = 0;
|
|
436
|
+
pNewPrefix->nLength = nLength;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
ha->pPatchPrefix = pNewPrefix;
|
|
440
|
+
return (pNewPrefix != NULL);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
static bool CheckAndCreatePatchPrefix(TMPQArchive * ha, const char * szPatchPrefix, size_t nLength)
|
|
444
|
+
{
|
|
445
|
+
char szTempName[MAX_SC2_PATCH_PREFIX + 0x41];
|
|
446
|
+
bool bResult = false;
|
|
447
|
+
|
|
448
|
+
// Prepare the patch file name
|
|
449
|
+
if(nLength > MAX_SC2_PATCH_PREFIX)
|
|
450
|
+
return false;
|
|
451
|
+
|
|
452
|
+
// Prepare the patched file name
|
|
453
|
+
memcpy(szTempName, szPatchPrefix, nLength);
|
|
454
|
+
memcpy(&szTempName[nLength], "\\(patch_metadata)", 18);
|
|
455
|
+
|
|
456
|
+
// Verifywhether that file exists
|
|
457
|
+
if(GetFileEntryLocale(ha, szTempName, 0) != NULL)
|
|
458
|
+
bResult = CreatePatchPrefix(ha, szPatchPrefix, nLength);
|
|
459
|
+
|
|
460
|
+
return bResult;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
static bool IsMatchingPatchFile(
|
|
464
|
+
TMPQArchive * ha,
|
|
465
|
+
const char * szFileName,
|
|
466
|
+
LPBYTE pbBaseFileMd5)
|
|
467
|
+
{
|
|
468
|
+
MPQ_PATCH_HEADER PatchHeader = {0};
|
|
469
|
+
HANDLE hFile = NULL;
|
|
470
|
+
DWORD dwTransferred = 0;
|
|
471
|
+
DWORD dwFlags = 0;
|
|
472
|
+
bool bResult = false;
|
|
473
|
+
|
|
474
|
+
// Open the file and load the patch header
|
|
475
|
+
if(SFileOpenFileEx((HANDLE)ha, szFileName, SFILE_OPEN_BASE_FILE, &hFile))
|
|
476
|
+
{
|
|
477
|
+
// Retrieve the flags. We need to know whether the file is a patch or not
|
|
478
|
+
SFileGetFileInfo(hFile, SFileInfoFlags, &dwFlags, sizeof(DWORD), &dwTransferred);
|
|
479
|
+
if(dwFlags & MPQ_FILE_PATCH_FILE)
|
|
480
|
+
{
|
|
481
|
+
// Load the patch header
|
|
482
|
+
SFileReadFile(hFile, &PatchHeader, sizeof(MPQ_PATCH_HEADER), &dwTransferred, NULL);
|
|
483
|
+
BSWAP_ARRAY32_UNSIGNED(&PatchHeader, sizeof(DWORD) * 6);
|
|
484
|
+
|
|
485
|
+
// If the file contains an incremental patch,
|
|
486
|
+
// compare the "MD5 before patching" with the base file MD5
|
|
487
|
+
if(dwTransferred == sizeof(MPQ_PATCH_HEADER) && PatchHeader.dwSignature == PATCH_SIGNATURE_HEADER)
|
|
488
|
+
bResult = (!memcmp(PatchHeader.md5_before_patch, pbBaseFileMd5, MD5_DIGEST_SIZE));
|
|
489
|
+
}
|
|
490
|
+
else
|
|
491
|
+
{
|
|
492
|
+
// TODO: How to match it if it's not an incremental patch?
|
|
493
|
+
// Example: StarCraft II\Updates\enGB\s2-update-enGB-23258.MPQ:
|
|
494
|
+
// Mods\Core.SC2Mod\enGB.SC2Assets\StreamingBuckets.txt"
|
|
495
|
+
bResult = false;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Close the file
|
|
499
|
+
SFileCloseFile(hFile);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return bResult;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
static const char * FindArchiveLanguage(TMPQArchive * ha, PLOCALIZED_MPQ_INFO pMpqInfo)
|
|
506
|
+
{
|
|
507
|
+
TFileEntry * pFileEntry;
|
|
508
|
+
const char * szLanguage = LanguageList;
|
|
509
|
+
char szFileName[0x40];
|
|
510
|
+
|
|
511
|
+
// Iterate through all localized languages
|
|
512
|
+
while(pMpqInfo->szNameTemplate != NULL)
|
|
513
|
+
{
|
|
514
|
+
// Iterate through all languages
|
|
515
|
+
for(szLanguage = LanguageList; szLanguage[0] != 0; szLanguage += 4)
|
|
516
|
+
{
|
|
517
|
+
// Construct the file name
|
|
518
|
+
memcpy(szFileName, pMpqInfo->szNameTemplate, pMpqInfo->nLength);
|
|
519
|
+
szFileName[pMpqInfo->nLangOffset + 0] = szLanguage[0];
|
|
520
|
+
szFileName[pMpqInfo->nLangOffset + 1] = szLanguage[1];
|
|
521
|
+
szFileName[pMpqInfo->nLangOffset + 2] = szLanguage[2];
|
|
522
|
+
szFileName[pMpqInfo->nLangOffset + 3] = szLanguage[3];
|
|
523
|
+
|
|
524
|
+
// Append the suffix
|
|
525
|
+
memcpy(szFileName + pMpqInfo->nLength, "-md5.lst", 9);
|
|
526
|
+
|
|
527
|
+
// Check whether the name exists
|
|
528
|
+
pFileEntry = GetFileEntryLocale(ha, szFileName, 0);
|
|
529
|
+
if(pFileEntry != NULL)
|
|
530
|
+
return szLanguage;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// Move to the next language name
|
|
534
|
+
pMpqInfo++;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Not found
|
|
538
|
+
return NULL;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
//-----------------------------------------------------------------------------
|
|
542
|
+
// Finding ratch prefix for an temporary build of WoW (Pre-Cataclysm)
|
|
543
|
+
|
|
544
|
+
static bool FindPatchPrefix_WoW_13164_13623(TMPQArchive * haBase, TMPQArchive * haPatch)
|
|
545
|
+
{
|
|
546
|
+
const char * szPatchPrefix;
|
|
547
|
+
char szNamePrefix[0x08];
|
|
548
|
+
|
|
549
|
+
// Try to find the language of the MPQ archive
|
|
550
|
+
szPatchPrefix = FindArchiveLanguage(haBase, LocaleMpqs_WoW);
|
|
551
|
+
if(szPatchPrefix == NULL)
|
|
552
|
+
szPatchPrefix = "Base";
|
|
553
|
+
|
|
554
|
+
// Format the patch prefix
|
|
555
|
+
szNamePrefix[0] = szPatchPrefix[0];
|
|
556
|
+
szNamePrefix[1] = szPatchPrefix[1];
|
|
557
|
+
szNamePrefix[2] = szPatchPrefix[2];
|
|
558
|
+
szNamePrefix[3] = szPatchPrefix[3];
|
|
559
|
+
szNamePrefix[4] = '\\';
|
|
560
|
+
szNamePrefix[5] = 0;
|
|
561
|
+
return CreatePatchPrefix(haPatch, szNamePrefix, 5);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
//-----------------------------------------------------------------------------
|
|
565
|
+
// Finding patch prefix for Starcraft II (Pre-Legacy of the Void)
|
|
566
|
+
|
|
567
|
+
//
|
|
568
|
+
// This method tries to match the patch by placement of the archive (in the game subdirectory)
|
|
569
|
+
//
|
|
570
|
+
// Archive Path: %GAME_DIR%\Mods\SwarmMulti.SC2Mod\Base.SC2Data
|
|
571
|
+
// Patch Prefix: Mods\SwarmMulti.SC2Mod\Base.SC2Data
|
|
572
|
+
//
|
|
573
|
+
// Archive Path: %ANY_DIR%\MPQ_2013_v4_Mods#Liberty.SC2Mod#enGB.SC2Data
|
|
574
|
+
// Patch Prefix: Mods\Liberty.SC2Mod\enGB.SC2Data
|
|
575
|
+
//
|
|
576
|
+
|
|
577
|
+
static bool CheckPatchPrefix_SC2_ArchiveName(
|
|
578
|
+
TMPQArchive * haPatch,
|
|
579
|
+
const TCHAR * szPathPtr,
|
|
580
|
+
const TCHAR * szSeparator,
|
|
581
|
+
const TCHAR * szPathEnd,
|
|
582
|
+
const TCHAR * szExpectedString,
|
|
583
|
+
size_t cchExpectedString)
|
|
584
|
+
{
|
|
585
|
+
char szPatchPrefix[MAX_SC2_PATCH_PREFIX+0x41];
|
|
586
|
+
size_t nLength = 0;
|
|
587
|
+
bool bResult = false;
|
|
588
|
+
|
|
589
|
+
// Check whether the length is equal to the length of the expected string
|
|
590
|
+
if((size_t)(szSeparator - szPathPtr) == cchExpectedString)
|
|
591
|
+
{
|
|
592
|
+
// Now check the string itself
|
|
593
|
+
if(!_tcsnicmp(szPathPtr, szExpectedString, szSeparator - szPathPtr))
|
|
594
|
+
{
|
|
595
|
+
// Copy the name string
|
|
596
|
+
for(; szPathPtr < szPathEnd; szPathPtr++)
|
|
597
|
+
{
|
|
598
|
+
if(szPathPtr[0] != _T('/') && szPathPtr[0] != _T('#'))
|
|
599
|
+
szPatchPrefix[nLength++] = (char)szPathPtr[0];
|
|
600
|
+
else
|
|
601
|
+
szPatchPrefix[nLength++] = '\\';
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Check and create the patch prefix
|
|
605
|
+
bResult = CheckAndCreatePatchPrefix(haPatch, szPatchPrefix, nLength);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
return bResult;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
static bool FindPatchPrefix_SC2_ArchiveName(TMPQArchive * haBase, TMPQArchive * haPatch)
|
|
613
|
+
{
|
|
614
|
+
const TCHAR * szPathBegin = FileStream_GetFileName(haBase->pStream);
|
|
615
|
+
const TCHAR * szSeparator = NULL;
|
|
616
|
+
const TCHAR * szPathEnd = szPathBegin + _tcslen(szPathBegin);
|
|
617
|
+
const TCHAR * szPathPtr;
|
|
618
|
+
int nSlashCount = 0;
|
|
619
|
+
int nDotCount = 0;
|
|
620
|
+
|
|
621
|
+
// Skip the part where the patch prefix would be too long
|
|
622
|
+
if((szPathEnd - szPathBegin) > MAX_SC2_PATCH_PREFIX)
|
|
623
|
+
szPathBegin = szPathEnd - MAX_SC2_PATCH_PREFIX;
|
|
624
|
+
|
|
625
|
+
// Search for the file extension
|
|
626
|
+
for(szPathPtr = szPathEnd; szPathPtr > szPathBegin; szPathPtr--)
|
|
627
|
+
{
|
|
628
|
+
if(szPathPtr[0] == _T('.'))
|
|
629
|
+
{
|
|
630
|
+
nDotCount++;
|
|
631
|
+
break;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
// Search for the possible begin of the prefix name
|
|
636
|
+
for(/* NOTHING */; szPathPtr > szPathBegin; szPathPtr--)
|
|
637
|
+
{
|
|
638
|
+
// Check the slashes, backslashes and hashes
|
|
639
|
+
if(szPathPtr[0] == _T('\\') || szPathPtr[0] == _T('/') || szPathPtr[0] == _T('#'))
|
|
640
|
+
{
|
|
641
|
+
if(nDotCount == 0)
|
|
642
|
+
return false;
|
|
643
|
+
szSeparator = szPathPtr;
|
|
644
|
+
nSlashCount++;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Check the path parts
|
|
648
|
+
if(szSeparator != NULL && nSlashCount >= nDotCount)
|
|
649
|
+
{
|
|
650
|
+
if(CheckPatchPrefix_SC2_ArchiveName(haPatch, szPathPtr, szSeparator, szPathEnd, _T("Battle.net"), 10))
|
|
651
|
+
return true;
|
|
652
|
+
if(CheckPatchPrefix_SC2_ArchiveName(haPatch, szPathPtr, szSeparator, szPathEnd, _T("Campaigns"), 9))
|
|
653
|
+
return true;
|
|
654
|
+
if(CheckPatchPrefix_SC2_ArchiveName(haPatch, szPathPtr, szSeparator, szPathEnd, _T("Mods"), 4))
|
|
655
|
+
return true;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
// Not matched, sorry
|
|
660
|
+
return false;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
//
|
|
664
|
+
// This method tries to read the patch prefix from a helper file
|
|
665
|
+
//
|
|
666
|
+
// Example
|
|
667
|
+
// =========================================================
|
|
668
|
+
// MPQ File Name: MPQ_2013_v4_Base1.SC2Data
|
|
669
|
+
// Helper File : MPQ_2013_v4_Base1.SC2Data-PATCH
|
|
670
|
+
// File Contains: PatchPrefix=Mods\Core.SC2Mod\Base.SC2Data
|
|
671
|
+
// Patch Prefix : Mods\Core.SC2Mod\Base.SC2Data
|
|
672
|
+
//
|
|
673
|
+
|
|
674
|
+
static bool ExtractPatchPrefixFromFile(const TCHAR * szHelperFile, char * szPatchPrefix, size_t nMaxChars, size_t * PtrLength)
|
|
675
|
+
{
|
|
676
|
+
TFileStream * pStream;
|
|
677
|
+
ULONGLONG FileSize = 0;
|
|
678
|
+
size_t nLength;
|
|
679
|
+
char szFileData[MAX_PATH+1];
|
|
680
|
+
bool bResult = false;
|
|
681
|
+
|
|
682
|
+
pStream = FileStream_OpenFile(szHelperFile, STREAM_FLAG_READ_ONLY);
|
|
683
|
+
if(pStream != NULL)
|
|
684
|
+
{
|
|
685
|
+
// Retrieve and check the file size
|
|
686
|
+
FileStream_GetSize(pStream, &FileSize);
|
|
687
|
+
if(12 <= FileSize && FileSize < MAX_PATH)
|
|
688
|
+
{
|
|
689
|
+
// Read the entire file to memory
|
|
690
|
+
if(FileStream_Read(pStream, NULL, szFileData, (DWORD)FileSize))
|
|
691
|
+
{
|
|
692
|
+
// Terminate the buffer with zero
|
|
693
|
+
szFileData[(DWORD)FileSize] = 0;
|
|
694
|
+
|
|
695
|
+
// The file data must begin with the "PatchPrefix" variable
|
|
696
|
+
if(!_strnicmp(szFileData, "PatchPrefix", 11))
|
|
697
|
+
{
|
|
698
|
+
char * szLinePtr = szFileData + 11;
|
|
699
|
+
char * szLineEnd;
|
|
700
|
+
|
|
701
|
+
// Skip spaces or '='
|
|
702
|
+
while(szLinePtr[0] == ' ' || szLinePtr[0] == '=')
|
|
703
|
+
szLinePtr++;
|
|
704
|
+
szLineEnd = szLinePtr;
|
|
705
|
+
|
|
706
|
+
// Find the end
|
|
707
|
+
while(szLineEnd[0] != 0 && szLineEnd[0] != 0x0A && szLineEnd[0] != 0x0D)
|
|
708
|
+
szLineEnd++;
|
|
709
|
+
nLength = (size_t)(szLineEnd - szLinePtr);
|
|
710
|
+
|
|
711
|
+
// Copy the variable
|
|
712
|
+
if(szLineEnd > szLinePtr && nLength <= nMaxChars)
|
|
713
|
+
{
|
|
714
|
+
memcpy(szPatchPrefix, szLinePtr, nLength);
|
|
715
|
+
szPatchPrefix[nLength] = 0;
|
|
716
|
+
PtrLength[0] = nLength;
|
|
717
|
+
bResult = true;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
// Close the stream
|
|
724
|
+
FileStream_Close(pStream);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
return bResult;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
static bool FindPatchPrefix_SC2_HelperFile(TMPQArchive * haBase, TMPQArchive * haPatch)
|
|
732
|
+
{
|
|
733
|
+
TCHAR szHelperFile[MAX_PATH+1];
|
|
734
|
+
char szPatchPrefix[MAX_SC2_PATCH_PREFIX+0x41];
|
|
735
|
+
size_t nLength = 0;
|
|
736
|
+
bool bResult = false;
|
|
737
|
+
|
|
738
|
+
// Create the name of the patch helper file
|
|
739
|
+
_tcscpy(szHelperFile, FileStream_GetFileName(haBase->pStream));
|
|
740
|
+
if(_tcslen(szHelperFile) + 6 > MAX_PATH)
|
|
741
|
+
return false;
|
|
742
|
+
_tcscat(szHelperFile, _T("-PATCH"));
|
|
743
|
+
|
|
744
|
+
// Open the patch helper file and read the line
|
|
745
|
+
if(ExtractPatchPrefixFromFile(szHelperFile, szPatchPrefix, MAX_SC2_PATCH_PREFIX, &nLength))
|
|
746
|
+
bResult = CheckAndCreatePatchPrefix(haPatch, szPatchPrefix, nLength);
|
|
747
|
+
|
|
748
|
+
return bResult;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
//
|
|
752
|
+
// Find match in Starcraft II patch MPQs
|
|
753
|
+
// Match a LST file in the root directory if the MPQ with any of the file in subdirectories
|
|
754
|
+
//
|
|
755
|
+
// The problem:
|
|
756
|
+
// File in the base MPQ: enGB-md5.lst
|
|
757
|
+
// File in the patch MPQ: Campaigns\Liberty.SC2Campaign\enGB.SC2Assets\enGB-md5.lst
|
|
758
|
+
// Campaigns\Liberty.SC2Campaign\enGB.SC2Data\enGB-md5.lst
|
|
759
|
+
// Campaigns\LibertyStory.SC2Campaign\enGB.SC2Data\enGB-md5.lst
|
|
760
|
+
// Campaigns\LibertyStory.SC2Campaign\enGB.SC2Data\enGB-md5.lst Mods\Core.SC2Mod\enGB.SC2Assets\enGB-md5.lst
|
|
761
|
+
// Mods\Core.SC2Mod\enGB.SC2Data\enGB-md5.lst
|
|
762
|
+
// Mods\Liberty.SC2Mod\enGB.SC2Assets\enGB-md5.lst
|
|
763
|
+
// Mods\Liberty.SC2Mod\enGB.SC2Data\enGB-md5.lst
|
|
764
|
+
// Mods\LibertyMulti.SC2Mod\enGB.SC2Data\enGB-md5.lst
|
|
765
|
+
//
|
|
766
|
+
// Solution:
|
|
767
|
+
// We need to match the file by its MD5
|
|
768
|
+
//
|
|
769
|
+
|
|
770
|
+
static bool FindPatchPrefix_SC2_MatchFiles(TMPQArchive * haBase, TMPQArchive * haPatch, TFileEntry * pBaseEntry)
|
|
771
|
+
{
|
|
772
|
+
TMPQNamePrefix * pPatchPrefix;
|
|
773
|
+
char * szPatchFileName;
|
|
774
|
+
char * szPlainName;
|
|
775
|
+
size_t cchWorkBuffer = 0x400;
|
|
776
|
+
bool bResult = false;
|
|
777
|
+
|
|
778
|
+
// First-level patches: Find the same file within the patch archive
|
|
779
|
+
// and verify by MD5-before-patch
|
|
780
|
+
if(haBase->haPatch == NULL)
|
|
781
|
+
{
|
|
782
|
+
TFileEntry * pFileTableEnd = haPatch->pFileTable + haPatch->dwFileTableSize;
|
|
783
|
+
TFileEntry * pFileEntry;
|
|
784
|
+
|
|
785
|
+
// Allocate working buffer for merging LST file
|
|
786
|
+
szPatchFileName = STORM_ALLOC(char, cchWorkBuffer);
|
|
787
|
+
if(szPatchFileName != NULL)
|
|
788
|
+
{
|
|
789
|
+
// Parse the entire file table
|
|
790
|
+
for(pFileEntry = haPatch->pFileTable; pFileEntry < pFileTableEnd; pFileEntry++)
|
|
791
|
+
{
|
|
792
|
+
// Look for "patch_metadata" file
|
|
793
|
+
if(IsPatchMetadataFile(pFileEntry))
|
|
794
|
+
{
|
|
795
|
+
// Construct the name of the MD5 file
|
|
796
|
+
strcpy(szPatchFileName, pFileEntry->szFileName);
|
|
797
|
+
szPlainName = (char *)GetPlainFileName(szPatchFileName);
|
|
798
|
+
strcpy(szPlainName, pBaseEntry->szFileName);
|
|
799
|
+
|
|
800
|
+
// Check for matching MD5 file
|
|
801
|
+
if(IsMatchingPatchFile(haPatch, szPatchFileName, pBaseEntry->md5))
|
|
802
|
+
{
|
|
803
|
+
bResult = CreatePatchPrefix(haPatch, szPatchFileName, (size_t)(szPlainName - szPatchFileName));
|
|
804
|
+
break;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
// Delete the merge buffer
|
|
810
|
+
STORM_FREE(szPatchFileName);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
// For second-level patches, just take the patch prefix from the lower level patch
|
|
815
|
+
else
|
|
816
|
+
{
|
|
817
|
+
// There must be at least two patches in the chain
|
|
818
|
+
assert(haBase->haPatch->pPatchPrefix != NULL);
|
|
819
|
+
pPatchPrefix = haBase->haPatch->pPatchPrefix;
|
|
820
|
+
|
|
821
|
+
// Copy the patch prefix
|
|
822
|
+
bResult = CreatePatchPrefix(haPatch,
|
|
823
|
+
pPatchPrefix->szPatchPrefix,
|
|
824
|
+
pPatchPrefix->nLength);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
return bResult;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
// Note: pBaseEntry is the file entry of the base version of "StreamingBuckets.txt"
|
|
831
|
+
static bool FindPatchPrefix_SC2(TMPQArchive * haBase, TMPQArchive * haPatch, TFileEntry * pBaseEntry)
|
|
832
|
+
{
|
|
833
|
+
// Method 1: Try it by the placement of the archive.
|
|
834
|
+
// Works when someone is opening an archive in the game (sub)directory
|
|
835
|
+
if(FindPatchPrefix_SC2_ArchiveName(haBase, haPatch))
|
|
836
|
+
return true;
|
|
837
|
+
|
|
838
|
+
// Method 2: Try to locate the Name.Ext-PATCH file and read the patch prefix from it
|
|
839
|
+
if(FindPatchPrefix_SC2_HelperFile(haBase, haPatch))
|
|
840
|
+
return true;
|
|
841
|
+
|
|
842
|
+
// Method 3: Try to pair any version of "StreamingBuckets.txt" from the patch MPQ
|
|
843
|
+
// with the "StreamingBuckets.txt" in the base MPQ. Does not always work
|
|
844
|
+
if(FindPatchPrefix_SC2_MatchFiles(haBase, haPatch, pBaseEntry))
|
|
845
|
+
return true;
|
|
846
|
+
|
|
847
|
+
return false;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
//
|
|
851
|
+
// Patch prefix is the path subdirectory where the patched files are within MPQ.
|
|
852
|
+
//
|
|
853
|
+
// Example 1:
|
|
854
|
+
// Main MPQ: locale-enGB.MPQ
|
|
855
|
+
// Patch MPQ: wow-update-12694.MPQ
|
|
856
|
+
// File in main MPQ: DBFilesClient\Achievement.dbc
|
|
857
|
+
// File in patch MPQ: enGB\DBFilesClient\Achievement.dbc
|
|
858
|
+
// Path prefix: enGB
|
|
859
|
+
//
|
|
860
|
+
// Example 2:
|
|
861
|
+
// Main MPQ: expansion1.MPQ
|
|
862
|
+
// Patch MPQ: wow-update-12694.MPQ
|
|
863
|
+
// File in main MPQ: DBFilesClient\Achievement.dbc
|
|
864
|
+
// File in patch MPQ: Base\DBFilesClient\Achievement.dbc
|
|
865
|
+
// Path prefix: Base
|
|
866
|
+
//
|
|
867
|
+
// Example 3:
|
|
868
|
+
// Main MPQ: %GAME%\Battle.net\Battle.net.MPQ
|
|
869
|
+
// Patch MPQ: s2-update-base-26147.MPQ
|
|
870
|
+
// File in main MPQ: Battle.net\i18n\deDE\String\CLIENT_ACHIEVEMENTS.xml
|
|
871
|
+
// File in patch MPQ: Battle.net\Battle.net.MPQ\Battle.net\i18n\deDE\String\CLIENT_ACHIEVEMENTS.xml
|
|
872
|
+
// Path prefix: Battle.net\Battle.net.MPQ
|
|
873
|
+
//
|
|
874
|
+
// Example 4:
|
|
875
|
+
// Main MPQ: %GAME%\Campaigns\Liberty.SC2Campaign\enGB.SC2Data
|
|
876
|
+
// *OR* %ANY_DIR%\%ANY_NAME%Campaigns#Liberty.SC2Campaign#enGB.SC2Data
|
|
877
|
+
// Patch MPQ: s2-update-enGB-23258.MPQ
|
|
878
|
+
// File in main MPQ: LocalizedData\GameHotkeys.txt
|
|
879
|
+
// File in patch MPQ: Campaigns\Liberty.SC2Campaign\enGB.SC2Data\LocalizedData\GameHotkeys.txt
|
|
880
|
+
// Patch Prefix: Campaigns\Liberty.SC2Campaign\enGB.SC2Data
|
|
881
|
+
//
|
|
882
|
+
|
|
883
|
+
static bool FindPatchPrefix(TMPQArchive * haBase, TMPQArchive * haPatch, const char * szPatchPathPrefix)
|
|
884
|
+
{
|
|
885
|
+
TFileEntry * pFileEntry;
|
|
886
|
+
|
|
887
|
+
// If the patch prefix was explicitly entered, we use that one
|
|
888
|
+
if(szPatchPathPrefix != NULL)
|
|
889
|
+
return CreatePatchPrefix(haPatch, szPatchPathPrefix, 0);
|
|
890
|
+
|
|
891
|
+
// Patches for World of Warcraft - they mostly do not use prefix.
|
|
892
|
+
// All patches that use patch prefix have the "base\\(patch_metadata) file present
|
|
893
|
+
if(GetFileEntryLocale(haPatch, "base\\" PATCH_METADATA_NAME, 0))
|
|
894
|
+
return FindPatchPrefix_WoW_13164_13623(haBase, haPatch);
|
|
895
|
+
|
|
896
|
+
// Updates for Starcraft II
|
|
897
|
+
// Match: LocalizedData\GameHotkeys.txt <==> Campaigns\Liberty.SC2Campaign\enGB.SC2Data\LocalizedData\GameHotkeys.txt
|
|
898
|
+
// All Starcraft II base archives seem to have the file "StreamingBuckets.txt" present
|
|
899
|
+
pFileEntry = GetFileEntryLocale(haBase, "StreamingBuckets.txt", 0);
|
|
900
|
+
if(pFileEntry != NULL)
|
|
901
|
+
return FindPatchPrefix_SC2(haBase, haPatch, pFileEntry);
|
|
902
|
+
|
|
903
|
+
// Diablo III patch MPQs don't use patch prefix
|
|
904
|
+
// Hearthstone MPQs don't use patch prefix
|
|
905
|
+
CreatePatchPrefix(haPatch, NULL, 0);
|
|
906
|
+
return true;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
//-----------------------------------------------------------------------------
|
|
910
|
+
// Public functions (StormLib internals)
|
|
911
|
+
|
|
912
|
+
bool IsIncrementalPatchFile(const void * pvData, DWORD cbData, LPDWORD pdwPatchedFileSize)
|
|
913
|
+
{
|
|
914
|
+
PMPQ_PATCH_HEADER pPatchHeader = (PMPQ_PATCH_HEADER)pvData;
|
|
915
|
+
BLIZZARD_BSDIFF40_FILE DiffFile;
|
|
916
|
+
DWORD dwPatchType;
|
|
917
|
+
|
|
918
|
+
if(cbData >= sizeof(MPQ_PATCH_HEADER) + sizeof(BLIZZARD_BSDIFF40_FILE))
|
|
919
|
+
{
|
|
920
|
+
dwPatchType = BSWAP_INT32_UNSIGNED(pPatchHeader->dwPatchType);
|
|
921
|
+
if(dwPatchType == 0x30445342)
|
|
922
|
+
{
|
|
923
|
+
// Give the caller the patch file size
|
|
924
|
+
if(pdwPatchedFileSize != NULL)
|
|
925
|
+
{
|
|
926
|
+
Decompress_RLE((LPBYTE)&DiffFile, sizeof(BLIZZARD_BSDIFF40_FILE), (LPBYTE)(pPatchHeader + 1), sizeof(BLIZZARD_BSDIFF40_FILE));
|
|
927
|
+
DiffFile.NewFileSize = BSWAP_INT64_UNSIGNED(DiffFile.NewFileSize);
|
|
928
|
+
*pdwPatchedFileSize = (DWORD)DiffFile.NewFileSize;
|
|
929
|
+
return true;
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
return false;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
DWORD Patch_InitPatcher(TMPQPatcher * pPatcher, TMPQFile * hf)
|
|
938
|
+
{
|
|
939
|
+
DWORD cbMaxFileData = 0;
|
|
940
|
+
|
|
941
|
+
// Overflow check
|
|
942
|
+
if((cbMaxFileData + (DWORD)sizeof(MPQ_PATCH_HEADER)) < cbMaxFileData)
|
|
943
|
+
return ERROR_NOT_ENOUGH_MEMORY;
|
|
944
|
+
if(hf->hfPatch == NULL)
|
|
945
|
+
return ERROR_INVALID_PARAMETER;
|
|
946
|
+
|
|
947
|
+
// Initialize the entire structure with zeros
|
|
948
|
+
memset(pPatcher, 0, sizeof(TMPQPatcher));
|
|
949
|
+
|
|
950
|
+
// Copy the MD5 of the current file
|
|
951
|
+
memcpy(pPatcher->this_md5, hf->pFileEntry->md5, MD5_DIGEST_SIZE);
|
|
952
|
+
|
|
953
|
+
// Find out the biggest data size needed during the patching process
|
|
954
|
+
while(hf != NULL)
|
|
955
|
+
{
|
|
956
|
+
if(hf->pFileEntry->dwFileSize > cbMaxFileData)
|
|
957
|
+
cbMaxFileData = hf->pFileEntry->dwFileSize;
|
|
958
|
+
hf = hf->hfPatch;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// Allocate primary and secondary buffer
|
|
962
|
+
pPatcher->pbFileData1 = STORM_ALLOC(BYTE, cbMaxFileData);
|
|
963
|
+
pPatcher->pbFileData2 = STORM_ALLOC(BYTE, cbMaxFileData);
|
|
964
|
+
if(!pPatcher->pbFileData1 || !pPatcher->pbFileData2)
|
|
965
|
+
return ERROR_NOT_ENOUGH_MEMORY;
|
|
966
|
+
|
|
967
|
+
pPatcher->cbMaxFileData = cbMaxFileData;
|
|
968
|
+
return ERROR_SUCCESS;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
//
|
|
972
|
+
// Note: The patch may either be applied to the base file or to the previous version
|
|
973
|
+
// In Starcraft II, Mods\Core.SC2Mod\Base.SC2Data, file StreamingBuckets.txt:
|
|
974
|
+
//
|
|
975
|
+
// Base file MD5: 31376b0344b6df59ad009d4296125539
|
|
976
|
+
//
|
|
977
|
+
// s2-update-base-23258: from 31376b0344b6df59ad009d4296125539 to 941a82683452e54bf024a8d491501824
|
|
978
|
+
// s2-update-base-24540: from 31376b0344b6df59ad009d4296125539 to 941a82683452e54bf024a8d491501824
|
|
979
|
+
// s2-update-base-26147: from 31376b0344b6df59ad009d4296125539 to d5d5253c762fac6b9761240288a0771a
|
|
980
|
+
// s2-update-base-28522: from 31376b0344b6df59ad009d4296125539 to 5a76c4b356920aab7afd22e0e1913d7a
|
|
981
|
+
// s2-update-base-30508: from 31376b0344b6df59ad009d4296125539 to 8cb0d4799893fe801cc78ae4488a3671
|
|
982
|
+
// s2-update-base-32283: from 31376b0344b6df59ad009d4296125539 to 8cb0d4799893fe801cc78ae4488a3671
|
|
983
|
+
//
|
|
984
|
+
// We don't keep all intermediate versions in memory, as it would cause massive
|
|
985
|
+
// memory usage during patching process. A prime example is the file
|
|
986
|
+
// DBFilesClient\\Item-Sparse.db2 from locale-enGB.MPQ (WoW 16965), which has
|
|
987
|
+
// 9 patches in a row, each requiring 70 MB memory (35 MB patch data + 35 MB work buffer)
|
|
988
|
+
//
|
|
989
|
+
|
|
990
|
+
DWORD Patch_Process(TMPQPatcher * pPatcher, TMPQFile * hf)
|
|
991
|
+
{
|
|
992
|
+
PMPQ_PATCH_HEADER pFullPatch;
|
|
993
|
+
MPQ_PATCH_HEADER PatchHeader1;
|
|
994
|
+
MPQ_PATCH_HEADER PatchHeader2 = {0};
|
|
995
|
+
TMPQFile * hfBase = hf;
|
|
996
|
+
DWORD cbBytesRead = 0;
|
|
997
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
998
|
+
|
|
999
|
+
// Move to the first patch
|
|
1000
|
+
assert(hfBase->pbFileData == NULL);
|
|
1001
|
+
assert(hfBase->cbFileData == 0);
|
|
1002
|
+
hf = hf->hfPatch;
|
|
1003
|
+
|
|
1004
|
+
// Read the header of the current patch
|
|
1005
|
+
SFileReadFile((HANDLE)hf, &PatchHeader1, sizeof(MPQ_PATCH_HEADER), &cbBytesRead, NULL);
|
|
1006
|
+
if(cbBytesRead != sizeof(MPQ_PATCH_HEADER))
|
|
1007
|
+
return ERROR_FILE_CORRUPT;
|
|
1008
|
+
|
|
1009
|
+
// Perform the patching process
|
|
1010
|
+
while(dwErrCode == ERROR_SUCCESS && hf != NULL)
|
|
1011
|
+
{
|
|
1012
|
+
// Try to read the next patch header. If the md5_before_patch
|
|
1013
|
+
// still matches we go directly to the next one and repeat
|
|
1014
|
+
while(hf->hfPatch != NULL)
|
|
1015
|
+
{
|
|
1016
|
+
// Attempt to read the patch header
|
|
1017
|
+
SFileReadFile((HANDLE)hf->hfPatch, &PatchHeader2, sizeof(MPQ_PATCH_HEADER), &cbBytesRead, NULL);
|
|
1018
|
+
if(cbBytesRead != sizeof(MPQ_PATCH_HEADER))
|
|
1019
|
+
return ERROR_FILE_CORRUPT;
|
|
1020
|
+
|
|
1021
|
+
// Compare the md5_before_patch
|
|
1022
|
+
if(memcmp(PatchHeader2.md5_before_patch, pPatcher->this_md5, MD5_DIGEST_SIZE))
|
|
1023
|
+
break;
|
|
1024
|
+
|
|
1025
|
+
// Move one patch fuhrter
|
|
1026
|
+
PatchHeader1 = PatchHeader2;
|
|
1027
|
+
hf = hf->hfPatch;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
// Allocate memory for the patch data
|
|
1031
|
+
pFullPatch = LoadFullFilePatch(hf, PatchHeader1);
|
|
1032
|
+
if(pFullPatch != NULL)
|
|
1033
|
+
{
|
|
1034
|
+
// Apply the patch
|
|
1035
|
+
dwErrCode = ApplyFilePatch(pPatcher, pFullPatch);
|
|
1036
|
+
STORM_FREE(pFullPatch);
|
|
1037
|
+
}
|
|
1038
|
+
else
|
|
1039
|
+
{
|
|
1040
|
+
dwErrCode = ERROR_FILE_CORRUPT;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// Move to the next patch
|
|
1044
|
+
PatchHeader1 = PatchHeader2;
|
|
1045
|
+
pPatcher->nCounter++;
|
|
1046
|
+
hf = hf->hfPatch;
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
// Put the result data to the file structure
|
|
1050
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1051
|
+
{
|
|
1052
|
+
// Swap the pointer to the file data structure
|
|
1053
|
+
if(pPatcher->nCounter & 0x01)
|
|
1054
|
+
{
|
|
1055
|
+
hfBase->pbFileData = pPatcher->pbFileData2;
|
|
1056
|
+
pPatcher->pbFileData2 = NULL;
|
|
1057
|
+
}
|
|
1058
|
+
else
|
|
1059
|
+
{
|
|
1060
|
+
hfBase->pbFileData = pPatcher->pbFileData1;
|
|
1061
|
+
pPatcher->pbFileData1 = NULL;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
// Also supply the data size
|
|
1065
|
+
hfBase->cbFileData = pPatcher->cbFileData;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
return ERROR_SUCCESS;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
void Patch_Finalize(TMPQPatcher * pPatcher)
|
|
1072
|
+
{
|
|
1073
|
+
if(pPatcher != NULL)
|
|
1074
|
+
{
|
|
1075
|
+
if(pPatcher->pbFileData1 != NULL)
|
|
1076
|
+
STORM_FREE(pPatcher->pbFileData1);
|
|
1077
|
+
if(pPatcher->pbFileData2 != NULL)
|
|
1078
|
+
STORM_FREE(pPatcher->pbFileData2);
|
|
1079
|
+
|
|
1080
|
+
memset(pPatcher, 0, sizeof(TMPQPatcher));
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
//-----------------------------------------------------------------------------
|
|
1085
|
+
// Public functions
|
|
1086
|
+
|
|
1087
|
+
bool WINAPI SFileOpenPatchArchive(
|
|
1088
|
+
HANDLE hMpq,
|
|
1089
|
+
const TCHAR * szPatchMpqName,
|
|
1090
|
+
const char * szPatchPathPrefix,
|
|
1091
|
+
DWORD dwFlags)
|
|
1092
|
+
{
|
|
1093
|
+
TMPQArchive * haPatch;
|
|
1094
|
+
TMPQArchive * ha = (TMPQArchive *)hMpq;
|
|
1095
|
+
HANDLE hPatchMpq = NULL;
|
|
1096
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
1097
|
+
|
|
1098
|
+
// Verify input parameters
|
|
1099
|
+
if(!IsValidMpqHandle(hMpq))
|
|
1100
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
1101
|
+
if(szPatchMpqName == NULL || *szPatchMpqName == 0)
|
|
1102
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
1103
|
+
|
|
1104
|
+
//
|
|
1105
|
+
// We don't allow adding patches to archives that have been open for write
|
|
1106
|
+
//
|
|
1107
|
+
// Error scenario:
|
|
1108
|
+
//
|
|
1109
|
+
// 1) Open archive for writing
|
|
1110
|
+
// 2) Modify or replace a file
|
|
1111
|
+
// 3) Add patch archive to the opened MPQ
|
|
1112
|
+
// 4) Read patched file
|
|
1113
|
+
// 5) Now what?
|
|
1114
|
+
//
|
|
1115
|
+
|
|
1116
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1117
|
+
{
|
|
1118
|
+
if(!(ha->dwFlags & MPQ_FLAG_READ_ONLY))
|
|
1119
|
+
dwErrCode = ERROR_ACCESS_DENIED;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
// Open the archive like it is normal archive
|
|
1123
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1124
|
+
{
|
|
1125
|
+
// These flags will be propagated to SFileOpenArchive
|
|
1126
|
+
dwFlags = (dwFlags & MPQ_OPEN_NO_LISTFILE) | MPQ_OPEN_READ_ONLY | MPQ_OPEN_PATCH;
|
|
1127
|
+
|
|
1128
|
+
// Open the patch as MPQ
|
|
1129
|
+
if(SFileOpenArchive(szPatchMpqName, 0, dwFlags, &hPatchMpq))
|
|
1130
|
+
{
|
|
1131
|
+
// Cast the archive handle to structure pointer
|
|
1132
|
+
haPatch = (TMPQArchive *)hPatchMpq;
|
|
1133
|
+
|
|
1134
|
+
// We need to remember the proper patch prefix to match names of patched files
|
|
1135
|
+
if(FindPatchPrefix(ha, (TMPQArchive *)hPatchMpq, szPatchPathPrefix))
|
|
1136
|
+
{
|
|
1137
|
+
// Now add the patch archive to the list of patches to the original MPQ
|
|
1138
|
+
while(ha != NULL)
|
|
1139
|
+
{
|
|
1140
|
+
if(ha->haPatch == NULL)
|
|
1141
|
+
{
|
|
1142
|
+
haPatch->haBase = ha;
|
|
1143
|
+
ha->haPatch = haPatch;
|
|
1144
|
+
return true;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
// Move to the next archive
|
|
1148
|
+
ha = ha->haPatch;
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
// Close the archive
|
|
1153
|
+
SFileCloseArchive(hPatchMpq);
|
|
1154
|
+
dwErrCode = ERROR_CANT_FIND_PATCH_PREFIX;
|
|
1155
|
+
}
|
|
1156
|
+
else
|
|
1157
|
+
{
|
|
1158
|
+
dwErrCode = GetLastError();
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
SetLastError(dwErrCode);
|
|
1163
|
+
return false;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
bool WINAPI SFileIsPatchedArchive(HANDLE hMpq)
|
|
1167
|
+
{
|
|
1168
|
+
TMPQArchive * ha = (TMPQArchive *)hMpq;
|
|
1169
|
+
|
|
1170
|
+
// Verify input parameters
|
|
1171
|
+
if(!IsValidMpqHandle(hMpq))
|
|
1172
|
+
return false;
|
|
1173
|
+
|
|
1174
|
+
return (ha->haPatch != NULL);
|
|
1175
|
+
}
|