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,1337 @@
|
|
|
1
|
+
/*****************************************************************************/
|
|
2
|
+
/* SFileAddFile.cpp Copyright (c) Ladislav Zezula 2010 */
|
|
3
|
+
/*---------------------------------------------------------------------------*/
|
|
4
|
+
/* MPQ Editing functions */
|
|
5
|
+
/*---------------------------------------------------------------------------*/
|
|
6
|
+
/* Date Ver Who Comment */
|
|
7
|
+
/* -------- ---- --- ------- */
|
|
8
|
+
/* 27.03.10 1.00 Lad Splitted from SFileCreateArchiveEx.cpp */
|
|
9
|
+
/* 21.04.13 1.01 Dea AddFile callback now part of TMPQArchive */
|
|
10
|
+
/*****************************************************************************/
|
|
11
|
+
|
|
12
|
+
#define __STORMLIB_SELF__
|
|
13
|
+
#include "StormLib.h"
|
|
14
|
+
#include "StormCommon.h"
|
|
15
|
+
|
|
16
|
+
//-----------------------------------------------------------------------------
|
|
17
|
+
// Local variables
|
|
18
|
+
|
|
19
|
+
// Mask for lossy compressions
|
|
20
|
+
#define MPQ_LOSSY_COMPRESSION_MASK (MPQ_COMPRESSION_ADPCM_MONO | MPQ_COMPRESSION_ADPCM_STEREO | MPQ_COMPRESSION_HUFFMANN)
|
|
21
|
+
|
|
22
|
+
// Data compression for SFileAddFile
|
|
23
|
+
// Kept here for compatibility with code that was created with StormLib version < 6.50
|
|
24
|
+
static DWORD DefaultDataCompression = MPQ_COMPRESSION_PKWARE;
|
|
25
|
+
|
|
26
|
+
//-----------------------------------------------------------------------------
|
|
27
|
+
// WAVE verification
|
|
28
|
+
|
|
29
|
+
#define FILE_SIGNATURE_RIFF 0x46464952
|
|
30
|
+
#define FILE_SIGNATURE_WAVE 0x45564157
|
|
31
|
+
#define FILE_SIGNATURE_FMT 0x20746D66
|
|
32
|
+
#define AUDIO_FORMAT_PCM 1
|
|
33
|
+
|
|
34
|
+
typedef struct _WAVE_FILE_HEADER
|
|
35
|
+
{
|
|
36
|
+
DWORD dwChunkId; // 0x52494646 ("RIFF")
|
|
37
|
+
DWORD dwChunkSize; // Size of that chunk, in bytes
|
|
38
|
+
DWORD dwFormat; // Must be 0x57415645 ("WAVE")
|
|
39
|
+
|
|
40
|
+
// Format sub-chunk
|
|
41
|
+
DWORD dwSubChunk1Id; // 0x666d7420 ("fmt ")
|
|
42
|
+
DWORD dwSubChunk1Size; // 0x16 for PCM
|
|
43
|
+
USHORT wAudioFormat; // 1 = PCM. Other value means some sort of compression
|
|
44
|
+
USHORT wChannels; // Number of channels
|
|
45
|
+
DWORD dwSampleRate; // 8000, 44100, etc.
|
|
46
|
+
DWORD dwBytesRate; // SampleRate * NumChannels * BitsPerSample/8
|
|
47
|
+
USHORT wBlockAlign; // NumChannels * BitsPerSample/8
|
|
48
|
+
USHORT wBitsPerSample; // 8 bits = 8, 16 bits = 16, etc.
|
|
49
|
+
|
|
50
|
+
// Followed by "data" sub-chunk (we don't care)
|
|
51
|
+
} WAVE_FILE_HEADER, *PWAVE_FILE_HEADER;
|
|
52
|
+
|
|
53
|
+
static bool IsWaveFile_16BitsPerAdpcmSample(
|
|
54
|
+
LPBYTE pbFileData,
|
|
55
|
+
DWORD cbFileData,
|
|
56
|
+
LPDWORD pdwChannels)
|
|
57
|
+
{
|
|
58
|
+
PWAVE_FILE_HEADER pWaveHdr = (PWAVE_FILE_HEADER)pbFileData;
|
|
59
|
+
|
|
60
|
+
// The amount of file data must be at least size of WAVE header
|
|
61
|
+
if(cbFileData > sizeof(WAVE_FILE_HEADER))
|
|
62
|
+
{
|
|
63
|
+
// Check for the RIFF header
|
|
64
|
+
if(pWaveHdr->dwChunkId == FILE_SIGNATURE_RIFF && pWaveHdr->dwFormat == FILE_SIGNATURE_WAVE)
|
|
65
|
+
{
|
|
66
|
+
// Check for ADPCM format
|
|
67
|
+
if(pWaveHdr->dwSubChunk1Id == FILE_SIGNATURE_FMT && pWaveHdr->wAudioFormat == AUDIO_FORMAT_PCM)
|
|
68
|
+
{
|
|
69
|
+
// Now the number of bits per sample must be at least 16.
|
|
70
|
+
// If not, the WAVE file gets corrupted by the ADPCM compression
|
|
71
|
+
if(pWaveHdr->wBitsPerSample >= 0x10)
|
|
72
|
+
{
|
|
73
|
+
*pdwChannels = pWaveHdr->wChannels;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static DWORD FillWritableHandle(
|
|
84
|
+
TMPQArchive * ha,
|
|
85
|
+
TMPQFile * hf,
|
|
86
|
+
ULONGLONG FileTime,
|
|
87
|
+
DWORD dwFileSize,
|
|
88
|
+
DWORD dwFlags)
|
|
89
|
+
{
|
|
90
|
+
TFileEntry * pFileEntry = hf->pFileEntry;
|
|
91
|
+
|
|
92
|
+
// Initialize the hash entry for the file
|
|
93
|
+
hf->RawFilePos = ha->MpqPos + hf->MpqFilePos;
|
|
94
|
+
hf->dwDataSize = dwFileSize;
|
|
95
|
+
|
|
96
|
+
// Initialize the block table entry for the file
|
|
97
|
+
pFileEntry->ByteOffset = hf->MpqFilePos;
|
|
98
|
+
pFileEntry->dwFileSize = dwFileSize;
|
|
99
|
+
pFileEntry->dwCmpSize = 0;
|
|
100
|
+
pFileEntry->dwFlags = dwFlags | MPQ_FILE_EXISTS;
|
|
101
|
+
|
|
102
|
+
// Initialize hashing of the file
|
|
103
|
+
if((hf->hctx = STORM_ALLOC(hash_state, 1)) != NULL)
|
|
104
|
+
md5_init((hash_state *)hf->hctx);
|
|
105
|
+
|
|
106
|
+
// Fill-in file time and CRC
|
|
107
|
+
pFileEntry->FileTime = FileTime;
|
|
108
|
+
pFileEntry->dwCrc32 = crc32(0, Z_NULL, 0);
|
|
109
|
+
|
|
110
|
+
// Mark the archive as modified
|
|
111
|
+
ha->dwFlags |= MPQ_FLAG_CHANGED;
|
|
112
|
+
|
|
113
|
+
// Call the callback, if needed
|
|
114
|
+
if(ha->pfnAddFileCB != NULL)
|
|
115
|
+
ha->pfnAddFileCB(ha->pvAddFileUserData, 0, hf->dwDataSize, false);
|
|
116
|
+
hf->dwAddFileError = ERROR_SUCCESS;
|
|
117
|
+
|
|
118
|
+
return ERROR_SUCCESS;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//-----------------------------------------------------------------------------
|
|
122
|
+
// MPQ write data functions
|
|
123
|
+
|
|
124
|
+
static DWORD WriteDataToMpqFile(
|
|
125
|
+
TMPQArchive * ha,
|
|
126
|
+
TMPQFile * hf,
|
|
127
|
+
LPBYTE pbFileData,
|
|
128
|
+
DWORD dwDataSize,
|
|
129
|
+
DWORD dwCompression)
|
|
130
|
+
{
|
|
131
|
+
TFileEntry * pFileEntry = hf->pFileEntry;
|
|
132
|
+
ULONGLONG ByteOffset;
|
|
133
|
+
LPBYTE pbCompressed = NULL; // Compressed (target) data
|
|
134
|
+
LPBYTE pbToWrite = hf->pbFileSector; // Data to write to the file
|
|
135
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
136
|
+
int nCompressionLevel; // ADPCM compression level (only used for wave files)
|
|
137
|
+
|
|
138
|
+
// Make sure that the caller won't overrun the previously initiated file size
|
|
139
|
+
assert(hf->dwFilePos + dwDataSize <= pFileEntry->dwFileSize);
|
|
140
|
+
assert(hf->dwSectorCount != 0);
|
|
141
|
+
assert(hf->pbFileSector != NULL);
|
|
142
|
+
if((hf->dwFilePos + dwDataSize) > pFileEntry->dwFileSize)
|
|
143
|
+
return ERROR_DISK_FULL;
|
|
144
|
+
|
|
145
|
+
// Now write all data to the file sector buffer
|
|
146
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
147
|
+
{
|
|
148
|
+
DWORD dwBytesInSector = hf->dwFilePos % hf->dwSectorSize;
|
|
149
|
+
DWORD dwSectorIndex = hf->dwFilePos / hf->dwSectorSize;
|
|
150
|
+
DWORD dwBytesToCopy;
|
|
151
|
+
|
|
152
|
+
// Process all data.
|
|
153
|
+
while(dwDataSize != 0)
|
|
154
|
+
{
|
|
155
|
+
dwBytesToCopy = dwDataSize;
|
|
156
|
+
|
|
157
|
+
// Check for sector overflow
|
|
158
|
+
if(dwBytesToCopy > (hf->dwSectorSize - dwBytesInSector))
|
|
159
|
+
dwBytesToCopy = (hf->dwSectorSize - dwBytesInSector);
|
|
160
|
+
|
|
161
|
+
// Copy the data to the file sector
|
|
162
|
+
memcpy(hf->pbFileSector + dwBytesInSector, pbFileData, dwBytesToCopy);
|
|
163
|
+
dwBytesInSector += dwBytesToCopy;
|
|
164
|
+
pbFileData += dwBytesToCopy;
|
|
165
|
+
dwDataSize -= dwBytesToCopy;
|
|
166
|
+
|
|
167
|
+
// Update the file position
|
|
168
|
+
hf->dwFilePos += dwBytesToCopy;
|
|
169
|
+
|
|
170
|
+
// If the current sector is full, or if the file is already full,
|
|
171
|
+
// then write the data to the MPQ
|
|
172
|
+
if(dwBytesInSector >= hf->dwSectorSize || hf->dwFilePos >= pFileEntry->dwFileSize)
|
|
173
|
+
{
|
|
174
|
+
// Set the position in the file
|
|
175
|
+
ByteOffset = hf->RawFilePos + pFileEntry->dwCmpSize;
|
|
176
|
+
|
|
177
|
+
// Update MD5 and CRC32 of the file
|
|
178
|
+
if(hf->hctx != NULL)
|
|
179
|
+
md5_process((hash_state *)hf->hctx, hf->pbFileSector, dwBytesInSector);
|
|
180
|
+
hf->dwCrc32 = crc32(hf->dwCrc32, hf->pbFileSector, dwBytesInSector);
|
|
181
|
+
|
|
182
|
+
// Compress the file sector, if needed
|
|
183
|
+
if(pFileEntry->dwFlags & MPQ_FILE_COMPRESS_MASK)
|
|
184
|
+
{
|
|
185
|
+
int nOutBuffer = (int)dwBytesInSector;
|
|
186
|
+
int nInBuffer = (int)dwBytesInSector;
|
|
187
|
+
|
|
188
|
+
// If the file is compressed, allocate buffer for the compressed data.
|
|
189
|
+
// Note that we allocate buffer that is a bit longer than sector size,
|
|
190
|
+
// for case if the compression method performs a buffer overrun
|
|
191
|
+
if(pbCompressed == NULL)
|
|
192
|
+
{
|
|
193
|
+
pbToWrite = pbCompressed = STORM_ALLOC(BYTE, hf->dwSectorSize + 0x100);
|
|
194
|
+
if(pbCompressed == NULL)
|
|
195
|
+
{
|
|
196
|
+
dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
//
|
|
202
|
+
// Note that both SCompImplode and SCompCompress copy data as-is,
|
|
203
|
+
// if they are unable to compress the data.
|
|
204
|
+
//
|
|
205
|
+
|
|
206
|
+
if(pFileEntry->dwFlags & MPQ_FILE_IMPLODE)
|
|
207
|
+
{
|
|
208
|
+
SCompImplode(pbCompressed, &nOutBuffer, hf->pbFileSector, nInBuffer);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if(pFileEntry->dwFlags & MPQ_FILE_COMPRESS)
|
|
212
|
+
{
|
|
213
|
+
// If this is the first sector, we need to override the given compression
|
|
214
|
+
// by the first sector compression. This is because the entire sector must
|
|
215
|
+
// be compressed by the same compression.
|
|
216
|
+
//
|
|
217
|
+
// Test case:
|
|
218
|
+
//
|
|
219
|
+
// WRITE_FILE(hFile, pvBuffer, 0x10, MPQ_COMPRESSION_PKWARE) // Write 0x10 bytes (sector 0)
|
|
220
|
+
// WRITE_FILE(hFile, pvBuffer, 0x10, MPQ_COMPRESSION_ADPCM_MONO) // Write 0x10 bytes (still sector 0)
|
|
221
|
+
// WRITE_FILE(hFile, pvBuffer, 0x10, MPQ_COMPRESSION_ADPCM_MONO) // Write 0x10 bytes (still sector 0)
|
|
222
|
+
// WRITE_FILE(hFile, pvBuffer, 0x10, MPQ_COMPRESSION_ADPCM_MONO) // Write 0x10 bytes (still sector 0)
|
|
223
|
+
dwCompression = (dwSectorIndex == 0) ? hf->dwCompression0 : dwCompression;
|
|
224
|
+
|
|
225
|
+
// If the caller wants ADPCM compression, we will set wave compression level to 4,
|
|
226
|
+
// which corresponds to medium quality
|
|
227
|
+
nCompressionLevel = (dwCompression & MPQ_LOSSY_COMPRESSION_MASK) ? 4 : -1;
|
|
228
|
+
SCompCompress(pbCompressed, &nOutBuffer, hf->pbFileSector, nInBuffer, (unsigned)dwCompression, 0, nCompressionLevel);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Update sector positions
|
|
232
|
+
dwBytesInSector = nOutBuffer;
|
|
233
|
+
if(hf->SectorOffsets != NULL)
|
|
234
|
+
hf->SectorOffsets[dwSectorIndex+1] = hf->SectorOffsets[dwSectorIndex] + dwBytesInSector;
|
|
235
|
+
|
|
236
|
+
// We have to calculate sector CRC, if enabled
|
|
237
|
+
if(hf->SectorChksums != NULL)
|
|
238
|
+
hf->SectorChksums[dwSectorIndex] = adler32(0, pbCompressed, nOutBuffer);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Encrypt the sector, if necessary
|
|
242
|
+
if(pFileEntry->dwFlags & MPQ_FILE_ENCRYPTED)
|
|
243
|
+
{
|
|
244
|
+
BSWAP_ARRAY32_UNSIGNED(pbToWrite, dwBytesInSector);
|
|
245
|
+
EncryptMpqBlock(pbToWrite, dwBytesInSector, hf->dwFileKey + dwSectorIndex);
|
|
246
|
+
BSWAP_ARRAY32_UNSIGNED(pbToWrite, dwBytesInSector);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Do not allow Warcraft III maps to go over 2GB.
|
|
250
|
+
// https://github.com/ladislav-zezula/StormLib/issues/306
|
|
251
|
+
if((ha->dwFlags & MPQ_FLAG_WAR3_MAP) && (ByteOffset + dwBytesInSector) > 0x7FFFFFFF)
|
|
252
|
+
{
|
|
253
|
+
dwErrCode = ERROR_DISK_FULL;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Write the file sector
|
|
258
|
+
if(!FileStream_Write(ha->pStream, &ByteOffset, pbToWrite, dwBytesInSector))
|
|
259
|
+
{
|
|
260
|
+
dwErrCode = GetLastError();
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Call the compact callback, if any
|
|
265
|
+
if(ha->pfnAddFileCB != NULL)
|
|
266
|
+
ha->pfnAddFileCB(ha->pvAddFileUserData, hf->dwFilePos, hf->dwDataSize, false);
|
|
267
|
+
|
|
268
|
+
// Update the compressed file size
|
|
269
|
+
pFileEntry->dwCmpSize += dwBytesInSector;
|
|
270
|
+
dwBytesInSector = 0;
|
|
271
|
+
dwSectorIndex++;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Cleanup
|
|
277
|
+
if(pbCompressed != NULL)
|
|
278
|
+
STORM_FREE(pbCompressed);
|
|
279
|
+
return dwErrCode;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
//-----------------------------------------------------------------------------
|
|
283
|
+
// Recrypts file data for file renaming
|
|
284
|
+
|
|
285
|
+
static DWORD RecryptFileData(
|
|
286
|
+
TMPQArchive * ha,
|
|
287
|
+
TMPQFile * hf,
|
|
288
|
+
const char * szFileName,
|
|
289
|
+
const char * szNewFileName)
|
|
290
|
+
{
|
|
291
|
+
ULONGLONG RawFilePos;
|
|
292
|
+
TFileEntry * pFileEntry = hf->pFileEntry;
|
|
293
|
+
DWORD dwBytesToRecrypt = pFileEntry->dwCmpSize;
|
|
294
|
+
DWORD dwOldKey;
|
|
295
|
+
DWORD dwNewKey;
|
|
296
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
297
|
+
|
|
298
|
+
// The file must be encrypted
|
|
299
|
+
assert(pFileEntry->dwFlags & MPQ_FILE_ENCRYPTED);
|
|
300
|
+
|
|
301
|
+
// File decryption key is calculated from the plain name
|
|
302
|
+
szNewFileName = GetPlainFileName(szNewFileName);
|
|
303
|
+
szFileName = GetPlainFileName(szFileName);
|
|
304
|
+
|
|
305
|
+
// Calculate both file keys
|
|
306
|
+
dwOldKey = DecryptFileKey(szFileName, pFileEntry->ByteOffset, pFileEntry->dwFileSize, pFileEntry->dwFlags);
|
|
307
|
+
dwNewKey = DecryptFileKey(szNewFileName, pFileEntry->ByteOffset, pFileEntry->dwFileSize, pFileEntry->dwFlags);
|
|
308
|
+
|
|
309
|
+
// Incase the keys are equal, don't recrypt the file
|
|
310
|
+
if(dwNewKey == dwOldKey)
|
|
311
|
+
return ERROR_SUCCESS;
|
|
312
|
+
hf->dwFileKey = dwOldKey;
|
|
313
|
+
|
|
314
|
+
// Calculate the raw position of the file in the archive
|
|
315
|
+
hf->MpqFilePos = pFileEntry->ByteOffset;
|
|
316
|
+
hf->RawFilePos = ha->MpqPos + hf->MpqFilePos;
|
|
317
|
+
|
|
318
|
+
// Allocate buffer for file transfer
|
|
319
|
+
dwErrCode = AllocateSectorBuffer(hf);
|
|
320
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
321
|
+
return dwErrCode;
|
|
322
|
+
|
|
323
|
+
// Also allocate buffer for sector offsets
|
|
324
|
+
// Note: Don't load sector checksums, we don't need to recrypt them
|
|
325
|
+
dwErrCode = AllocateSectorOffsets(hf, true);
|
|
326
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
327
|
+
return dwErrCode;
|
|
328
|
+
|
|
329
|
+
// If we have sector offsets, recrypt these as well
|
|
330
|
+
if(hf->SectorOffsets != NULL)
|
|
331
|
+
{
|
|
332
|
+
// Allocate secondary buffer for sectors copy
|
|
333
|
+
DWORD * SectorOffsetsCopy = STORM_ALLOC(DWORD, hf->SectorOffsets[0] / sizeof(DWORD));
|
|
334
|
+
DWORD dwSectorOffsLen = hf->SectorOffsets[0];
|
|
335
|
+
|
|
336
|
+
if(SectorOffsetsCopy == NULL)
|
|
337
|
+
return ERROR_NOT_ENOUGH_MEMORY;
|
|
338
|
+
|
|
339
|
+
// Recrypt the array of sector offsets
|
|
340
|
+
memcpy(SectorOffsetsCopy, hf->SectorOffsets, dwSectorOffsLen);
|
|
341
|
+
EncryptMpqBlock(SectorOffsetsCopy, dwSectorOffsLen, dwNewKey - 1);
|
|
342
|
+
BSWAP_ARRAY32_UNSIGNED(SectorOffsetsCopy, dwSectorOffsLen);
|
|
343
|
+
|
|
344
|
+
// Write the recrypted array back
|
|
345
|
+
if(!FileStream_Write(ha->pStream, &hf->RawFilePos, SectorOffsetsCopy, dwSectorOffsLen))
|
|
346
|
+
dwErrCode = GetLastError();
|
|
347
|
+
STORM_FREE(SectorOffsetsCopy);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Now we have to recrypt all file sectors. We do it without
|
|
351
|
+
// recompression, because recompression is not necessary in this case
|
|
352
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
353
|
+
{
|
|
354
|
+
for(DWORD dwSector = 0; dwSector < hf->dwSectorCount; dwSector++)
|
|
355
|
+
{
|
|
356
|
+
DWORD dwRawDataInSector = hf->dwSectorSize;
|
|
357
|
+
DWORD dwRawByteOffset = dwSector * hf->dwSectorSize;
|
|
358
|
+
|
|
359
|
+
// Last sector: If there is not enough bytes remaining in the file, cut the raw size
|
|
360
|
+
if(dwRawDataInSector > dwBytesToRecrypt)
|
|
361
|
+
dwRawDataInSector = dwBytesToRecrypt;
|
|
362
|
+
|
|
363
|
+
// Fix the raw data length if the file is compressed
|
|
364
|
+
if(hf->SectorOffsets != NULL)
|
|
365
|
+
{
|
|
366
|
+
dwRawDataInSector = hf->SectorOffsets[dwSector+1] - hf->SectorOffsets[dwSector];
|
|
367
|
+
dwRawByteOffset = hf->SectorOffsets[dwSector];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Calculate the raw file offset of the file sector
|
|
371
|
+
RawFilePos = CalculateRawSectorOffset(hf, dwRawByteOffset);
|
|
372
|
+
|
|
373
|
+
// Read the file sector
|
|
374
|
+
if(!FileStream_Read(ha->pStream, &RawFilePos, hf->pbFileSector, dwRawDataInSector))
|
|
375
|
+
{
|
|
376
|
+
dwErrCode = GetLastError();
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// If necessary, re-encrypt the sector
|
|
381
|
+
// Note: Recompression is not necessary here. Unlike encryption,
|
|
382
|
+
// the compression does not depend on the position of the file in MPQ.
|
|
383
|
+
BSWAP_ARRAY32_UNSIGNED(hf->pbFileSector, dwRawDataInSector);
|
|
384
|
+
DecryptMpqBlock(hf->pbFileSector, dwRawDataInSector, dwOldKey + dwSector);
|
|
385
|
+
EncryptMpqBlock(hf->pbFileSector, dwRawDataInSector, dwNewKey + dwSector);
|
|
386
|
+
BSWAP_ARRAY32_UNSIGNED(hf->pbFileSector, dwRawDataInSector);
|
|
387
|
+
|
|
388
|
+
// Write the sector back
|
|
389
|
+
if(!FileStream_Write(ha->pStream, &RawFilePos, hf->pbFileSector, dwRawDataInSector))
|
|
390
|
+
{
|
|
391
|
+
dwErrCode = GetLastError();
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// Decrement number of bytes remaining
|
|
396
|
+
dwBytesToRecrypt -= hf->dwSectorSize;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return dwErrCode;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
//-----------------------------------------------------------------------------
|
|
404
|
+
// Internal support for MPQ modifications
|
|
405
|
+
|
|
406
|
+
DWORD SFileAddFile_Init(
|
|
407
|
+
TMPQArchive * ha,
|
|
408
|
+
const char * szFileName,
|
|
409
|
+
ULONGLONG FileTime,
|
|
410
|
+
DWORD dwFileSize,
|
|
411
|
+
LCID lcFileLocale,
|
|
412
|
+
DWORD dwFlags,
|
|
413
|
+
TMPQFile ** phf)
|
|
414
|
+
{
|
|
415
|
+
TFileEntry * pFileEntry = NULL;
|
|
416
|
+
TMPQFile * hf = NULL; // File structure for newly added file
|
|
417
|
+
DWORD dwHashIndex = HASH_ENTRY_FREE;
|
|
418
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
419
|
+
|
|
420
|
+
//
|
|
421
|
+
// Note: This is an internal function so no validity checks are done.
|
|
422
|
+
// It is the caller's responsibility to make sure that no invalid
|
|
423
|
+
// flags get to this point
|
|
424
|
+
//
|
|
425
|
+
|
|
426
|
+
// Sestor CRC is not allowed with single unit files
|
|
427
|
+
if(dwFlags & MPQ_FILE_SINGLE_UNIT)
|
|
428
|
+
dwFlags &= ~MPQ_FILE_SECTOR_CRC;
|
|
429
|
+
|
|
430
|
+
// Sector CRC is not allowed if the file is not compressed
|
|
431
|
+
if(!(dwFlags & MPQ_FILE_COMPRESS_MASK))
|
|
432
|
+
dwFlags &= ~MPQ_FILE_SECTOR_CRC;
|
|
433
|
+
|
|
434
|
+
// Fix Key is not allowed if the file is not encrypted
|
|
435
|
+
if(!(dwFlags & MPQ_FILE_ENCRYPTED))
|
|
436
|
+
dwFlags &= ~MPQ_FILE_KEY_V2;
|
|
437
|
+
|
|
438
|
+
// If the MPQ is of version 3.0 or higher, we ignore file locale.
|
|
439
|
+
// This is because HET and BET tables have no known support for it
|
|
440
|
+
if(ha->pHeader->wFormatVersion >= MPQ_FORMAT_VERSION_3)
|
|
441
|
+
lcFileLocale = 0;
|
|
442
|
+
|
|
443
|
+
// Allocate the TMPQFile entry for newly added file
|
|
444
|
+
hf = CreateWritableHandle(ha, dwFileSize);
|
|
445
|
+
if(hf == NULL)
|
|
446
|
+
return false;
|
|
447
|
+
|
|
448
|
+
// Allocate file entry in the MPQ
|
|
449
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
450
|
+
{
|
|
451
|
+
// Check if the file already exists in the archive
|
|
452
|
+
pFileEntry = GetFileEntryExact(ha, szFileName, lcFileLocale, &dwHashIndex);
|
|
453
|
+
if(pFileEntry != NULL)
|
|
454
|
+
{
|
|
455
|
+
if(dwFlags & MPQ_FILE_REPLACEEXISTING)
|
|
456
|
+
InvalidateInternalFiles(ha);
|
|
457
|
+
else
|
|
458
|
+
dwErrCode = ERROR_ALREADY_EXISTS;
|
|
459
|
+
}
|
|
460
|
+
else
|
|
461
|
+
{
|
|
462
|
+
// Attempt to allocate new file entry
|
|
463
|
+
pFileEntry = AllocateFileEntry(ha, szFileName, lcFileLocale, &dwHashIndex);
|
|
464
|
+
if(pFileEntry != NULL)
|
|
465
|
+
InvalidateInternalFiles(ha);
|
|
466
|
+
else
|
|
467
|
+
dwErrCode = ERROR_DISK_FULL;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Set the file entry to the file structure
|
|
471
|
+
hf->pFileEntry = pFileEntry;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
// Prepare the pointer to hash table entry
|
|
475
|
+
if(dwErrCode == ERROR_SUCCESS && ha->pHashTable != NULL && dwHashIndex < ha->pHeader->dwHashTableSize)
|
|
476
|
+
{
|
|
477
|
+
hf->pHashEntry = ha->pHashTable + dwHashIndex;
|
|
478
|
+
hf->pHashEntry->Locale = SFILE_LOCALE(lcFileLocale);
|
|
479
|
+
hf->pHashEntry->Platform = SFILE_PLATFORM(lcFileLocale);
|
|
480
|
+
hf->pHashEntry->Reserved = 0;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Prepare the file key
|
|
484
|
+
if(dwErrCode == ERROR_SUCCESS && (dwFlags & MPQ_FILE_ENCRYPTED))
|
|
485
|
+
{
|
|
486
|
+
hf->dwFileKey = DecryptFileKey(szFileName, hf->MpqFilePos, dwFileSize, dwFlags);
|
|
487
|
+
if(hf->dwFileKey == 0)
|
|
488
|
+
dwErrCode = ERROR_UNKNOWN_FILE_KEY;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// Fill the file entry and TMPQFile structure
|
|
492
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
493
|
+
{
|
|
494
|
+
// At this point, the file name in the file entry must be set
|
|
495
|
+
assert(pFileEntry->szFileName != NULL);
|
|
496
|
+
assert(_stricmp(pFileEntry->szFileName, szFileName) == 0);
|
|
497
|
+
|
|
498
|
+
dwErrCode = FillWritableHandle(ha, hf, FileTime, dwFileSize, dwFlags);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Free the file handle if failed
|
|
502
|
+
if(dwErrCode != ERROR_SUCCESS && hf != NULL)
|
|
503
|
+
FreeFileHandle(hf);
|
|
504
|
+
|
|
505
|
+
// Give the handle to the caller
|
|
506
|
+
*phf = hf;
|
|
507
|
+
return dwErrCode;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
DWORD SFileAddFile_Init(
|
|
511
|
+
TMPQArchive * ha,
|
|
512
|
+
TMPQFile * hfSrc,
|
|
513
|
+
TMPQFile ** phf)
|
|
514
|
+
{
|
|
515
|
+
TFileEntry * pFileEntry = NULL;
|
|
516
|
+
TMPQFile * hf = NULL; // File structure for newly added file
|
|
517
|
+
ULONGLONG FileTime = hfSrc->pFileEntry->FileTime;
|
|
518
|
+
DWORD dwFileSize = hfSrc->pFileEntry->dwFileSize;
|
|
519
|
+
DWORD dwFlags = hfSrc->pFileEntry->dwFlags;
|
|
520
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
521
|
+
|
|
522
|
+
// Allocate the TMPQFile entry for newly added file
|
|
523
|
+
hf = CreateWritableHandle(ha, dwFileSize);
|
|
524
|
+
if(hf == NULL)
|
|
525
|
+
dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
|
|
526
|
+
|
|
527
|
+
// We need to keep the file entry index the same like in the source archive
|
|
528
|
+
// This is because multiple hash table entries can point to the same file entry
|
|
529
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
530
|
+
{
|
|
531
|
+
// Retrieve the file entry for the target file
|
|
532
|
+
pFileEntry = ha->pFileTable + (hfSrc->pFileEntry - hfSrc->ha->pFileTable);
|
|
533
|
+
|
|
534
|
+
// Copy all variables except file name
|
|
535
|
+
if((pFileEntry->dwFlags & MPQ_FILE_EXISTS) == 0)
|
|
536
|
+
{
|
|
537
|
+
pFileEntry[0] = hfSrc->pFileEntry[0];
|
|
538
|
+
pFileEntry->szFileName = NULL;
|
|
539
|
+
}
|
|
540
|
+
else
|
|
541
|
+
dwErrCode = ERROR_ALREADY_EXISTS;
|
|
542
|
+
|
|
543
|
+
// Set the file entry to the file structure
|
|
544
|
+
hf->pFileEntry = pFileEntry;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// Prepare the pointer to hash table entry
|
|
548
|
+
if(dwErrCode == ERROR_SUCCESS && ha->pHashTable != NULL && hfSrc->pHashEntry != NULL)
|
|
549
|
+
{
|
|
550
|
+
hf->dwHashIndex = (DWORD)(hfSrc->pHashEntry - hfSrc->ha->pHashTable);
|
|
551
|
+
hf->pHashEntry = ha->pHashTable + hf->dwHashIndex;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// Prepare the file key (copy from source file)
|
|
555
|
+
if(dwErrCode == ERROR_SUCCESS && (dwFlags & MPQ_FILE_ENCRYPTED))
|
|
556
|
+
{
|
|
557
|
+
hf->dwFileKey = hfSrc->dwFileKey;
|
|
558
|
+
if(hf->dwFileKey == 0)
|
|
559
|
+
dwErrCode = ERROR_UNKNOWN_FILE_KEY;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// Fill the file entry and TMPQFile structure
|
|
563
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
564
|
+
{
|
|
565
|
+
dwErrCode = FillWritableHandle(ha, hf, FileTime, dwFileSize, dwFlags);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// Free the file handle if failed
|
|
569
|
+
if(dwErrCode != ERROR_SUCCESS && hf != NULL)
|
|
570
|
+
FreeFileHandle(hf);
|
|
571
|
+
|
|
572
|
+
// Give the handle to the caller
|
|
573
|
+
*phf = hf;
|
|
574
|
+
return dwErrCode;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
DWORD SFileAddFile_Write(TMPQFile * hf, const void * pvData, DWORD dwSize, DWORD dwCompression)
|
|
578
|
+
{
|
|
579
|
+
TMPQArchive * ha;
|
|
580
|
+
TFileEntry * pFileEntry;
|
|
581
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
582
|
+
|
|
583
|
+
// Don't bother if the caller gave us zero size
|
|
584
|
+
if(pvData == NULL || dwSize == 0)
|
|
585
|
+
return ERROR_SUCCESS;
|
|
586
|
+
|
|
587
|
+
// Get pointer to the MPQ archive
|
|
588
|
+
pFileEntry = hf->pFileEntry;
|
|
589
|
+
ha = hf->ha;
|
|
590
|
+
|
|
591
|
+
// Allocate file buffers
|
|
592
|
+
if(hf->pbFileSector == NULL)
|
|
593
|
+
{
|
|
594
|
+
ULONGLONG RawFilePos = hf->RawFilePos;
|
|
595
|
+
|
|
596
|
+
// Allocate buffer for file sector
|
|
597
|
+
hf->dwAddFileError = dwErrCode = AllocateSectorBuffer(hf);
|
|
598
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
599
|
+
return dwErrCode;
|
|
600
|
+
|
|
601
|
+
// Allocate patch info, if the data is patch
|
|
602
|
+
if(hf->pPatchInfo == NULL && IsIncrementalPatchFile(pvData, dwSize, &hf->dwPatchedFileSize))
|
|
603
|
+
{
|
|
604
|
+
// Set the MPQ_FILE_PATCH_FILE flag
|
|
605
|
+
pFileEntry->dwFlags |= MPQ_FILE_PATCH_FILE;
|
|
606
|
+
|
|
607
|
+
// Allocate the patch info
|
|
608
|
+
hf->dwAddFileError = dwErrCode = AllocatePatchInfo(hf, false);
|
|
609
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
610
|
+
return dwErrCode;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Allocate sector offsets
|
|
614
|
+
if(hf->SectorOffsets == NULL)
|
|
615
|
+
{
|
|
616
|
+
hf->dwAddFileError = dwErrCode = AllocateSectorOffsets(hf, false);
|
|
617
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
618
|
+
return dwErrCode;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// Create array of sector checksums
|
|
622
|
+
if(hf->SectorChksums == NULL && (pFileEntry->dwFlags & MPQ_FILE_SECTOR_CRC))
|
|
623
|
+
{
|
|
624
|
+
hf->dwAddFileError = dwErrCode = AllocateSectorChecksums(hf, false);
|
|
625
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
626
|
+
return dwErrCode;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Pre-save the patch info, if any
|
|
630
|
+
if(hf->pPatchInfo != NULL)
|
|
631
|
+
{
|
|
632
|
+
if(!FileStream_Write(ha->pStream, &RawFilePos, hf->pPatchInfo, hf->pPatchInfo->dwLength))
|
|
633
|
+
dwErrCode = GetLastError();
|
|
634
|
+
|
|
635
|
+
pFileEntry->dwCmpSize += hf->pPatchInfo->dwLength;
|
|
636
|
+
RawFilePos += hf->pPatchInfo->dwLength;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
// Pre-save the sector offset table, just to reserve space in the file.
|
|
640
|
+
// Note that we dont need to swap the sector positions, nor encrypt the table
|
|
641
|
+
// at the moment, as it will be written again after writing all file sectors.
|
|
642
|
+
if(hf->SectorOffsets != NULL)
|
|
643
|
+
{
|
|
644
|
+
if(!FileStream_Write(ha->pStream, &RawFilePos, hf->SectorOffsets, hf->SectorOffsets[0]))
|
|
645
|
+
dwErrCode = GetLastError();
|
|
646
|
+
|
|
647
|
+
pFileEntry->dwCmpSize += hf->SectorOffsets[0];
|
|
648
|
+
RawFilePos += hf->SectorOffsets[0];
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// Write the MPQ data to the file
|
|
653
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
654
|
+
{
|
|
655
|
+
// Save the first sector compression to the file structure
|
|
656
|
+
// Note that the entire first file sector will be compressed
|
|
657
|
+
// by compression that was passed to the first call of SFileAddFile_Write
|
|
658
|
+
if(hf->dwFilePos == 0)
|
|
659
|
+
hf->dwCompression0 = dwCompression;
|
|
660
|
+
|
|
661
|
+
// Write the data to the MPQ
|
|
662
|
+
dwErrCode = WriteDataToMpqFile(ha, hf, (LPBYTE)pvData, dwSize, dwCompression);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// If it succeeded and we wrote all the file data,
|
|
666
|
+
// we need to re-save sector offset table
|
|
667
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
668
|
+
{
|
|
669
|
+
if(hf->dwFilePos >= pFileEntry->dwFileSize)
|
|
670
|
+
{
|
|
671
|
+
// Finish calculating CRC32
|
|
672
|
+
pFileEntry->dwCrc32 = hf->dwCrc32;
|
|
673
|
+
|
|
674
|
+
// Finish calculating MD5
|
|
675
|
+
if(hf->hctx != NULL)
|
|
676
|
+
md5_done((hash_state *)hf->hctx, pFileEntry->md5);
|
|
677
|
+
|
|
678
|
+
// If we also have sector checksums, write them to the file
|
|
679
|
+
if(hf->SectorChksums != NULL)
|
|
680
|
+
{
|
|
681
|
+
dwErrCode = WriteSectorChecksums(hf);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// Now write patch info
|
|
685
|
+
if(hf->pPatchInfo != NULL)
|
|
686
|
+
{
|
|
687
|
+
memcpy(hf->pPatchInfo->md5, pFileEntry->md5, MD5_DIGEST_SIZE);
|
|
688
|
+
hf->pPatchInfo->dwDataSize = pFileEntry->dwFileSize;
|
|
689
|
+
pFileEntry->dwFileSize = hf->dwPatchedFileSize;
|
|
690
|
+
dwErrCode = WritePatchInfo(hf);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
// Now write sector offsets to the file
|
|
694
|
+
if(hf->SectorOffsets != NULL)
|
|
695
|
+
{
|
|
696
|
+
dwErrCode = WriteSectorOffsets(hf);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// Write the MD5 hashes of each file chunk, if required
|
|
700
|
+
if(ha->pHeader->dwRawChunkSize != 0)
|
|
701
|
+
{
|
|
702
|
+
dwErrCode = WriteMpqDataMD5(ha->pStream,
|
|
703
|
+
ha->MpqPos + pFileEntry->ByteOffset,
|
|
704
|
+
hf->pFileEntry->dwCmpSize,
|
|
705
|
+
ha->pHeader->dwRawChunkSize);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Update the archive size
|
|
711
|
+
if((ha->MpqPos + pFileEntry->ByteOffset + pFileEntry->dwCmpSize) > ha->FileSize)
|
|
712
|
+
ha->FileSize = ha->MpqPos + pFileEntry->ByteOffset + pFileEntry->dwCmpSize;
|
|
713
|
+
|
|
714
|
+
// Store the error code from the Write File operation
|
|
715
|
+
hf->dwAddFileError = dwErrCode;
|
|
716
|
+
return dwErrCode;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
DWORD SFileAddFile_Finish(TMPQFile * hf)
|
|
720
|
+
{
|
|
721
|
+
TMPQArchive * ha = hf->ha;
|
|
722
|
+
TFileEntry * pFileEntry = hf->pFileEntry;
|
|
723
|
+
DWORD dwErrCode = hf->dwAddFileError;
|
|
724
|
+
|
|
725
|
+
// If all previous operations succeeded, we can update the MPQ
|
|
726
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
727
|
+
{
|
|
728
|
+
// Verify if the caller wrote the file properly
|
|
729
|
+
if(hf->pPatchInfo == NULL)
|
|
730
|
+
{
|
|
731
|
+
assert(pFileEntry != NULL);
|
|
732
|
+
if(hf->dwFilePos != pFileEntry->dwFileSize)
|
|
733
|
+
dwErrCode = ERROR_CAN_NOT_COMPLETE;
|
|
734
|
+
}
|
|
735
|
+
else
|
|
736
|
+
{
|
|
737
|
+
if(hf->dwFilePos != hf->pPatchInfo->dwDataSize)
|
|
738
|
+
dwErrCode = ERROR_CAN_NOT_COMPLETE;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// Now we need to recreate the HET table, if exists
|
|
743
|
+
if(dwErrCode == ERROR_SUCCESS && ha->pHetTable != NULL)
|
|
744
|
+
{
|
|
745
|
+
dwErrCode = RebuildHetTable(ha);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
// Update the block table size
|
|
749
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
750
|
+
{
|
|
751
|
+
// Call the user callback, if any
|
|
752
|
+
if(ha->pfnAddFileCB != NULL)
|
|
753
|
+
ha->pfnAddFileCB(ha->pvAddFileUserData, hf->dwDataSize, hf->dwDataSize, true);
|
|
754
|
+
}
|
|
755
|
+
else
|
|
756
|
+
{
|
|
757
|
+
// Free the file entry in MPQ tables
|
|
758
|
+
if(pFileEntry != NULL)
|
|
759
|
+
DeleteFileEntry(ha, hf);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
// Clear the add file callback
|
|
763
|
+
FreeFileHandle(hf);
|
|
764
|
+
return dwErrCode;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
//-----------------------------------------------------------------------------
|
|
768
|
+
// Adds data as file to the archive
|
|
769
|
+
|
|
770
|
+
bool WINAPI SFileCreateFile(
|
|
771
|
+
HANDLE hMpq,
|
|
772
|
+
const char * szArchivedName,
|
|
773
|
+
ULONGLONG FileTime,
|
|
774
|
+
DWORD dwFileSize,
|
|
775
|
+
LCID lcFileLocale,
|
|
776
|
+
DWORD dwFlags,
|
|
777
|
+
HANDLE * phFile)
|
|
778
|
+
{
|
|
779
|
+
TMPQArchive * ha = (TMPQArchive *)hMpq;
|
|
780
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
781
|
+
|
|
782
|
+
// Check valid parameters
|
|
783
|
+
if(!IsValidMpqHandle(hMpq))
|
|
784
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
785
|
+
if(szArchivedName == NULL || *szArchivedName == 0)
|
|
786
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
787
|
+
if(phFile == NULL)
|
|
788
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
789
|
+
|
|
790
|
+
// Don't allow to add file if the MPQ is open for read only
|
|
791
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
792
|
+
{
|
|
793
|
+
if(ha->dwFlags & MPQ_FLAG_READ_ONLY)
|
|
794
|
+
dwErrCode = ERROR_ACCESS_DENIED;
|
|
795
|
+
|
|
796
|
+
// Don't allow to add a file under pseudo-file name
|
|
797
|
+
if(IsPseudoFileName(szArchivedName, NULL))
|
|
798
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
799
|
+
|
|
800
|
+
// Don't allow to add any of the internal files
|
|
801
|
+
if(IsInternalMpqFileName(szArchivedName))
|
|
802
|
+
dwErrCode = ERROR_INTERNAL_FILE;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// Perform validity check of the MPQ flags
|
|
806
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
807
|
+
{
|
|
808
|
+
// Mask all unsupported flags out
|
|
809
|
+
dwFlags &= ha->dwValidFileFlags;
|
|
810
|
+
|
|
811
|
+
// Check for valid flag combinations
|
|
812
|
+
if((dwFlags & (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS)) == (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS))
|
|
813
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
// Initiate the add file operation
|
|
817
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
818
|
+
dwErrCode = SFileAddFile_Init(ha, szArchivedName, FileTime, dwFileSize, lcFileLocale, dwFlags, (TMPQFile **)phFile);
|
|
819
|
+
|
|
820
|
+
// Deal with the errors
|
|
821
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
822
|
+
SetLastError(dwErrCode);
|
|
823
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
bool WINAPI SFileWriteFile(
|
|
827
|
+
HANDLE hFile,
|
|
828
|
+
const void * pvData,
|
|
829
|
+
DWORD dwSize,
|
|
830
|
+
DWORD dwCompression)
|
|
831
|
+
{
|
|
832
|
+
TMPQFile * hf = (TMPQFile *)hFile;
|
|
833
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
834
|
+
|
|
835
|
+
// Check the proper parameters
|
|
836
|
+
if(!IsValidFileHandle(hFile))
|
|
837
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
838
|
+
if(hf->bIsWriteHandle == false)
|
|
839
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
840
|
+
|
|
841
|
+
// Special checks for single unit files
|
|
842
|
+
if(dwErrCode == ERROR_SUCCESS && (hf->pFileEntry->dwFlags & MPQ_FILE_SINGLE_UNIT))
|
|
843
|
+
{
|
|
844
|
+
//
|
|
845
|
+
// Note: Blizzard doesn't support single unit files
|
|
846
|
+
// that are stored as encrypted or imploded. We will allow them here,
|
|
847
|
+
// the calling application must ensure that such flag combination doesn't get here
|
|
848
|
+
//
|
|
849
|
+
|
|
850
|
+
// if(dwFlags & MPQ_FILE_IMPLODE)
|
|
851
|
+
// dwErrCode = ERROR_INVALID_PARAMETER;
|
|
852
|
+
//
|
|
853
|
+
// if(dwFlags & MPQ_FILE_ENCRYPTED)
|
|
854
|
+
// dwErrCode = ERROR_INVALID_PARAMETER;
|
|
855
|
+
|
|
856
|
+
// Lossy compression is not allowed on single unit files
|
|
857
|
+
if(dwCompression & MPQ_LOSSY_COMPRESSION_MASK)
|
|
858
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
// Write the data to the file
|
|
863
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
864
|
+
dwErrCode = SFileAddFile_Write(hf, pvData, dwSize, dwCompression);
|
|
865
|
+
|
|
866
|
+
// Deal with errors
|
|
867
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
868
|
+
SetLastError(dwErrCode);
|
|
869
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
bool WINAPI SFileFinishFile(HANDLE hFile)
|
|
873
|
+
{
|
|
874
|
+
TMPQFile * hf = (TMPQFile *)hFile;
|
|
875
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
876
|
+
|
|
877
|
+
// Check the proper parameters
|
|
878
|
+
if(!IsValidFileHandle(hFile))
|
|
879
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
880
|
+
if(hf->bIsWriteHandle == false)
|
|
881
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
882
|
+
|
|
883
|
+
// Finish the file
|
|
884
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
885
|
+
dwErrCode = SFileAddFile_Finish(hf);
|
|
886
|
+
|
|
887
|
+
// Deal with errors
|
|
888
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
889
|
+
SetLastError(dwErrCode);
|
|
890
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
//-----------------------------------------------------------------------------
|
|
894
|
+
// Adds a file to the archive
|
|
895
|
+
|
|
896
|
+
bool WINAPI SFileAddFileEx(
|
|
897
|
+
HANDLE hMpq,
|
|
898
|
+
const TCHAR * szFileName,
|
|
899
|
+
const char * szArchivedName,
|
|
900
|
+
DWORD dwFlags,
|
|
901
|
+
DWORD dwCompression, // Compression of the first sector
|
|
902
|
+
DWORD dwCompressionNext) // Compression of next sectors
|
|
903
|
+
{
|
|
904
|
+
ULONGLONG FileSize = 0;
|
|
905
|
+
ULONGLONG FileTime = 0;
|
|
906
|
+
TFileStream * pStream = NULL;
|
|
907
|
+
TMPQArchive * ha;
|
|
908
|
+
HANDLE hMpqFile = NULL;
|
|
909
|
+
LPBYTE pbFileData = NULL;
|
|
910
|
+
DWORD dwBytesRemaining = 0;
|
|
911
|
+
DWORD dwBytesToRead;
|
|
912
|
+
DWORD dwSectorSize = 0x1000;
|
|
913
|
+
DWORD dwChannels = 0;
|
|
914
|
+
bool bIsAdpcmCompression = false;
|
|
915
|
+
bool bIsFirstSector = true;
|
|
916
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
917
|
+
|
|
918
|
+
// Check parameters
|
|
919
|
+
if(hMpq == NULL || szFileName == NULL || *szFileName == 0 || (ha = IsValidMpqHandle(hMpq)) == NULL)
|
|
920
|
+
{
|
|
921
|
+
SetLastError(ERROR_INVALID_PARAMETER);
|
|
922
|
+
return false;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
// Open added file
|
|
926
|
+
pStream = FileStream_OpenFile(szFileName, STREAM_FLAG_READ_ONLY | STREAM_PROVIDER_FLAT | BASE_PROVIDER_FILE);
|
|
927
|
+
if(pStream == NULL)
|
|
928
|
+
return false;
|
|
929
|
+
|
|
930
|
+
// Files bigger than 4GB cannot be added to MPQ
|
|
931
|
+
FileStream_GetTime(pStream, &FileTime);
|
|
932
|
+
FileStream_GetSize(pStream, &FileSize);
|
|
933
|
+
if(FileSize >> 32)
|
|
934
|
+
dwErrCode = ERROR_DISK_FULL;
|
|
935
|
+
|
|
936
|
+
// Allocate data buffer for reading from the source file
|
|
937
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
938
|
+
{
|
|
939
|
+
dwBytesRemaining = (DWORD)FileSize;
|
|
940
|
+
pbFileData = STORM_ALLOC(BYTE, dwSectorSize);
|
|
941
|
+
if(pbFileData == NULL)
|
|
942
|
+
dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
// LZMA compression can only be present in MPQ version 2 or higher
|
|
946
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
947
|
+
{
|
|
948
|
+
if(dwCompression == MPQ_COMPRESSION_LZMA && ha->pHeader->wFormatVersion == MPQ_FORMAT_VERSION_1)
|
|
949
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
// Deal with various combination of compressions
|
|
953
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
954
|
+
{
|
|
955
|
+
// When the compression for next blocks is set to default,
|
|
956
|
+
// we will copy the compression for the first sector
|
|
957
|
+
if(dwCompressionNext == MPQ_COMPRESSION_NEXT_SAME)
|
|
958
|
+
dwCompressionNext = dwCompression;
|
|
959
|
+
|
|
960
|
+
// If the caller wants ADPCM compression, we make sure
|
|
961
|
+
// that the first sector is not compressed with lossy compression
|
|
962
|
+
if(dwCompressionNext & (MPQ_COMPRESSION_ADPCM_MONO | MPQ_COMPRESSION_ADPCM_STEREO))
|
|
963
|
+
{
|
|
964
|
+
// The compression of the first file sector must not be ADPCM
|
|
965
|
+
// in order not to corrupt the headers
|
|
966
|
+
if(dwCompression & (MPQ_COMPRESSION_ADPCM_MONO | MPQ_COMPRESSION_ADPCM_STEREO))
|
|
967
|
+
dwCompression = MPQ_COMPRESSION_PKWARE;
|
|
968
|
+
|
|
969
|
+
// Remove both flag mono and stereo flags.
|
|
970
|
+
// They will be re-added according to WAVE type
|
|
971
|
+
dwCompressionNext &= ~(MPQ_COMPRESSION_ADPCM_MONO | MPQ_COMPRESSION_ADPCM_STEREO);
|
|
972
|
+
bIsAdpcmCompression = true;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
// Initiate adding file to the MPQ
|
|
976
|
+
if(!SFileCreateFile(hMpq, szArchivedName, FileTime, (DWORD)FileSize, g_lcFileLocale, dwFlags, &hMpqFile))
|
|
977
|
+
dwErrCode = GetLastError();
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
// Write the file data to the MPQ
|
|
981
|
+
while(dwErrCode == ERROR_SUCCESS && dwBytesRemaining != 0)
|
|
982
|
+
{
|
|
983
|
+
// Get the number of bytes remaining in the source file
|
|
984
|
+
dwBytesToRead = dwBytesRemaining;
|
|
985
|
+
if(dwBytesToRead > dwSectorSize)
|
|
986
|
+
dwBytesToRead = dwSectorSize;
|
|
987
|
+
|
|
988
|
+
// Read data from the local file
|
|
989
|
+
if(!FileStream_Read(pStream, NULL, pbFileData, dwBytesToRead))
|
|
990
|
+
{
|
|
991
|
+
dwErrCode = GetLastError();
|
|
992
|
+
break;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// If the file being added is a WAVE file, we check number of channels
|
|
996
|
+
if(bIsFirstSector && bIsAdpcmCompression)
|
|
997
|
+
{
|
|
998
|
+
// The file must really be a WAVE file with at least 16 bits per sample,
|
|
999
|
+
// otherwise the ADPCM compression will corrupt it
|
|
1000
|
+
if(IsWaveFile_16BitsPerAdpcmSample(pbFileData, dwBytesToRead, &dwChannels))
|
|
1001
|
+
{
|
|
1002
|
+
// Setup the compression of next sectors according to number of channels
|
|
1003
|
+
dwCompressionNext |= (dwChannels == 1) ? MPQ_COMPRESSION_ADPCM_MONO : MPQ_COMPRESSION_ADPCM_STEREO;
|
|
1004
|
+
}
|
|
1005
|
+
else
|
|
1006
|
+
{
|
|
1007
|
+
// Setup the compression of next sectors to a lossless compression
|
|
1008
|
+
dwCompressionNext = (dwCompression & MPQ_LOSSY_COMPRESSION_MASK) ? MPQ_COMPRESSION_PKWARE : dwCompression;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
bIsFirstSector = false;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
// Add the file sectors to the MPQ
|
|
1015
|
+
if(!SFileWriteFile(hMpqFile, pbFileData, dwBytesToRead, dwCompression))
|
|
1016
|
+
{
|
|
1017
|
+
dwErrCode = GetLastError();
|
|
1018
|
+
break;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
// Set the next data compression
|
|
1022
|
+
dwBytesRemaining -= dwBytesToRead;
|
|
1023
|
+
dwCompression = dwCompressionNext;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
// Finish the file writing
|
|
1027
|
+
if(hMpqFile != NULL)
|
|
1028
|
+
{
|
|
1029
|
+
if(!SFileFinishFile(hMpqFile))
|
|
1030
|
+
dwErrCode = GetLastError();
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
// Cleanup and exit
|
|
1034
|
+
if(pbFileData != NULL)
|
|
1035
|
+
STORM_FREE(pbFileData);
|
|
1036
|
+
if(pStream != NULL)
|
|
1037
|
+
FileStream_Close(pStream);
|
|
1038
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
1039
|
+
SetLastError(dwErrCode);
|
|
1040
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// Adds a data file into the archive
|
|
1044
|
+
bool WINAPI SFileAddFile(HANDLE hMpq, const TCHAR * szFileName, const char * szArchivedName, DWORD dwFlags)
|
|
1045
|
+
{
|
|
1046
|
+
return SFileAddFileEx(hMpq,
|
|
1047
|
+
szFileName,
|
|
1048
|
+
szArchivedName,
|
|
1049
|
+
dwFlags,
|
|
1050
|
+
DefaultDataCompression,
|
|
1051
|
+
DefaultDataCompression);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
// Adds a WAVE file into the archive
|
|
1055
|
+
bool WINAPI SFileAddWave(HANDLE hMpq, const TCHAR * szFileName, const char * szArchivedName, DWORD dwFlags, DWORD dwQuality)
|
|
1056
|
+
{
|
|
1057
|
+
DWORD dwCompression = 0;
|
|
1058
|
+
|
|
1059
|
+
//
|
|
1060
|
+
// Note to wave compression level:
|
|
1061
|
+
// The following conversion table applied:
|
|
1062
|
+
// High quality: WaveCompressionLevel = -1
|
|
1063
|
+
// Medium quality: WaveCompressionLevel = 4
|
|
1064
|
+
// Low quality: WaveCompressionLevel = 2
|
|
1065
|
+
//
|
|
1066
|
+
// Starcraft files are packed as Mono (0x41) on medium quality.
|
|
1067
|
+
// Because this compression is not used anymore, our compression functions
|
|
1068
|
+
// will default to WaveCompressionLevel = 4 when using ADPCM compression
|
|
1069
|
+
//
|
|
1070
|
+
|
|
1071
|
+
// Convert quality to data compression
|
|
1072
|
+
switch(dwQuality)
|
|
1073
|
+
{
|
|
1074
|
+
case MPQ_WAVE_QUALITY_HIGH:
|
|
1075
|
+
// WaveCompressionLevel = -1;
|
|
1076
|
+
dwCompression = MPQ_COMPRESSION_PKWARE;
|
|
1077
|
+
break;
|
|
1078
|
+
|
|
1079
|
+
case MPQ_WAVE_QUALITY_MEDIUM:
|
|
1080
|
+
// WaveCompressionLevel = 4;
|
|
1081
|
+
dwCompression = MPQ_COMPRESSION_ADPCM_STEREO | MPQ_COMPRESSION_HUFFMANN;
|
|
1082
|
+
break;
|
|
1083
|
+
|
|
1084
|
+
case MPQ_WAVE_QUALITY_LOW:
|
|
1085
|
+
// WaveCompressionLevel = 2;
|
|
1086
|
+
dwCompression = MPQ_COMPRESSION_ADPCM_STEREO | MPQ_COMPRESSION_HUFFMANN;
|
|
1087
|
+
break;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
return SFileAddFileEx(hMpq,
|
|
1091
|
+
szFileName,
|
|
1092
|
+
szArchivedName,
|
|
1093
|
+
dwFlags,
|
|
1094
|
+
MPQ_COMPRESSION_PKWARE, // First sector should be compressed as data
|
|
1095
|
+
dwCompression); // Next sectors should be compressed as WAVE
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
//-----------------------------------------------------------------------------
|
|
1099
|
+
// bool SFileRemoveFile(HANDLE hMpq, char * szFileName)
|
|
1100
|
+
//
|
|
1101
|
+
// This function removes a file from the archive.
|
|
1102
|
+
//
|
|
1103
|
+
|
|
1104
|
+
bool WINAPI SFileRemoveFile(HANDLE hMpq, const char * szFileName, DWORD dwSearchScope)
|
|
1105
|
+
{
|
|
1106
|
+
TMPQArchive * ha = IsValidMpqHandle(hMpq);
|
|
1107
|
+
TMPQFile * hf = NULL;
|
|
1108
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
1109
|
+
|
|
1110
|
+
// Keep compilers happy
|
|
1111
|
+
STORMLIB_UNUSED(dwSearchScope);
|
|
1112
|
+
|
|
1113
|
+
// Check the parameters
|
|
1114
|
+
if(ha == NULL)
|
|
1115
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
1116
|
+
if(szFileName == NULL || *szFileName == 0)
|
|
1117
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
1118
|
+
if(IsInternalMpqFileName(szFileName))
|
|
1119
|
+
dwErrCode = ERROR_INTERNAL_FILE;
|
|
1120
|
+
|
|
1121
|
+
// Do not allow to remove files from read-only or patched MPQs
|
|
1122
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1123
|
+
{
|
|
1124
|
+
if((ha->dwFlags & MPQ_FLAG_READ_ONLY) || (ha->haPatch != NULL))
|
|
1125
|
+
dwErrCode = ERROR_ACCESS_DENIED;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
// If all checks have passed, we can delete the file from the MPQ
|
|
1129
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1130
|
+
{
|
|
1131
|
+
// Open the file from the MPQ
|
|
1132
|
+
if(SFileOpenFileEx(hMpq, szFileName, SFILE_OPEN_BASE_FILE, (HANDLE *)&hf))
|
|
1133
|
+
{
|
|
1134
|
+
// Delete the file entry
|
|
1135
|
+
dwErrCode = DeleteFileEntry(ha, hf);
|
|
1136
|
+
FreeFileHandle(hf);
|
|
1137
|
+
}
|
|
1138
|
+
else
|
|
1139
|
+
dwErrCode = GetLastError();
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
// If the file has been deleted, we need to invalidate
|
|
1143
|
+
// the internal files and recreate HET table
|
|
1144
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1145
|
+
{
|
|
1146
|
+
// Invalidate the entries for internal files
|
|
1147
|
+
// After we are done with MPQ changes, we need to re-create them anyway
|
|
1148
|
+
InvalidateInternalFiles(ha);
|
|
1149
|
+
|
|
1150
|
+
//
|
|
1151
|
+
// Don't rebuild HET table now; the file's flags indicate
|
|
1152
|
+
// that it's been deleted, which is enough
|
|
1153
|
+
//
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
// Resolve error and exit
|
|
1157
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
1158
|
+
SetLastError(dwErrCode);
|
|
1159
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
// Renames the file within the archive.
|
|
1163
|
+
bool WINAPI SFileRenameFile(HANDLE hMpq, const char * szFileName, const char * szNewFileName)
|
|
1164
|
+
{
|
|
1165
|
+
TMPQArchive * ha = IsValidMpqHandle(hMpq);
|
|
1166
|
+
TMPQFile * hf;
|
|
1167
|
+
DWORD dwErrCode = ERROR_SUCCESS;
|
|
1168
|
+
|
|
1169
|
+
// Test the valid parameters
|
|
1170
|
+
if(ha == NULL)
|
|
1171
|
+
dwErrCode = ERROR_INVALID_HANDLE;
|
|
1172
|
+
if(szFileName == NULL || *szFileName == 0 || szNewFileName == NULL || *szNewFileName == 0)
|
|
1173
|
+
dwErrCode = ERROR_INVALID_PARAMETER;
|
|
1174
|
+
if(IsInternalMpqFileName(szFileName) || IsInternalMpqFileName(szNewFileName))
|
|
1175
|
+
dwErrCode = ERROR_INTERNAL_FILE;
|
|
1176
|
+
|
|
1177
|
+
// Do not allow to rename files in MPQ open for read only
|
|
1178
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1179
|
+
{
|
|
1180
|
+
if(ha->dwFlags & MPQ_FLAG_READ_ONLY)
|
|
1181
|
+
dwErrCode = ERROR_ACCESS_DENIED;
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
// Open the new file. If exists, we don't allow rename operation
|
|
1185
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1186
|
+
{
|
|
1187
|
+
if(GetFileEntryLocale(ha, szNewFileName, g_lcFileLocale) != NULL)
|
|
1188
|
+
dwErrCode = ERROR_ALREADY_EXISTS;
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
// Open the file from the MPQ
|
|
1192
|
+
if(dwErrCode == ERROR_SUCCESS)
|
|
1193
|
+
{
|
|
1194
|
+
// Attempt to open the file
|
|
1195
|
+
if(SFileOpenFileEx(hMpq, szFileName, SFILE_OPEN_BASE_FILE, (HANDLE *)&hf))
|
|
1196
|
+
{
|
|
1197
|
+
ULONGLONG RawDataOffs;
|
|
1198
|
+
TFileEntry * pFileEntry = hf->pFileEntry;
|
|
1199
|
+
|
|
1200
|
+
// Invalidate the entries for internal files
|
|
1201
|
+
InvalidateInternalFiles(ha);
|
|
1202
|
+
|
|
1203
|
+
// Rename the file entry in the table
|
|
1204
|
+
dwErrCode = RenameFileEntry(ha, hf, szNewFileName);
|
|
1205
|
+
|
|
1206
|
+
// If the file is encrypted, we have to re-crypt the file content
|
|
1207
|
+
// with the new decryption key
|
|
1208
|
+
if((dwErrCode == ERROR_SUCCESS) && (pFileEntry->dwFlags & MPQ_FILE_ENCRYPTED))
|
|
1209
|
+
{
|
|
1210
|
+
// Recrypt the file data in the MPQ
|
|
1211
|
+
dwErrCode = RecryptFileData(ha, hf, szFileName, szNewFileName);
|
|
1212
|
+
|
|
1213
|
+
// Update the MD5 of the raw block
|
|
1214
|
+
if(dwErrCode == ERROR_SUCCESS && ha->pHeader->dwRawChunkSize != 0)
|
|
1215
|
+
{
|
|
1216
|
+
RawDataOffs = ha->MpqPos + pFileEntry->ByteOffset;
|
|
1217
|
+
WriteMpqDataMD5(ha->pStream,
|
|
1218
|
+
RawDataOffs,
|
|
1219
|
+
pFileEntry->dwCmpSize,
|
|
1220
|
+
ha->pHeader->dwRawChunkSize);
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
// Free the file handle
|
|
1225
|
+
FreeFileHandle(hf);
|
|
1226
|
+
}
|
|
1227
|
+
else
|
|
1228
|
+
{
|
|
1229
|
+
dwErrCode = GetLastError();
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
// We also need to rebuild the HET table, if present
|
|
1234
|
+
if(dwErrCode == ERROR_SUCCESS && ha->pHetTable != NULL)
|
|
1235
|
+
dwErrCode = RebuildHetTable(ha);
|
|
1236
|
+
|
|
1237
|
+
// Resolve error and exit
|
|
1238
|
+
if(dwErrCode != ERROR_SUCCESS)
|
|
1239
|
+
SetLastError(dwErrCode);
|
|
1240
|
+
return (dwErrCode == ERROR_SUCCESS);
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
//-----------------------------------------------------------------------------
|
|
1244
|
+
// Sets default data compression for SFileAddFile
|
|
1245
|
+
|
|
1246
|
+
bool WINAPI SFileSetDataCompression(DWORD DataCompression)
|
|
1247
|
+
{
|
|
1248
|
+
unsigned int uValidMask = (MPQ_COMPRESSION_ZLIB | MPQ_COMPRESSION_PKWARE | MPQ_COMPRESSION_BZIP2 | MPQ_COMPRESSION_SPARSE);
|
|
1249
|
+
|
|
1250
|
+
if((DataCompression & uValidMask) != DataCompression)
|
|
1251
|
+
{
|
|
1252
|
+
SetLastError(ERROR_INVALID_PARAMETER);
|
|
1253
|
+
return false;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
DefaultDataCompression = DataCompression;
|
|
1257
|
+
return true;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
//-----------------------------------------------------------------------------
|
|
1261
|
+
// Changes locale ID of a file
|
|
1262
|
+
|
|
1263
|
+
bool WINAPI SFileSetFileLocale(HANDLE hFile, LCID lcNewLocale)
|
|
1264
|
+
{
|
|
1265
|
+
TMPQArchive * ha;
|
|
1266
|
+
TFileEntry * pFileEntry;
|
|
1267
|
+
TMPQFile * hf = IsValidFileHandle(hFile);
|
|
1268
|
+
|
|
1269
|
+
// Invalid handle => do nothing
|
|
1270
|
+
if(hf == NULL)
|
|
1271
|
+
{
|
|
1272
|
+
SetLastError(ERROR_INVALID_HANDLE);
|
|
1273
|
+
return false;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
// Do not allow to rename files in MPQ open for read only
|
|
1277
|
+
ha = hf->ha;
|
|
1278
|
+
if(ha->dwFlags & MPQ_FLAG_READ_ONLY)
|
|
1279
|
+
{
|
|
1280
|
+
SetLastError(ERROR_ACCESS_DENIED);
|
|
1281
|
+
return false;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
// Do not allow unnamed access
|
|
1285
|
+
if(hf->pFileEntry->szFileName == NULL)
|
|
1286
|
+
{
|
|
1287
|
+
SetLastError(ERROR_CAN_NOT_COMPLETE);
|
|
1288
|
+
return false;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
// Do not allow to change locale of any internal file
|
|
1292
|
+
if(IsInternalMpqFileName(hf->pFileEntry->szFileName))
|
|
1293
|
+
{
|
|
1294
|
+
SetLastError(ERROR_INTERNAL_FILE);
|
|
1295
|
+
return false;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
// Do not allow changing file locales if there is no hash table
|
|
1299
|
+
if(hf->pHashEntry == NULL)
|
|
1300
|
+
{
|
|
1301
|
+
SetLastError(ERROR_NOT_SUPPORTED);
|
|
1302
|
+
return false;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
// We have to check if the file+locale is not already there
|
|
1306
|
+
pFileEntry = GetFileEntryExact(ha, hf->pFileEntry->szFileName, lcNewLocale, NULL);
|
|
1307
|
+
if(pFileEntry != NULL)
|
|
1308
|
+
{
|
|
1309
|
+
SetLastError(ERROR_ALREADY_EXISTS);
|
|
1310
|
+
return false;
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
// Update the locale in the hash table entry
|
|
1314
|
+
hf->pHashEntry->Locale = SFILE_LOCALE(lcNewLocale);
|
|
1315
|
+
hf->pHashEntry->Platform = SFILE_PLATFORM(lcNewLocale);
|
|
1316
|
+
hf->pHashEntry->Reserved = 0;
|
|
1317
|
+
ha->dwFlags |= MPQ_FLAG_CHANGED;
|
|
1318
|
+
return true;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
//-----------------------------------------------------------------------------
|
|
1322
|
+
// Sets add file callback
|
|
1323
|
+
|
|
1324
|
+
bool WINAPI SFileSetAddFileCallback(HANDLE hMpq, SFILE_ADDFILE_CALLBACK AddFileCB, void * pvUserData)
|
|
1325
|
+
{
|
|
1326
|
+
TMPQArchive * ha = (TMPQArchive *) hMpq;
|
|
1327
|
+
|
|
1328
|
+
if(!IsValidMpqHandle(hMpq))
|
|
1329
|
+
{
|
|
1330
|
+
SetLastError(ERROR_INVALID_HANDLE);
|
|
1331
|
+
return false;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
ha->pvAddFileUserData = pvUserData;
|
|
1335
|
+
ha->pfnAddFileCB = AddFileCB;
|
|
1336
|
+
return true;
|
|
1337
|
+
}
|