rn-update 1.0.0

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.
Files changed (880) hide show
  1. package/LICENSE +22 -0
  2. package/README-CN.md +97 -0
  3. package/README.md +97 -0
  4. package/THIRD_PARTY_NOTICES.md +8 -0
  5. package/android/build.gradle +253 -0
  6. package/android/jni/Android.mk +41 -0
  7. package/android/jni/Application.mk +20 -0
  8. package/android/jni/HDiffPatch/.travis.yml +33 -0
  9. package/android/jni/HDiffPatch/CHANGELOG.md +153 -0
  10. package/android/jni/HDiffPatch/LICENSE +48 -0
  11. package/android/jni/HDiffPatch/Makefile +157 -0
  12. package/android/jni/HDiffPatch/README.md +307 -0
  13. package/android/jni/HDiffPatch/_atosize.h +83 -0
  14. package/android/jni/HDiffPatch/_clock_for_demo.h +47 -0
  15. package/android/jni/HDiffPatch/_dir_ignore.h +191 -0
  16. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +37 -0
  17. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +7 -0
  18. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +1 -0
  19. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +1 -0
  20. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +18 -0
  21. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +20 -0
  22. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +28 -0
  23. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +8 -0
  24. package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +8 -0
  25. package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +219 -0
  26. package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +156 -0
  27. package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +65 -0
  28. package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +105 -0
  29. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +237 -0
  30. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +3 -0
  31. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +318 -0
  32. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +3 -0
  33. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +182 -0
  34. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +3 -0
  35. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +30 -0
  36. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  37. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +408 -0
  38. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  39. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +573 -0
  40. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  41. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  42. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +396 -0
  43. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  44. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +268 -0
  45. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  46. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +361 -0
  47. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  48. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +301 -0
  49. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  50. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  51. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +411 -0
  52. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  53. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +504 -0
  54. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  55. package/android/jni/HDiffPatch/checksum_plugin_demo.h +344 -0
  56. package/android/jni/HDiffPatch/compress_parallel.cpp +166 -0
  57. package/android/jni/HDiffPatch/compress_parallel.h +59 -0
  58. package/android/jni/HDiffPatch/compress_plugin_demo.h +1152 -0
  59. package/android/jni/HDiffPatch/decompress_plugin_demo.h +995 -0
  60. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +797 -0
  61. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +65 -0
  62. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +200 -0
  63. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +178 -0
  64. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +357 -0
  65. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +87 -0
  66. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +151 -0
  67. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +770 -0
  68. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +236 -0
  69. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +47 -0
  70. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +112 -0
  71. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +53 -0
  72. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_types.h +61 -0
  73. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +331 -0
  74. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +144 -0
  75. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +176 -0
  76. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +84 -0
  77. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +146 -0
  78. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +61 -0
  79. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +152 -0
  80. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +76 -0
  81. package/android/jni/HDiffPatch/file_for_patch.c +524 -0
  82. package/android/jni/HDiffPatch/file_for_patch.h +259 -0
  83. package/android/jni/HDiffPatch/hdiffz.cpp +1570 -0
  84. package/android/jni/HDiffPatch/hpatch_dir_listener.h +290 -0
  85. package/android/jni/HDiffPatch/hpatchz.c +1221 -0
  86. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +1025 -0
  87. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +116 -0
  88. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +72 -0
  89. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +213 -0
  90. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +63 -0
  91. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +170 -0
  92. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +86 -0
  93. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +89 -0
  94. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +13 -0
  95. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +398 -0
  96. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +194 -0
  97. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +13 -0
  98. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +204 -0
  99. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +207 -0
  100. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +815 -0
  101. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +586 -0
  102. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +381 -0
  103. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +352 -0
  104. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +137 -0
  105. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +137 -0
  106. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +70 -0
  107. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +628 -0
  108. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +87 -0
  109. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +363 -0
  110. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +139 -0
  111. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +68 -0
  112. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +115 -0
  113. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +342 -0
  114. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +94 -0
  115. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +52 -0
  116. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.c +2292 -0
  117. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.h +215 -0
  118. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_private.h +165 -0
  119. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_types.h +251 -0
  120. package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +174 -0
  121. package/android/jni/HDiffPatch/libParallel/parallel_channel.h +73 -0
  122. package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +367 -0
  123. package/android/jni/HDiffPatch/libParallel/parallel_import.h +92 -0
  124. package/android/jni/hpatch.c +232 -0
  125. package/android/jni/hpatch.h +43 -0
  126. package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +100 -0
  127. package/android/jni/lzma/Asm/x86/7zAsm.asm +147 -0
  128. package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +147 -0
  129. package/android/jni/lzma/Asm/x86/AesOpt.asm +237 -0
  130. package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +1258 -0
  131. package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +205 -0
  132. package/android/jni/lzma/C/7z.h +202 -0
  133. package/android/jni/lzma/C/7zAlloc.c +80 -0
  134. package/android/jni/lzma/C/7zAlloc.h +19 -0
  135. package/android/jni/lzma/C/7zArcIn.c +1771 -0
  136. package/android/jni/lzma/C/7zBuf.c +36 -0
  137. package/android/jni/lzma/C/7zBuf.h +35 -0
  138. package/android/jni/lzma/C/7zBuf2.c +52 -0
  139. package/android/jni/lzma/C/7zCrc.c +128 -0
  140. package/android/jni/lzma/C/7zCrc.h +25 -0
  141. package/android/jni/lzma/C/7zCrcOpt.c +115 -0
  142. package/android/jni/lzma/C/7zDec.c +591 -0
  143. package/android/jni/lzma/C/7zFile.c +286 -0
  144. package/android/jni/lzma/C/7zFile.h +83 -0
  145. package/android/jni/lzma/C/7zStream.c +176 -0
  146. package/android/jni/lzma/C/7zTypes.h +375 -0
  147. package/android/jni/lzma/C/7zVersion.h +27 -0
  148. package/android/jni/lzma/C/7zVersion.rc +55 -0
  149. package/android/jni/lzma/C/Aes.c +306 -0
  150. package/android/jni/lzma/C/Aes.h +38 -0
  151. package/android/jni/lzma/C/AesOpt.c +184 -0
  152. package/android/jni/lzma/C/Alloc.c +455 -0
  153. package/android/jni/lzma/C/Alloc.h +51 -0
  154. package/android/jni/lzma/C/Bcj2.c +257 -0
  155. package/android/jni/lzma/C/Bcj2.h +146 -0
  156. package/android/jni/lzma/C/Bcj2Enc.c +311 -0
  157. package/android/jni/lzma/C/Bra.c +230 -0
  158. package/android/jni/lzma/C/Bra.h +64 -0
  159. package/android/jni/lzma/C/Bra86.c +82 -0
  160. package/android/jni/lzma/C/BraIA64.c +53 -0
  161. package/android/jni/lzma/C/Compiler.h +33 -0
  162. package/android/jni/lzma/C/CpuArch.c +218 -0
  163. package/android/jni/lzma/C/CpuArch.h +336 -0
  164. package/android/jni/lzma/C/Delta.c +64 -0
  165. package/android/jni/lzma/C/Delta.h +19 -0
  166. package/android/jni/lzma/C/DllSecur.c +108 -0
  167. package/android/jni/lzma/C/DllSecur.h +20 -0
  168. package/android/jni/lzma/C/LzFind.c +1127 -0
  169. package/android/jni/lzma/C/LzFind.h +121 -0
  170. package/android/jni/lzma/C/LzFindMt.c +853 -0
  171. package/android/jni/lzma/C/LzFindMt.h +101 -0
  172. package/android/jni/lzma/C/LzHash.h +57 -0
  173. package/android/jni/lzma/C/Lzma2Dec.c +488 -0
  174. package/android/jni/lzma/C/Lzma2Dec.h +120 -0
  175. package/android/jni/lzma/C/Lzma2DecMt.c +1082 -0
  176. package/android/jni/lzma/C/Lzma2DecMt.h +79 -0
  177. package/android/jni/lzma/C/Lzma2Enc.c +803 -0
  178. package/android/jni/lzma/C/Lzma2Enc.h +55 -0
  179. package/android/jni/lzma/C/Lzma86.h +111 -0
  180. package/android/jni/lzma/C/Lzma86Dec.c +54 -0
  181. package/android/jni/lzma/C/Lzma86Enc.c +106 -0
  182. package/android/jni/lzma/C/LzmaDec.c +1185 -0
  183. package/android/jni/lzma/C/LzmaDec.h +234 -0
  184. package/android/jni/lzma/C/LzmaEnc.c +2976 -0
  185. package/android/jni/lzma/C/LzmaEnc.h +76 -0
  186. package/android/jni/lzma/C/LzmaLib.c +40 -0
  187. package/android/jni/lzma/C/LzmaLib.h +131 -0
  188. package/android/jni/lzma/C/MtCoder.c +601 -0
  189. package/android/jni/lzma/C/MtCoder.h +141 -0
  190. package/android/jni/lzma/C/MtDec.c +1138 -0
  191. package/android/jni/lzma/C/MtDec.h +201 -0
  192. package/android/jni/lzma/C/Ppmd.h +85 -0
  193. package/android/jni/lzma/C/Ppmd7.c +712 -0
  194. package/android/jni/lzma/C/Ppmd7.h +142 -0
  195. package/android/jni/lzma/C/Ppmd7Dec.c +191 -0
  196. package/android/jni/lzma/C/Ppmd7Enc.c +187 -0
  197. package/android/jni/lzma/C/Precomp.h +10 -0
  198. package/android/jni/lzma/C/RotateDefs.h +30 -0
  199. package/android/jni/lzma/C/Sha256.c +248 -0
  200. package/android/jni/lzma/C/Sha256.h +26 -0
  201. package/android/jni/lzma/C/Sort.c +141 -0
  202. package/android/jni/lzma/C/Sort.h +18 -0
  203. package/android/jni/lzma/C/Threads.c +95 -0
  204. package/android/jni/lzma/C/Threads.h +70 -0
  205. package/android/jni/lzma/C/ThreadsP.c +396 -0
  206. package/android/jni/lzma/C/ThreadsP.h +31 -0
  207. package/android/jni/lzma/C/Util/7z/7z.dsp +241 -0
  208. package/android/jni/lzma/C/Util/7z/7z.dsw +29 -0
  209. package/android/jni/lzma/C/Util/7z/7zMain.c +686 -0
  210. package/android/jni/lzma/C/Util/7z/Precomp.c +4 -0
  211. package/android/jni/lzma/C/Util/7z/Precomp.h +10 -0
  212. package/android/jni/lzma/C/Util/7z/makefile +40 -0
  213. package/android/jni/lzma/C/Util/7z/makefile.gcc +75 -0
  214. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +258 -0
  215. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +168 -0
  216. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +29 -0
  217. package/android/jni/lzma/C/Util/Lzma/makefile +28 -0
  218. package/android/jni/lzma/C/Util/Lzma/makefile.gcc +44 -0
  219. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +4 -0
  220. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +178 -0
  221. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +29 -0
  222. package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +14 -0
  223. package/android/jni/lzma/C/Util/LzmaLib/makefile +34 -0
  224. package/android/jni/lzma/C/Util/LzmaLib/resource.rc +3 -0
  225. package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +4 -0
  226. package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +10 -0
  227. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +640 -0
  228. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +231 -0
  229. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +29 -0
  230. package/android/jni/lzma/C/Util/SfxSetup/makefile +37 -0
  231. package/android/jni/lzma/C/Util/SfxSetup/makefile_con +38 -0
  232. package/android/jni/lzma/C/Util/SfxSetup/resource.rc +5 -0
  233. package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
  234. package/android/jni/lzma/C/Xz.c +90 -0
  235. package/android/jni/lzma/C/Xz.h +460 -0
  236. package/android/jni/lzma/C/XzCrc64.c +86 -0
  237. package/android/jni/lzma/C/XzCrc64.h +26 -0
  238. package/android/jni/lzma/C/XzCrc64Opt.c +69 -0
  239. package/android/jni/lzma/C/XzDec.c +2766 -0
  240. package/android/jni/lzma/C/XzEnc.c +1329 -0
  241. package/android/jni/lzma/C/XzEnc.h +60 -0
  242. package/android/jni/lzma/C/XzIn.c +319 -0
  243. package/android/jni/lzma/CPP/7zip/7zip.mak +240 -0
  244. package/android/jni/lzma/CPP/7zip/Aes.mak +7 -0
  245. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +3 -0
  246. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +76 -0
  247. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +569 -0
  248. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +70 -0
  249. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +678 -0
  250. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +92 -0
  251. package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +423 -0
  252. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +139 -0
  253. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +61 -0
  254. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +763 -0
  255. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +181 -0
  256. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +942 -0
  257. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +19 -0
  258. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +148 -0
  259. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +1666 -0
  260. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +445 -0
  261. package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +202 -0
  262. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +901 -0
  263. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +335 -0
  264. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +174 -0
  265. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +22 -0
  266. package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +21 -0
  267. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +22 -0
  268. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +35 -0
  269. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +2500 -0
  270. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +139 -0
  271. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +3 -0
  272. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +8 -0
  273. package/android/jni/lzma/CPP/7zip/Archive/Archive.def +12 -0
  274. package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +19 -0
  275. package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +151 -0
  276. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +1125 -0
  277. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +447 -0
  278. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +17 -0
  279. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +25 -0
  280. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +232 -0
  281. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +110 -0
  282. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +46 -0
  283. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +67 -0
  284. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +88 -0
  285. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +28 -0
  286. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +191 -0
  287. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +89 -0
  288. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +18 -0
  289. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +37 -0
  290. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +3 -0
  291. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +6 -0
  292. package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +8 -0
  293. package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +122 -0
  294. package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +608 -0
  295. package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
  296. package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +629 -0
  297. package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +359 -0
  298. package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +8 -0
  299. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +1308 -0
  300. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +11 -0
  301. package/android/jni/lzma/CPP/7zip/Asm.mak +9 -0
  302. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +1910 -0
  303. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +29 -0
  304. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +3 -0
  305. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +8 -0
  306. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +154 -0
  307. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +7 -0
  308. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +3 -0
  309. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +8 -0
  310. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +96 -0
  311. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +5 -0
  312. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +3 -0
  313. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +8 -0
  314. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +116 -0
  315. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +5 -0
  316. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +799 -0
  317. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +477 -0
  318. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +29 -0
  319. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +3 -0
  320. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +8 -0
  321. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +59 -0
  322. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +195 -0
  323. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +3 -0
  324. package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +715 -0
  325. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
  326. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +912 -0
  327. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +29 -0
  328. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +482 -0
  329. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +3 -0
  330. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +8 -0
  331. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +134 -0
  332. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +5 -0
  333. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +246 -0
  334. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +86 -0
  335. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +137 -0
  336. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +11 -0
  337. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +803 -0
  338. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +29 -0
  339. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +364 -0
  340. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +3 -0
  341. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +13 -0
  342. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +117 -0
  343. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +6 -0
  344. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +16 -0
  345. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
  346. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
  347. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +988 -0
  348. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +29 -0
  349. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +241 -0
  350. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +3 -0
  351. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +14 -0
  352. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +153 -0
  353. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +1 -0
  354. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +50 -0
  355. package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +250 -0
  356. package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +120 -0
  357. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +536 -0
  358. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +192 -0
  359. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +46 -0
  360. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +10 -0
  361. package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +475 -0
  362. package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +166 -0
  363. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +435 -0
  364. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +205 -0
  365. package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +163 -0
  366. package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +92 -0
  367. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +127 -0
  368. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +48 -0
  369. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +367 -0
  370. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +252 -0
  371. package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +3 -0
  372. package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +6 -0
  373. package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +3 -0
  374. package/android/jni/lzma/CPP/7zip/Common/MethodId.h +10 -0
  375. package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +509 -0
  376. package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +264 -0
  377. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +39 -0
  378. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +26 -0
  379. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +111 -0
  380. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +66 -0
  381. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +51 -0
  382. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +35 -0
  383. package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +108 -0
  384. package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +78 -0
  385. package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +106 -0
  386. package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +8 -0
  387. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +156 -0
  388. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +60 -0
  389. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +285 -0
  390. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +157 -0
  391. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +56 -0
  392. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +13 -0
  393. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +57 -0
  394. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +26 -0
  395. package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +48 -0
  396. package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +24 -0
  397. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +666 -0
  398. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +120 -0
  399. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +24 -0
  400. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +24 -0
  401. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +31 -0
  402. package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +17 -0
  403. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +23 -0
  404. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +35 -0
  405. package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +41 -0
  406. package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +92 -0
  407. package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +344 -0
  408. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +120 -0
  409. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +49 -0
  410. package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +15 -0
  411. package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +128 -0
  412. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +265 -0
  413. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +96 -0
  414. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +122 -0
  415. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +42 -0
  416. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +22 -0
  417. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +343 -0
  418. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +113 -0
  419. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +182 -0
  420. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +46 -0
  421. package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +22 -0
  422. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +170 -0
  423. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +86 -0
  424. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +152 -0
  425. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +58 -0
  426. package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +22 -0
  427. package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +8 -0
  428. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +150 -0
  429. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +92 -0
  430. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +245 -0
  431. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +46 -0
  432. package/android/jni/lzma/CPP/7zip/Crc.mak +8 -0
  433. package/android/jni/lzma/CPP/7zip/Crc64.mak +8 -0
  434. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +280 -0
  435. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +118 -0
  436. package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +17 -0
  437. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +112 -0
  438. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +57 -0
  439. package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
  440. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +233 -0
  441. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +40 -0
  442. package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +8 -0
  443. package/android/jni/lzma/CPP/7zip/GuiCommon.rc +84 -0
  444. package/android/jni/lzma/CPP/7zip/Guid.txt +220 -0
  445. package/android/jni/lzma/CPP/7zip/ICoder.h +399 -0
  446. package/android/jni/lzma/CPP/7zip/IDecl.h +28 -0
  447. package/android/jni/lzma/CPP/7zip/IPassword.h +23 -0
  448. package/android/jni/lzma/CPP/7zip/IProgress.h +19 -0
  449. package/android/jni/lzma/CPP/7zip/IStream.h +127 -0
  450. package/android/jni/lzma/CPP/7zip/LzmaDec.mak +5 -0
  451. package/android/jni/lzma/CPP/7zip/MyVersion.h +2 -0
  452. package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +2 -0
  453. package/android/jni/lzma/CPP/7zip/PropID.h +127 -0
  454. package/android/jni/lzma/CPP/7zip/SubBuild.mak +3 -0
  455. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +993 -0
  456. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +235 -0
  457. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +29 -0
  458. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +3 -0
  459. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +8 -0
  460. package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +28 -0
  461. package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +3 -0
  462. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +1295 -0
  463. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +136 -0
  464. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +1715 -0
  465. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +403 -0
  466. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +155 -0
  467. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +10 -0
  468. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +161 -0
  469. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +112 -0
  470. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +3618 -0
  471. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +77 -0
  472. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +37 -0
  473. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +11 -0
  474. package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +190 -0
  475. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +1096 -0
  476. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +42 -0
  477. package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +27 -0
  478. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +482 -0
  479. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +94 -0
  480. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +34 -0
  481. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +280 -0
  482. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +31 -0
  483. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +347 -0
  484. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +110 -0
  485. package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +114 -0
  486. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +1074 -0
  487. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +424 -0
  488. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +3553 -0
  489. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +436 -0
  490. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +668 -0
  491. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +18 -0
  492. package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +14 -0
  493. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +80 -0
  494. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +10 -0
  495. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +25 -0
  496. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +10 -0
  497. package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +8 -0
  498. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +19 -0
  499. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +16 -0
  500. package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +1704 -0
  501. package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +200 -0
  502. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +64 -0
  503. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +66 -0
  504. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +771 -0
  505. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +162 -0
  506. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +233 -0
  507. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +27 -0
  508. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +70 -0
  509. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +55 -0
  510. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +94 -0
  511. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +26 -0
  512. package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +130 -0
  513. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +41 -0
  514. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +14 -0
  515. package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +43 -0
  516. package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +13 -0
  517. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +69 -0
  518. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +33 -0
  519. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +825 -0
  520. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +164 -0
  521. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +367 -0
  522. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +48 -0
  523. package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +1359 -0
  524. package/android/jni/lzma/CPP/7zip/UI/Console/List.h +27 -0
  525. package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +1154 -0
  526. package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +175 -0
  527. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +115 -0
  528. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +66 -0
  529. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +183 -0
  530. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +62 -0
  531. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +3 -0
  532. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +8 -0
  533. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +702 -0
  534. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +124 -0
  535. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +110 -0
  536. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +27 -0
  537. package/android/jni/lzma/CPP/7zip/UI/Console/makefile +64 -0
  538. package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +7 -0
  539. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +37 -0
  540. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +16 -0
  541. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +1025 -0
  542. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +21 -0
  543. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +9 -0
  544. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +64 -0
  545. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +28 -0
  546. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +4 -0
  547. package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +16 -0
  548. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +1037 -0
  549. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +328 -0
  550. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +28 -0
  551. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +14 -0
  552. package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +40 -0
  553. package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +76 -0
  554. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +122 -0
  555. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +69 -0
  556. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +91 -0
  557. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +17 -0
  558. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +58 -0
  559. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +28 -0
  560. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +14 -0
  561. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +5 -0
  562. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +196 -0
  563. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +170 -0
  564. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +12 -0
  565. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +1337 -0
  566. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +351 -0
  567. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +40 -0
  568. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +48 -0
  569. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +80 -0
  570. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +3 -0
  571. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +23 -0
  572. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +10 -0
  573. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +95 -0
  574. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +255 -0
  575. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +62 -0
  576. package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +177 -0
  577. package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +15 -0
  578. package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +59 -0
  579. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +418 -0
  580. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +113 -0
  581. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +98 -0
  582. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +24 -0
  583. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +280 -0
  584. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +38 -0
  585. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +51 -0
  586. package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +27 -0
  587. package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +2 -0
  588. package/android/jni/lzma/CPP/Build.mak +156 -0
  589. package/android/jni/lzma/CPP/Common/AutoPtr.h +35 -0
  590. package/android/jni/lzma/CPP/Common/CRC.cpp +7 -0
  591. package/android/jni/lzma/CPP/Common/C_FileIO.cpp +92 -0
  592. package/android/jni/lzma/CPP/Common/C_FileIO.h +53 -0
  593. package/android/jni/lzma/CPP/Common/ComTry.h +21 -0
  594. package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +197 -0
  595. package/android/jni/lzma/CPP/Common/CommandLineParser.h +63 -0
  596. package/android/jni/lzma/CPP/Common/Common.h +43 -0
  597. package/android/jni/lzma/CPP/Common/CrcReg.cpp +98 -0
  598. package/android/jni/lzma/CPP/Common/Defs.h +15 -0
  599. package/android/jni/lzma/CPP/Common/DynamicBuffer.h +64 -0
  600. package/android/jni/lzma/CPP/Common/IntToString.cpp +193 -0
  601. package/android/jni/lzma/CPP/Common/IntToString.h +28 -0
  602. package/android/jni/lzma/CPP/Common/Lang.h +23 -0
  603. package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +132 -0
  604. package/android/jni/lzma/CPP/Common/ListFileUtils.h +18 -0
  605. package/android/jni/lzma/CPP/Common/MyBuffer.h +259 -0
  606. package/android/jni/lzma/CPP/Common/MyBuffer2.h +100 -0
  607. package/android/jni/lzma/CPP/Common/MyCom.h +277 -0
  608. package/android/jni/lzma/CPP/Common/MyException.h +14 -0
  609. package/android/jni/lzma/CPP/Common/MyGuidDef.h +54 -0
  610. package/android/jni/lzma/CPP/Common/MyInitGuid.h +45 -0
  611. package/android/jni/lzma/CPP/Common/MyLinux.h +42 -0
  612. package/android/jni/lzma/CPP/Common/MyString.cpp +1659 -0
  613. package/android/jni/lzma/CPP/Common/MyString.h +868 -0
  614. package/android/jni/lzma/CPP/Common/MyTypes.h +35 -0
  615. package/android/jni/lzma/CPP/Common/MyUnknown.h +17 -0
  616. package/android/jni/lzma/CPP/Common/MyVector.cpp +3 -0
  617. package/android/jni/lzma/CPP/Common/MyVector.h +634 -0
  618. package/android/jni/lzma/CPP/Common/MyWindows.cpp +145 -0
  619. package/android/jni/lzma/CPP/Common/MyWindows.h +231 -0
  620. package/android/jni/lzma/CPP/Common/NewHandler.cpp +163 -0
  621. package/android/jni/lzma/CPP/Common/NewHandler.h +88 -0
  622. package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +40 -0
  623. package/android/jni/lzma/CPP/Common/StdAfx.h +8 -0
  624. package/android/jni/lzma/CPP/Common/StdInStream.cpp +89 -0
  625. package/android/jni/lzma/CPP/Common/StdInStream.h +38 -0
  626. package/android/jni/lzma/CPP/Common/StdOutStream.cpp +163 -0
  627. package/android/jni/lzma/CPP/Common/StdOutStream.h +71 -0
  628. package/android/jni/lzma/CPP/Common/StringConvert.cpp +319 -0
  629. package/android/jni/lzma/CPP/Common/StringConvert.h +88 -0
  630. package/android/jni/lzma/CPP/Common/StringToInt.cpp +144 -0
  631. package/android/jni/lzma/CPP/Common/StringToInt.h +21 -0
  632. package/android/jni/lzma/CPP/Common/TextConfig.cpp +124 -0
  633. package/android/jni/lzma/CPP/Common/TextConfig.h +19 -0
  634. package/android/jni/lzma/CPP/Common/UTFConvert.cpp +288 -0
  635. package/android/jni/lzma/CPP/Common/UTFConvert.h +12 -0
  636. package/android/jni/lzma/CPP/Common/Wildcard.cpp +676 -0
  637. package/android/jni/lzma/CPP/Common/Wildcard.h +149 -0
  638. package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +7 -0
  639. package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +42 -0
  640. package/android/jni/lzma/CPP/Windows/COM.h +70 -0
  641. package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +185 -0
  642. package/android/jni/lzma/CPP/Windows/CommonDialog.h +23 -0
  643. package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +66 -0
  644. package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +65 -0
  645. package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +52 -0
  646. package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +251 -0
  647. package/android/jni/lzma/CPP/Windows/Control/Dialog.h +170 -0
  648. package/android/jni/lzma/CPP/Windows/Control/Edit.h +19 -0
  649. package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +10 -0
  650. package/android/jni/lzma/CPP/Windows/Control/ImageList.h +87 -0
  651. package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +155 -0
  652. package/android/jni/lzma/CPP/Windows/Control/ListView.h +146 -0
  653. package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +35 -0
  654. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +143 -0
  655. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +50 -0
  656. package/android/jni/lzma/CPP/Windows/Control/ReBar.h +34 -0
  657. package/android/jni/lzma/CPP/Windows/Control/Static.h +28 -0
  658. package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +42 -0
  659. package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +8 -0
  660. package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +43 -0
  661. package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +27 -0
  662. package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +200 -0
  663. package/android/jni/lzma/CPP/Windows/Control/Window2.h +51 -0
  664. package/android/jni/lzma/CPP/Windows/DLL.cpp +109 -0
  665. package/android/jni/lzma/CPP/Windows/DLL.h +58 -0
  666. package/android/jni/lzma/CPP/Windows/Defs.h +17 -0
  667. package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +66 -0
  668. package/android/jni/lzma/CPP/Windows/ErrorMsg.h +15 -0
  669. package/android/jni/lzma/CPP/Windows/FileDir.cpp +714 -0
  670. package/android/jni/lzma/CPP/Windows/FileDir.h +117 -0
  671. package/android/jni/lzma/CPP/Windows/FileFind.cpp +749 -0
  672. package/android/jni/lzma/CPP/Windows/FileFind.h +161 -0
  673. package/android/jni/lzma/CPP/Windows/FileIO.cpp +432 -0
  674. package/android/jni/lzma/CPP/Windows/FileIO.h +212 -0
  675. package/android/jni/lzma/CPP/Windows/FileLink.cpp +440 -0
  676. package/android/jni/lzma/CPP/Windows/FileMapping.cpp +12 -0
  677. package/android/jni/lzma/CPP/Windows/FileMapping.h +66 -0
  678. package/android/jni/lzma/CPP/Windows/FileName.cpp +839 -0
  679. package/android/jni/lzma/CPP/Windows/FileName.h +115 -0
  680. package/android/jni/lzma/CPP/Windows/FileSystem.cpp +131 -0
  681. package/android/jni/lzma/CPP/Windows/FileSystem.h +27 -0
  682. package/android/jni/lzma/CPP/Windows/Handle.h +37 -0
  683. package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +112 -0
  684. package/android/jni/lzma/CPP/Windows/MemoryLock.h +40 -0
  685. package/android/jni/lzma/CPP/Windows/NtCheck.h +46 -0
  686. package/android/jni/lzma/CPP/Windows/PropVariant.cpp +347 -0
  687. package/android/jni/lzma/CPP/Windows/PropVariant.h +114 -0
  688. package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +138 -0
  689. package/android/jni/lzma/CPP/Windows/PropVariantConv.h +37 -0
  690. package/android/jni/lzma/CPP/Windows/Registry.cpp +390 -0
  691. package/android/jni/lzma/CPP/Windows/Registry.h +84 -0
  692. package/android/jni/lzma/CPP/Windows/ResourceString.cpp +103 -0
  693. package/android/jni/lzma/CPP/Windows/ResourceString.h +16 -0
  694. package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +181 -0
  695. package/android/jni/lzma/CPP/Windows/SecurityUtils.h +167 -0
  696. package/android/jni/lzma/CPP/Windows/Shell.cpp +358 -0
  697. package/android/jni/lzma/CPP/Windows/Shell.h +94 -0
  698. package/android/jni/lzma/CPP/Windows/StdAfx.h +8 -0
  699. package/android/jni/lzma/CPP/Windows/Synchronization.cpp +10 -0
  700. package/android/jni/lzma/CPP/Windows/Synchronization.h +164 -0
  701. package/android/jni/lzma/CPP/Windows/System.cpp +142 -0
  702. package/android/jni/lzma/CPP/Windows/System.h +40 -0
  703. package/android/jni/lzma/CPP/Windows/Thread.h +38 -0
  704. package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +213 -0
  705. package/android/jni/lzma/CPP/Windows/TimeUtils.h +32 -0
  706. package/android/jni/lzma/CPP/Windows/Window.cpp +179 -0
  707. package/android/jni/lzma/CPP/Windows/Window.h +284 -0
  708. package/android/jni/lzma/CS/7zip/Common/CRC.cs +55 -0
  709. package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +274 -0
  710. package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +72 -0
  711. package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +47 -0
  712. package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +24 -0
  713. package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +367 -0
  714. package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +132 -0
  715. package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +110 -0
  716. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +76 -0
  717. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +398 -0
  718. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +1480 -0
  719. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +364 -0
  720. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +90 -0
  721. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +20 -0
  722. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +340 -0
  723. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +29 -0
  724. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +70 -0
  725. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +42 -0
  726. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +234 -0
  727. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +117 -0
  728. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +157 -0
  729. package/android/jni/lzma/CS/7zip/ICoder.cs +157 -0
  730. package/android/jni/lzma/DOC/7zC.txt +187 -0
  731. package/android/jni/lzma/DOC/7zFormat.txt +469 -0
  732. package/android/jni/lzma/DOC/Methods.txt +173 -0
  733. package/android/jni/lzma/DOC/installer.txt +166 -0
  734. package/android/jni/lzma/DOC/lzma-history.txt +446 -0
  735. package/android/jni/lzma/DOC/lzma-sdk.txt +357 -0
  736. package/android/jni/lzma/DOC/lzma-specification.txt +1176 -0
  737. package/android/jni/lzma/DOC/lzma.txt +328 -0
  738. package/android/jni/lzma/Java/SevenZip/CRC.java +52 -0
  739. package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +382 -0
  740. package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +131 -0
  741. package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +85 -0
  742. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +88 -0
  743. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +329 -0
  744. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +1416 -0
  745. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +55 -0
  746. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +99 -0
  747. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +88 -0
  748. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +151 -0
  749. package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +6 -0
  750. package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +253 -0
  751. package/android/jni/lzma/Java/SevenZip/LzmaBench.java +392 -0
  752. package/android/jni/lzma/bin/7zS2.sfx +0 -0
  753. package/android/jni/lzma/bin/7zS2con.sfx +0 -0
  754. package/android/jni/lzma/bin/7zSD.sfx +0 -0
  755. package/android/jni/lzma/bin/installer/config.txt +5 -0
  756. package/android/jni/lzma/bin/installer/cr.bat +5 -0
  757. package/android/lib/arm64-v8a/librnupdate.so +0 -0
  758. package/android/lib/armeabi-v7a/librnupdate.so +0 -0
  759. package/android/lib/x86/librnupdate.so +0 -0
  760. package/android/lib/x86_64/librnupdate.so +0 -0
  761. package/android/proguard.pro +83 -0
  762. package/android/src/main/AndroidManifest.xml +14 -0
  763. package/android/src/main/AndroidManifestNew.xml +13 -0
  764. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +292 -0
  765. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +50 -0
  766. package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +11 -0
  767. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +394 -0
  768. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +30 -0
  769. package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +11 -0
  770. package/android/src/main/java/cn/reactnative/modules/update/CrashRescue.java +120 -0
  771. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +954 -0
  772. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +64 -0
  773. package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -0
  774. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +20 -0
  775. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +64 -0
  776. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +156 -0
  777. package/android/src/main/java/cn/reactnative/modules/update/NativeCheckOrchestrator.java +725 -0
  778. package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateCore.java +43 -0
  779. package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateFlow.java +30 -0
  780. package/android/src/main/java/cn/reactnative/modules/update/PackageInstallerStatusReceiver.java +17 -0
  781. package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +21 -0
  782. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +274 -0
  783. package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +187 -0
  784. package/android/src/main/java/cn/reactnative/modules/update/StateCoreResult.java +22 -0
  785. package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +70 -0
  786. package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +42 -0
  787. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +952 -0
  788. package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +70 -0
  789. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +110 -0
  790. package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +403 -0
  791. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +51 -0
  792. package/android/src/main/java/expo/modules/pakta/ExpoPaktaModule.kt +15 -0
  793. package/android/src/main/java/expo/modules/pakta/ExpoPaktaPackage.java +29 -0
  794. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +126 -0
  795. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +130 -0
  796. package/cpp/patch_core/archive_limits.h +49 -0
  797. package/cpp/patch_core/archive_patch_core.cpp +146 -0
  798. package/cpp/patch_core/archive_patch_core.h +69 -0
  799. package/cpp/patch_core/digest.cpp +235 -0
  800. package/cpp/patch_core/digest.h +66 -0
  801. package/cpp/patch_core/error_codes.h +57 -0
  802. package/cpp/patch_core/hbc_transform.cpp +152 -0
  803. package/cpp/patch_core/hbc_transform.h +58 -0
  804. package/cpp/patch_core/hbc_transform_wire.cpp +332 -0
  805. package/cpp/patch_core/hbc_transform_wire.h +57 -0
  806. package/cpp/patch_core/install_record.h +41 -0
  807. package/cpp/patch_core/jni_util.h +65 -0
  808. package/cpp/patch_core/patch_core.cpp +849 -0
  809. package/cpp/patch_core/patch_core.h +103 -0
  810. package/cpp/patch_core/patch_core_android.cpp +102 -0
  811. package/cpp/patch_core/state_core.cpp +122 -0
  812. package/cpp/patch_core/state_core.h +66 -0
  813. package/cpp/patch_core/state_ops.h +29 -0
  814. package/cpp/patch_core/update_core_android.cpp +502 -0
  815. package/cpp/update_flow_core/flow_json.cpp +660 -0
  816. package/cpp/update_flow_core/flow_json.h +121 -0
  817. package/cpp/update_flow_core/update_flow_core.cpp +418 -0
  818. package/cpp/update_flow_core/update_flow_core.h +100 -0
  819. package/cpp/update_flow_core/update_flow_jni.cpp +157 -0
  820. package/expo-module.config.json +13 -0
  821. package/harmony/hvigor-plugin.ts +212 -0
  822. package/harmony/pakta/src/README.md +74 -0
  823. package/harmony/pakta/src/main/cpp/CMakeLists.txt +92 -0
  824. package/harmony/pakta/src/main/cpp/PaktaPackage.h +60 -0
  825. package/harmony/pakta/src/main/cpp/PaktaTurboModule.cpp +123 -0
  826. package/harmony/pakta/src/main/cpp/PaktaTurboModule.h +43 -0
  827. package/harmony/pakta/src/main/cpp/pakta.cpp +1243 -0
  828. package/harmony/pakta/src/main/ets/ArchiveLimits.ts +144 -0
  829. package/harmony/pakta/src/main/ets/DownloadTask.ts +1375 -0
  830. package/harmony/pakta/src/main/ets/DownloadTaskParams.ts +27 -0
  831. package/harmony/pakta/src/main/ets/ErrorCodes.ts +80 -0
  832. package/harmony/pakta/src/main/ets/EventHub.ts +46 -0
  833. package/harmony/pakta/src/main/ets/InstallRecord.ts +192 -0
  834. package/harmony/pakta/src/main/ets/Logger.ts +83 -0
  835. package/harmony/pakta/src/main/ets/MonotonicClock.ts +18 -0
  836. package/harmony/pakta/src/main/ets/NativeCheckOrchestrator.ts +640 -0
  837. package/harmony/pakta/src/main/ets/NativePatchCore.ts +123 -0
  838. package/harmony/pakta/src/main/ets/PaktaFileJSBundleProvider.ets +54 -0
  839. package/harmony/pakta/src/main/ets/PaktaPackage.ets +15 -0
  840. package/harmony/pakta/src/main/ets/PaktaPackageCompat.ts +15 -0
  841. package/harmony/pakta/src/main/ets/PaktaPackageFactory.ts +19 -0
  842. package/harmony/pakta/src/main/ets/PaktaTurboModule.ts +433 -0
  843. package/harmony/pakta/src/main/ets/PathUtils.ts +32 -0
  844. package/harmony/pakta/src/main/ets/SaveFile.ts +39 -0
  845. package/harmony/pakta/src/main/ets/UpdateContext.ts +1059 -0
  846. package/harmony/pakta/src/main/module.json5 +14 -0
  847. package/harmony/pakta/src/main/resources/base/element/string.json +8 -0
  848. package/harmony/pakta/src/main/resources/en_US/element/string.json +8 -0
  849. package/harmony/pakta/src/main/resources/zh_CN/element/string.json +8 -0
  850. package/harmony/pakta.har +0 -0
  851. package/ios/Expo/ExpoPaktaModule.swift +12 -0
  852. package/ios/Expo/ExpoPaktaReactDelegateHandler.swift +25 -0
  853. package/ios/ImportReact.h +7 -0
  854. package/ios/PrivacyInfo.xcprivacy +84 -0
  855. package/ios/RCTPakta/RCTPakta.h +14 -0
  856. package/ios/RCTPakta/RCTPakta.mm +2775 -0
  857. package/ios/RCTPakta/RCTPaktaDownloader.h +29 -0
  858. package/ios/RCTPakta/RCTPaktaDownloader.mm +625 -0
  859. package/ios/pakta_build_time.txt +1 -0
  860. package/package.json +88 -0
  861. package/react-native.config.js +6 -0
  862. package/rn-update.podspec +221 -0
  863. package/src/NativePakta.ts +85 -0
  864. package/src/client.ts +1839 -0
  865. package/src/context.ts +102 -0
  866. package/src/core.ts +190 -0
  867. package/src/endpoint.ts +204 -0
  868. package/src/error.ts +168 -0
  869. package/src/errorReporting.ts +141 -0
  870. package/src/globals.d.ts +6 -0
  871. package/src/i18n.ts +113 -0
  872. package/src/index.ts +46 -0
  873. package/src/locales/en.ts +77 -0
  874. package/src/locales/zh.ts +71 -0
  875. package/src/metadata.ts +175 -0
  876. package/src/provider.tsx +629 -0
  877. package/src/telemetry.ts +104 -0
  878. package/src/type.ts +243 -0
  879. package/src/updateFlowCore.ts +428 -0
  880. package/src/utils.ts +268 -0
@@ -0,0 +1,1375 @@
1
+ /**
2
+ * [INPUT]: 依赖 Harmony http/file/zlib/resource APIs、EventHub、DownloadTaskParams、SaveFile 与 NativePatchCore
3
+ * [OUTPUT]: 对外提供 manifest 解析、Range sidecar 续传和 DownloadTask.execute,覆盖 full/diff/pdiff/清理与进度事件
4
+ * [POS]: Harmony 更新 IO 执行核心,由 UpdateContext 串行调度;字节补丁和状态决策分别委托共享 NAPI 与上层
5
+ */
6
+ import http from '@ohos.net.http';
7
+ import fileIo from '@ohos.file.fs';
8
+ import common from '@ohos.app.ability.common';
9
+ import { zlib } from '@kit.BasicServicesKit';
10
+ import { EventHub } from './EventHub';
11
+ import { DownloadTaskParams } from './DownloadTaskParams';
12
+ import { saveFileToSandbox } from './SaveFile';
13
+ import { util } from '@kit.ArkTS';
14
+ import NativePatchCore, {
15
+ ARCHIVE_PATCH_TYPE_FROM_PACKAGE,
16
+ ARCHIVE_PATCH_TYPE_FROM_PPK,
17
+ CopyGroupResult,
18
+ } from './NativePatchCore';
19
+ import { monotonicNowMs } from './MonotonicClock';
20
+ import logger from './Logger';
21
+ import {
22
+ MAX_ARCHIVE_BYTES,
23
+ MAX_MANIFEST_BYTES,
24
+ UNKNOWN_LENGTH_FREE_SPACE_PROBE_BYTES,
25
+ checkUncompressedSize,
26
+ ensureFreeSpace,
27
+ measureExtractedDirectory,
28
+ } from './ArchiveLimits';
29
+ import {
30
+ HARMONY_BUNDLE_FILE_NAME,
31
+ buildInstallRecord,
32
+ stagingDirectoryFor,
33
+ writeInstallRecord,
34
+ } from './InstallRecord';
35
+ import {
36
+ ERROR_DOWNLOAD_FAILED,
37
+ ERROR_FILE_OPERATION_FAILED,
38
+ ERROR_INVALID_OPTIONS,
39
+ ERROR_PATCH_FAILED,
40
+ createUpdateError,
41
+ getErrorMessage,
42
+ toUpdateError,
43
+ } from './ErrorCodes';
44
+
45
+ const TAG = 'DownloadTask';
46
+
47
+ export interface PatchManifestArrays {
48
+ copyFroms: string[];
49
+ copyTos: string[];
50
+ // 与 copyFroms/copyTos 逐位对齐的 copiesCrc(CLI >= 1.0.0 的 pdiff
51
+ // manifest 携带,键是 to);无声明时为 null。拷贝前用它校验包内资源内容,
52
+ // 不符则整次 patch 失败落 full——重打包二进制不能静默拷出漂移的资源。
53
+ copyCrcs: (number | null)[];
54
+ deletes: string[];
55
+ // __diff.json 中对应 bundle patch 条目的 hbcTransform 元数据(原始 JSON
56
+ // 字符串);为空时 native 走现状路径
57
+ hbcTransformMeta: string;
58
+ }
59
+
60
+ export function parseManifestToArrays(
61
+ manifest: Record<string, any>,
62
+ normalizeResourceCopies: boolean,
63
+ ): PatchManifestArrays {
64
+ const copyFroms: string[] = [];
65
+ const copyTos: string[] = [];
66
+ const copyCrcs: (number | null)[] = [];
67
+ const deletesValue = manifest.deletes;
68
+ const deletes = Array.isArray(deletesValue)
69
+ ? deletesValue.map(item => String(item))
70
+ : deletesValue && typeof deletesValue === 'object'
71
+ ? Object.keys(deletesValue)
72
+ : [];
73
+
74
+ const copies = (manifest.copies || {}) as Record<string, string>;
75
+ const copiesCrcValue = manifest.copiesCrc;
76
+ const copiesCrc =
77
+ copiesCrcValue && typeof copiesCrcValue === 'object'
78
+ ? (copiesCrcValue as Record<string, number>)
79
+ : ({} as Record<string, number>);
80
+ for (const to of Object.keys(copies)) {
81
+ const rawFrom = copies[to];
82
+ let from = String(rawFrom || '');
83
+ if (normalizeResourceCopies) {
84
+ from = from.replace('resources/rawfile/', '');
85
+ if (!from) {
86
+ from = to;
87
+ }
88
+ }
89
+ copyFroms.push(from);
90
+ copyTos.push(to);
91
+ const crc = copiesCrc[to];
92
+ copyCrcs.push(typeof crc === 'number' && Number.isFinite(crc) ? crc : null);
93
+ }
94
+
95
+ const hbcTransform = manifest.hbcTransform as
96
+ | Record<string, object>
97
+ | undefined;
98
+ const hbcTransformEntry =
99
+ hbcTransform && typeof hbcTransform === 'object'
100
+ ? hbcTransform[HARMONY_BUNDLE_PATCH_ENTRY]
101
+ : undefined;
102
+ const hbcTransformMeta =
103
+ hbcTransformEntry && typeof hbcTransformEntry === 'object'
104
+ ? JSON.stringify(hbcTransformEntry)
105
+ : '';
106
+
107
+ return {
108
+ copyFroms,
109
+ copyTos,
110
+ copyCrcs,
111
+ deletes,
112
+ hbcTransformMeta,
113
+ };
114
+ }
115
+
116
+ interface PatchInputs {
117
+ entryNames: string[];
118
+ manifestArrays: PatchManifestArrays;
119
+ }
120
+
121
+ function toArrayBufferSlice(
122
+ payload: Uint8Array,
123
+ offset: number,
124
+ length: number,
125
+ ): ArrayBuffer {
126
+ return (payload.buffer as ArrayBuffer).slice(
127
+ payload.byteOffset + offset,
128
+ payload.byteOffset + offset + length,
129
+ );
130
+ }
131
+
132
+ const DIFF_MANIFEST_ENTRY = '__diff.json';
133
+ const HARMONY_BUNDLE_PATCH_ENTRY = 'bundle.harmony.js.patch';
134
+ const TEMP_ORIGIN_BUNDLE_ENTRY = '.origin.bundle.harmony.js';
135
+ const FILE_COPY_BUFFER_SIZE = 64 * 1024;
136
+ const DOWNLOAD_CALL_TIMEOUT_MS = 10 * 60 * 1000;
137
+
138
+ // 断点续传 sidecar(NATIVE_CHECKUPDATE_DESIGN §11.4):记录 partial 属于
139
+ // 哪个 url、验证器与总长。归档与 sidecar 同生共死;有归档无 sidecar(或
140
+ // url 不符)一律视为不可信,删掉重来。
141
+ interface ResumeMeta {
142
+ url: string;
143
+ etag?: string;
144
+ lastModified?: string;
145
+ total?: number;
146
+ }
147
+
148
+ // "bytes <start>-<end>/<total>"。返回总长(“*”记 0);缺失/畸形/起点与
149
+ // 本地 partial 不符、或 range 与 total 自相矛盾(end 在 start 之前、数值
150
+ // total 不大于 end)返回 -1——那样追加的字节不可信。RFC 9110 §14.4 要求
151
+ // 完整长度必须大于 last-pos。
152
+ export function parseContentRangeTotal(
153
+ header: string,
154
+ expectedStart: number,
155
+ ): number {
156
+ if (!header.startsWith('bytes ')) {
157
+ return -1;
158
+ }
159
+ const range = header.substring('bytes '.length).trim();
160
+ const slash = range.indexOf('/');
161
+ const dash = range.indexOf('-');
162
+ if (slash < 0 || dash < 0 || dash > slash) {
163
+ return -1;
164
+ }
165
+ const start = parseInt(range.substring(0, dash).trim(), 10);
166
+ const end = parseInt(range.substring(dash + 1, slash).trim(), 10);
167
+ if (
168
+ Number.isNaN(start) ||
169
+ Number.isNaN(end) ||
170
+ start !== expectedStart ||
171
+ end < start
172
+ ) {
173
+ return -1;
174
+ }
175
+ const totalPart = range.substring(slash + 1).trim();
176
+ if (totalPart === '*') {
177
+ return 0;
178
+ }
179
+ const total = parseInt(totalPart, 10);
180
+ return Number.isNaN(total) || total <= end ? -1 : total;
181
+ }
182
+
183
+ export class DownloadTask {
184
+ private context: common.Context;
185
+ private hash = '';
186
+ private eventHub: EventHub;
187
+ // 一经 downloadFile 正常返回即置位:之后的失败是 patch 应用失败,归档
188
+ // 已被判定有毒,清理时必须连 sidecar 一起删,绝不能续传进同一个失败。
189
+ private downloadPhaseCompleted = false;
190
+ // 下载归档的 SHA-256,解压前计算,写进完成记录。
191
+ private artifactSha256 = '';
192
+
193
+ // 两阶段安装(cpp/patch_core/install_record.h):解压/打补丁全部在
194
+ // <hash>.staging 里进行,写完完成记录后一次 rename 成 <hash>;失败或崩溃
195
+ // 都不会留下一个"看起来像版本"的半成品目录。
196
+ private stagingDirectory(params: DownloadTaskParams): string {
197
+ return stagingDirectoryFor(params.unzipDirectory);
198
+ }
199
+
200
+ private async promoteStaging(params: DownloadTaskParams): Promise<void> {
201
+ const work = this.stagingDirectory(params);
202
+ const bundlePath = `${work}/${HARMONY_BUNDLE_FILE_NAME}`;
203
+ if (!fileIo.accessSync(bundlePath)) {
204
+ throw createUpdateError(
205
+ ERROR_PATCH_FAILED,
206
+ `bundle missing after install: ${bundlePath}`,
207
+ );
208
+ }
209
+ // 整 bundle 几十 MB:摘要在 native 工作线程算,不冻结 UI 线程。
210
+ const bundleSha256 = await NativePatchCore.sha256HexFileAsync(bundlePath);
211
+ await writeInstallRecord(
212
+ work,
213
+ buildInstallRecord(params.hash, bundleSha256, this.artifactSha256),
214
+ );
215
+ if (fileIo.accessSync(params.unzipDirectory)) {
216
+ await this.removeDirectory(params.unzipDirectory);
217
+ }
218
+ await fileIo.rename(work, params.unzipDirectory);
219
+ }
220
+
221
+ constructor(context: common.Context) {
222
+ this.context = context;
223
+ this.eventHub = EventHub.getInstance();
224
+ }
225
+
226
+ private resumeSidecarPath(targetFile: string): string {
227
+ return `${targetFile}.resume`;
228
+ }
229
+
230
+ private async readResumeMeta(
231
+ targetFile: string,
232
+ url: string,
233
+ ): Promise<ResumeMeta | null> {
234
+ const sidecar = this.resumeSidecarPath(targetFile);
235
+ if (!fileIo.accessSync(sidecar)) {
236
+ return null;
237
+ }
238
+ try {
239
+ const meta = this.parseJsonEntry(
240
+ await this.readFileContent(sidecar),
241
+ ) as ResumeMeta;
242
+ if (meta && meta.url === url) {
243
+ return meta;
244
+ }
245
+ } catch (e) {
246
+ // 坏 sidecar 只意味着“无法续传”。
247
+ }
248
+ return null;
249
+ }
250
+
251
+ private async writeResumeMeta(
252
+ targetFile: string,
253
+ meta: ResumeMeta,
254
+ ): Promise<void> {
255
+ try {
256
+ const encoded = new util.TextEncoder().encodeInto(JSON.stringify(meta));
257
+ await this.writeFileContent(this.resumeSidecarPath(targetFile), encoded);
258
+ } catch (e) {
259
+ // 非致命:没有 sidecar,下次从零开始。
260
+ logger.error(TAG, `Failed to persist resume sidecar: ${getErrorMessage(e)}`);
261
+ }
262
+ }
263
+
264
+ private async deleteResumeSidecar(targetFile: string): Promise<void> {
265
+ try {
266
+ const sidecar = this.resumeSidecarPath(targetFile);
267
+ if (fileIo.accessSync(sidecar)) {
268
+ await fileIo.unlink(sidecar);
269
+ }
270
+ } catch (e) {
271
+ logger.error(TAG, `Failed to delete resume sidecar: ${getErrorMessage(e)}`);
272
+ }
273
+ }
274
+
275
+ // 归档连同 sidecar 一起删除(被消费或被判定有毒)。
276
+ private async deleteArchiveAndSidecar(targetFile: string): Promise<void> {
277
+ try {
278
+ if (fileIo.accessSync(targetFile)) {
279
+ await fileIo.unlink(targetFile);
280
+ }
281
+ } catch (e) {
282
+ logger.error(TAG, `Failed to delete archive: ${getErrorMessage(e)}`);
283
+ }
284
+ await this.deleteResumeSidecar(targetFile);
285
+ }
286
+
287
+ // fileIo.rmdir 本身递归删除整个目录树;文件走 unlink。
288
+ private async removeDirectory(path: string): Promise<void> {
289
+ try {
290
+ if (!fileIo.accessSync(path)) {
291
+ return;
292
+ }
293
+ const stat = await fileIo.stat(path);
294
+ if (stat.isDirectory()) {
295
+ await fileIo.rmdir(path);
296
+ } else {
297
+ await fileIo.unlink(path);
298
+ }
299
+ } catch (error) {
300
+ logger.error(TAG, `Failed to delete ${path}: ${getErrorMessage(error)}`);
301
+ throw toUpdateError(error, ERROR_FILE_OPERATION_FAILED);
302
+ }
303
+ }
304
+
305
+ private async ensureDirectory(path: string): Promise<void> {
306
+ if (!path || fileIo.accessSync(path)) {
307
+ return;
308
+ }
309
+
310
+ const parentPath = path.substring(0, path.lastIndexOf('/'));
311
+ if (parentPath && parentPath !== path) {
312
+ await this.ensureDirectory(parentPath);
313
+ }
314
+
315
+ if (!fileIo.accessSync(path)) {
316
+ try {
317
+ await fileIo.mkdir(path);
318
+ } catch (error) {
319
+ if (!fileIo.accessSync(path)) {
320
+ throw error;
321
+ }
322
+ }
323
+ }
324
+ }
325
+
326
+ private async ensureParentDirectory(filePath: string): Promise<void> {
327
+ const parentPath = filePath.substring(0, filePath.lastIndexOf('/'));
328
+ if (!parentPath) {
329
+ return;
330
+ }
331
+ await this.ensureDirectory(parentPath);
332
+ }
333
+
334
+ /**
335
+ * 解压前读取归档解压后的总字节数(zlib.getOriginalSize,API 12——RNOH 的
336
+ * 最低 API 已覆盖)。读不到就拒绝归档:zlib.decompressFile 没有逐条钩子,
337
+ * 不知道展开量就放行等于允许一个 20MB 的归档在 measureExtractedDirectory
338
+ * 跑到之前先把磁盘写满。
339
+ */
340
+ private async readOriginalSize(archiveFile: string): Promise<number> {
341
+ let size: number | undefined;
342
+ try {
343
+ size = await zlib.getOriginalSize(archiveFile);
344
+ } catch (e) {
345
+ throw createUpdateError(
346
+ ERROR_PATCH_FAILED,
347
+ `cannot determine archive expansion size: ${getErrorMessage(e)}`,
348
+ );
349
+ }
350
+ if (typeof size !== 'number' || !Number.isFinite(size) || size < 0) {
351
+ throw createUpdateError(
352
+ ERROR_PATCH_FAILED,
353
+ `cannot determine archive expansion size: ${String(size)}`,
354
+ );
355
+ }
356
+ return size;
357
+ }
358
+
359
+ /**
360
+ * 解压 + 资源上限(cpp/patch_core/archive_limits.h)。zlib.decompressFile
361
+ * 没有逐条钩子:解压前用 getOriginalSize 把总解压量与整包压缩比挡在
362
+ * 上限内(20MB 归档 100:1 的 2GB 载荷不会先解出来再量),按已知解压量查
363
+ * 磁盘,解压量未知直接拒绝;解压后再统计条目数/单条大小/总字节数并拒绝
364
+ * 任意深度的 `.pakta-` 保留条目(超限即失败,staging 目录由失败清理删除)。
365
+ */
366
+ private async extractArchive(
367
+ archiveFile: string,
368
+ unzipDirectory: string,
369
+ ): Promise<void> {
370
+ const archiveStat = await fileIo.stat(archiveFile);
371
+ if (archiveStat.size > MAX_ARCHIVE_BYTES) {
372
+ throw createUpdateError(
373
+ ERROR_PATCH_FAILED,
374
+ `archive too large: ${archiveStat.size} bytes`,
375
+ );
376
+ }
377
+ const originalSize = await this.readOriginalSize(archiveFile);
378
+ checkUncompressedSize(archiveStat.size, originalSize);
379
+ await ensureFreeSpace(unzipDirectory, originalSize);
380
+ try {
381
+ await zlib.decompressFile(archiveFile, unzipDirectory);
382
+ } catch (e) {
383
+ throw toUpdateError(e, ERROR_PATCH_FAILED);
384
+ }
385
+ await measureExtractedDirectory(unzipDirectory);
386
+ }
387
+
388
+ private async recreateDirectory(path: string): Promise<void> {
389
+ await this.removeDirectory(path);
390
+ await this.ensureDirectory(path);
391
+ }
392
+
393
+ private async readFileContent(filePath: string): Promise<ArrayBuffer> {
394
+ const stat = await fileIo.stat(filePath);
395
+ const reader = await fileIo.open(filePath, fileIo.OpenMode.READ_ONLY);
396
+ const content = new ArrayBuffer(stat.size);
397
+
398
+ try {
399
+ await fileIo.read(reader.fd, content);
400
+ return content;
401
+ } finally {
402
+ await fileIo.close(reader);
403
+ }
404
+ }
405
+
406
+ private async listEntryNames(directory: string): Promise<string[]> {
407
+ const files = await fileIo.listFile(directory);
408
+ const validFiles = files.filter(file => file !== '.' && file !== '..');
409
+
410
+ const stats = await Promise.all(
411
+ validFiles.map(file => fileIo.stat(`${directory}/${file}`)),
412
+ );
413
+
414
+ return validFiles.filter((_, index) => !stats[index].isDirectory());
415
+ }
416
+
417
+ private async writeFileContent(
418
+ targetFile: string,
419
+ content: ArrayBuffer | Uint8Array,
420
+ ): Promise<void> {
421
+ const payload =
422
+ content instanceof Uint8Array ? content : new Uint8Array(content);
423
+ await this.ensureParentDirectory(targetFile);
424
+ if (fileIo.accessSync(targetFile)) {
425
+ await fileIo.unlink(targetFile);
426
+ }
427
+
428
+ let writer: fileIo.File | null = null;
429
+ try {
430
+ writer = await fileIo.open(
431
+ targetFile,
432
+ fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY,
433
+ );
434
+ const chunkSize = FILE_COPY_BUFFER_SIZE;
435
+ let bytesWritten = 0;
436
+
437
+ while (bytesWritten < payload.byteLength) {
438
+ const chunkLength = Math.min(
439
+ chunkSize,
440
+ payload.byteLength - bytesWritten,
441
+ );
442
+ const chunk = toArrayBufferSlice(payload, bytesWritten, chunkLength);
443
+ await fileIo.write(writer.fd, chunk);
444
+ bytesWritten += chunkLength;
445
+ }
446
+ } finally {
447
+ if (writer) {
448
+ await fileIo.close(writer);
449
+ }
450
+ }
451
+ }
452
+
453
+ private parseJsonEntry(content: ArrayBuffer): Record<string, any> {
454
+ return JSON.parse(
455
+ new util.TextDecoder().decodeToString(new Uint8Array(content)),
456
+ ) as Record<string, any>;
457
+ }
458
+
459
+ private async readManifestArrays(
460
+ directory: string,
461
+ normalizeResourceCopies: boolean,
462
+ ): Promise<PatchManifestArrays> {
463
+ const manifestPath = `${directory}/${DIFF_MANIFEST_ENTRY}`;
464
+ if (!fileIo.accessSync(manifestPath)) {
465
+ return {
466
+ copyFroms: [],
467
+ copyTos: [],
468
+ copyCrcs: [],
469
+ deletes: [],
470
+ hbcTransformMeta: '',
471
+ };
472
+ }
473
+
474
+ const manifestStat = await fileIo.stat(manifestPath);
475
+ if (manifestStat.size > MAX_MANIFEST_BYTES) {
476
+ throw createUpdateError(
477
+ ERROR_PATCH_FAILED,
478
+ `patch manifest too large: ${manifestStat.size} bytes`,
479
+ );
480
+ }
481
+ return parseManifestToArrays(
482
+ this.parseJsonEntry(await this.readFileContent(manifestPath)),
483
+ normalizeResourceCopies,
484
+ );
485
+ }
486
+
487
+
488
+ private async applyBundlePatchFromFileSource(
489
+ originContent: ArrayBuffer,
490
+ workingDirectory: string,
491
+ bundlePatchPath: string,
492
+ outputFile: string,
493
+ hbcTransformMeta = '',
494
+ ): Promise<void> {
495
+ const originBundlePath = `${workingDirectory}/${TEMP_ORIGIN_BUNDLE_ENTRY}`;
496
+ try {
497
+ await this.writeFileContent(originBundlePath, originContent);
498
+ await NativePatchCore.applyPatchFromFileSource({
499
+ copyFroms: [],
500
+ copyTos: [],
501
+ deletes: [],
502
+ sourceRoot: workingDirectory,
503
+ targetRoot: workingDirectory,
504
+ originBundlePath,
505
+ bundlePatchPath,
506
+ bundleOutputPath: outputFile,
507
+ enableMerge: false,
508
+ bundleHbcTransformMeta: hbcTransformMeta,
509
+ });
510
+ } catch (error) {
511
+ throw createUpdateError(
512
+ ERROR_PATCH_FAILED,
513
+ `Failed to process bundle patch: ${getErrorMessage(error)}`,
514
+ );
515
+ } finally {
516
+ if (fileIo.accessSync(originBundlePath)) {
517
+ await fileIo.unlink(originBundlePath);
518
+ }
519
+ }
520
+ }
521
+
522
+ private async copySandboxFile(
523
+ sourceFile: string,
524
+ targetFile: string,
525
+ ): Promise<void> {
526
+ let reader: fileIo.File | null = null;
527
+ let writer: fileIo.File | null = null;
528
+ const buffer = new ArrayBuffer(FILE_COPY_BUFFER_SIZE);
529
+ let offset = 0;
530
+
531
+ try {
532
+ reader = await fileIo.open(sourceFile, fileIo.OpenMode.READ_ONLY);
533
+ await this.ensureParentDirectory(targetFile);
534
+ if (fileIo.accessSync(targetFile)) {
535
+ await fileIo.unlink(targetFile);
536
+ }
537
+ writer = await fileIo.open(
538
+ targetFile,
539
+ fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY,
540
+ );
541
+
542
+ while (true) {
543
+ const readLength = await fileIo.read(reader.fd, buffer, {
544
+ offset,
545
+ length: FILE_COPY_BUFFER_SIZE,
546
+ });
547
+ if (readLength <= 0) {
548
+ break;
549
+ }
550
+
551
+ await fileIo.write(writer.fd, buffer.slice(0, readLength));
552
+ offset += readLength;
553
+
554
+ if (readLength < FILE_COPY_BUFFER_SIZE) {
555
+ break;
556
+ }
557
+ }
558
+ } finally {
559
+ if (reader) {
560
+ await fileIo.close(reader);
561
+ }
562
+ if (writer) {
563
+ await fileIo.close(writer);
564
+ }
565
+ }
566
+ }
567
+
568
+ private async downloadFile(params: DownloadTaskParams): Promise<void> {
569
+ this.hash = params.hash;
570
+ // 跨启动断点续传(§11.4):砖机每次启动只有几百毫秒,每个已到手的字节
571
+ // 都必须在进程死亡后仍然算数、单调累积。
572
+ const outcome = await this.transferArchive(params, true);
573
+ if (outcome === 'staleRange') {
574
+ // 416 且本地 partial 与服务端不再匹配:删掉重来,仅此一次。
575
+ await this.deleteArchiveAndSidecar(params.targetFile);
576
+ const retry = await this.transferArchive(params, false);
577
+ if (retry !== 'done') {
578
+ throw createUpdateError(
579
+ ERROR_DOWNLOAD_FAILED,
580
+ `Server rejected the download range for ${params.url}`,
581
+ );
582
+ }
583
+ }
584
+ this.downloadPhaseCompleted = true;
585
+ }
586
+
587
+ private async transferArchive(
588
+ params: DownloadTaskParams,
589
+ allowResume: boolean,
590
+ ): Promise<'done' | 'staleRange'> {
591
+ const httpRequest = http.createHttp();
592
+ let writer: fileIo.File | null = null;
593
+ let contentLength = 0; // 本次响应体长度(206 时是剩余部分)
594
+ let totalAll = 0; // 整个文件的总长(0 = 未知)
595
+ let baseOffset = 0; // 响应许可的续传起点
596
+ let received = 0;
597
+ let writeError: Error | null = null;
598
+ let writeQueue = Promise.resolve();
599
+ let lastReportedPercentage = -1;
600
+ let lastReportedBytes = 0;
601
+ let etagHeader = '';
602
+ let lastModifiedHeader = '';
603
+ let contentRangeHeader = '';
604
+ let contentEncodingHeader = '';
605
+ // headersReceive 与 requestInStream promise 的先后顺序平台不保证;
606
+ // 依赖 Content-Range 的续传路径必须显式等到响应头到达。
607
+ let headersResolve: (() => void) | null = null;
608
+ const headersPromise = new Promise<void>(resolve => {
609
+ headersResolve = resolve;
610
+ });
611
+ const deadlineUptimeMs = params.deadlineUptimeMs > 0
612
+ ? params.deadlineUptimeMs
613
+ : monotonicNowMs() + DOWNLOAD_CALL_TIMEOUT_MS;
614
+ if (deadlineUptimeMs <= monotonicNowMs()) {
615
+ throw createUpdateError(
616
+ ERROR_DOWNLOAD_FAILED,
617
+ 'Download deadline expired before start',
618
+ );
619
+ }
620
+
621
+ // 续传状态盘点:有匹配的 sidecar 且 partial 未收齐才发 Range。
622
+ let resumeMeta: ResumeMeta | null = allowResume
623
+ ? await this.readResumeMeta(params.targetFile, params.url)
624
+ : null;
625
+ let resumeOffset = 0;
626
+ if (resumeMeta && fileIo.accessSync(params.targetFile)) {
627
+ const stat = await fileIo.stat(params.targetFile);
628
+ const knownTotal = resumeMeta.total ?? 0;
629
+ if (stat.size > 0 && knownTotal > 0 && stat.size === knownTotal) {
630
+ // 上次尝试已收齐(进程死在下载结束与解压之间):无需再传。
631
+ httpRequest.destroy();
632
+ this.onProgressUpdate(knownTotal, knownTotal);
633
+ return 'done';
634
+ }
635
+ if (stat.size > 0 && (knownTotal <= 0 || stat.size < knownTotal)) {
636
+ resumeOffset = stat.size;
637
+ }
638
+ }
639
+ if (resumeOffset === 0) {
640
+ if (fileIo.accessSync(params.targetFile)) {
641
+ await fileIo.unlink(params.targetFile);
642
+ } else {
643
+ await this.ensureParentDirectory(params.targetFile);
644
+ }
645
+ await this.deleteResumeSidecar(params.targetFile);
646
+ resumeMeta = null;
647
+ }
648
+
649
+ // 响应体在状态码判定前一律只进内存缓冲:416/5xx 的错误体若被追加进
650
+ // partial,续传状态就永久污染了。requestInStream 的 promise 在响应头
651
+ // 到达时解决,缓冲窗口只有头与首批数据之间的间隙。
652
+ let pendingChunks: ArrayBuffer[] | null = [];
653
+ let discardBody = false;
654
+ let authorize: (() => void) | null = null;
655
+ const authorization = new Promise<void>(resolve => {
656
+ authorize = resolve;
657
+ });
658
+
659
+ const reportProgress = () => {
660
+ const overall = baseOffset + received;
661
+ const overallTotal = totalAll > 0
662
+ ? totalAll
663
+ : contentLength > 0
664
+ ? baseOffset + contentLength
665
+ : 0;
666
+ if (overallTotal > 0) {
667
+ const percentage = Math.round((overall * 100) / overallTotal);
668
+ if (percentage <= lastReportedPercentage) {
669
+ return;
670
+ }
671
+ lastReportedPercentage = percentage;
672
+ } else if (overall - lastReportedBytes < 256 * 1024) {
673
+ return;
674
+ } else {
675
+ lastReportedBytes = overall;
676
+ }
677
+ this.onProgressUpdate(overall, overallTotal);
678
+ };
679
+
680
+ const closeWriter = async () => {
681
+ if (writer) {
682
+ await fileIo.close(writer);
683
+ writer = null;
684
+ }
685
+ };
686
+
687
+ let freeSpaceReservedUntil = 0;
688
+ const enqueueWrite = (data: ArrayBuffer) => {
689
+ received += data.byteLength;
690
+ if (!writeError && baseOffset + received > MAX_ARCHIVE_BYTES) {
691
+ // 未知长度/分块传输的兜底:超过上限即停写,请求在下面结算时失败。
692
+ writeError = createUpdateError(
693
+ ERROR_PATCH_FAILED,
694
+ `archive too large: exceeded ${MAX_ARCHIVE_BYTES}`,
695
+ );
696
+ }
697
+ // 未知长度:响应到达时只能预留安全余量,所以任何会写过已预留字节数的
698
+ // 写入之前先探测,每次至少预留接下来的 PROBE 字节(单个 chunk 更大时按
699
+ // chunk 算)——任何写入都吃不到余量(归档上限本身远大于余量)。失败保留
700
+ // partial 供下次续传。
701
+ const writtenBefore = received - data.byteLength;
702
+ const probeFreeSpace = totalAll <= 0 && received > freeSpaceReservedUntil;
703
+ const reserve = Math.max(
704
+ UNKNOWN_LENGTH_FREE_SPACE_PROBE_BYTES,
705
+ data.byteLength,
706
+ );
707
+ if (probeFreeSpace) {
708
+ freeSpaceReservedUntil = writtenBefore + reserve;
709
+ }
710
+ writeQueue = writeQueue.then(async () => {
711
+ if (!writer || writeError) {
712
+ return;
713
+ }
714
+ try {
715
+ if (probeFreeSpace) {
716
+ await ensureFreeSpace(params.targetFile, reserve);
717
+ }
718
+ await fileIo.write(writer.fd, data);
719
+ } catch (error) {
720
+ writeError = error as Error;
721
+ }
722
+ });
723
+ };
724
+
725
+ // Watchdog: reject the download if no data is received for a while, so a
726
+ // stalled transfer after requestInStream resolves cannot hang the download
727
+ // Promise (and the JS caller) forever.
728
+ const INACTIVITY_TIMEOUT_MS = 60000;
729
+ let watchdogTimer: number | null = null;
730
+ let deadlineTimer: number | null = null;
731
+ let inactivityReject: ((error: Error) => void) | null = null;
732
+ const clearWatchdog = () => {
733
+ if (watchdogTimer !== null) {
734
+ clearTimeout(watchdogTimer);
735
+ watchdogTimer = null;
736
+ }
737
+ };
738
+ const refreshWatchdog = () => {
739
+ clearWatchdog();
740
+ watchdogTimer = setTimeout(() => {
741
+ if (inactivityReject) {
742
+ inactivityReject(
743
+ createUpdateError(
744
+ ERROR_DOWNLOAD_FAILED,
745
+ `Download stalled: no data received for ${INACTIVITY_TIMEOUT_MS}ms`,
746
+ ),
747
+ );
748
+ }
749
+ }, INACTIVITY_TIMEOUT_MS);
750
+ };
751
+ const inactivityPromise = new Promise<void>((_, reject) => {
752
+ inactivityReject = reject;
753
+ });
754
+
755
+ const dataEndPromise = new Promise<void>((resolve, reject) => {
756
+ httpRequest.on('dataEnd', () => {
757
+ clearWatchdog();
758
+ // dataEnd 可能先于状态码判定到达(小响应):flush 必须等鉴权,
759
+ // 否则缓冲中的字节还没进 writeQueue 就被当成“全部写完”。
760
+ authorization
761
+ .then(() => writeQueue)
762
+ .then(async () => {
763
+ if (writeError) {
764
+ throw writeError;
765
+ }
766
+ await closeWriter();
767
+ resolve();
768
+ })
769
+ .catch(async error => {
770
+ // reject 必须先于 closeWriter:此时 watchdog 已清除,若 close
771
+ // 也失败(同一磁盘故障的常见连锁)而 reject 未执行,下载 Promise
772
+ // 将永久挂起——正是 HM-2 要消灭的症状。
773
+ reject(error);
774
+ try {
775
+ await closeWriter();
776
+ } catch (closeErr) {
777
+ logger.error(
778
+ TAG,
779
+ `closeWriter failed after write error: ${getErrorMessage(closeErr)}`,
780
+ );
781
+ }
782
+ });
783
+ });
784
+ });
785
+ // 下面的 race 可能在 dataEnd 到来之前就以 deadline/inactivity 结束,此时
786
+ // dataEndPromise 的 reject 没有订阅者——标记为已处理,避免 unhandled
787
+ // rejection;真正的错误已经由 race 抛出。
788
+ dataEndPromise.catch(() => {});
789
+
790
+ try {
791
+ httpRequest.on('headersReceive', (header: Object) => {
792
+ if (!header) {
793
+ return;
794
+ }
795
+ const headers = header as Record<string, string>;
796
+ for (const key of Object.keys(headers)) {
797
+ const lower = key.toLowerCase();
798
+ if (lower === 'content-length') {
799
+ const length = parseInt(headers[key], 10);
800
+ if (!Number.isNaN(length)) {
801
+ contentLength = length;
802
+ }
803
+ } else if (lower === 'etag') {
804
+ etagHeader = headers[key];
805
+ } else if (lower === 'last-modified') {
806
+ lastModifiedHeader = headers[key];
807
+ } else if (lower === 'content-range') {
808
+ contentRangeHeader = headers[key];
809
+ } else if (lower === 'content-encoding') {
810
+ contentEncodingHeader = headers[key];
811
+ }
812
+ }
813
+ const signalHeaders = headersResolve as (() => void) | null;
814
+ if (signalHeaders) {
815
+ signalHeaders();
816
+ }
817
+ });
818
+
819
+ httpRequest.on('dataReceive', (data: ArrayBuffer) => {
820
+ refreshWatchdog();
821
+ if (writeError || discardBody) {
822
+ return;
823
+ }
824
+ if (pendingChunks) {
825
+ pendingChunks.push(data);
826
+ return;
827
+ }
828
+ enqueueWrite(data);
829
+ reportProgress();
830
+ });
831
+
832
+ httpRequest.on(
833
+ 'dataReceiveProgress',
834
+ (data: http.DataReceiveProgressInfo) => {
835
+ // Only refine the known total here; progress events are emitted from
836
+ // the dataReceive handler to avoid double-firing.
837
+ if (data.totalSize > 0) {
838
+ contentLength = data.totalSize;
839
+ }
840
+ },
841
+ );
842
+
843
+ const requestHeader: Record<string, string> = {
844
+ 'Content-Type': 'application/octet-stream',
845
+ };
846
+ if (resumeOffset > 0) {
847
+ // 只有续传请求钉死编码:Range 偏移必须与盘上字节一一对应。
848
+ // 全新下载保留平台默认的压缩处理,与引入续传前的行为一致。
849
+ requestHeader['Accept-Encoding'] = 'identity';
850
+ requestHeader.Range = `bytes=${resumeOffset}-`;
851
+ const validator = resumeMeta?.etag || resumeMeta?.lastModified;
852
+ if (validator) {
853
+ // 带验证器时文件已变更的服务端会退回完整 200,而不是把不匹配
854
+ // 的字节接上来。
855
+ requestHeader['If-Range'] = validator;
856
+ }
857
+ }
858
+
859
+ const remainingMs = Math.max(1, deadlineUptimeMs - monotonicNowMs());
860
+ const deadlinePromise = new Promise<never>((_, reject) => {
861
+ deadlineTimer = setTimeout(() => {
862
+ reject(
863
+ createUpdateError(
864
+ ERROR_DOWNLOAD_FAILED,
865
+ 'Download exceeded its whole-call deadline',
866
+ ),
867
+ );
868
+ }, remainingMs);
869
+ });
870
+ // netstack 把 readTimeout 交给 libcurl 的 CURLOPT_TIMEOUT_MS(整次传输
871
+ // 总时长)而非空闲超时:固定 60s 会让慢网上的大全量包次次失败。两个
872
+ // 超时都取剩余 deadline;卡死由下面的 60s 不活动看门狗负责——两种
873
+ // 语义下都正确。
874
+ const responseCode = await Promise.race([
875
+ httpRequest.requestInStream(params.url, {
876
+ method: http.RequestMethod.GET,
877
+ readTimeout: remainingMs,
878
+ connectTimeout: remainingMs,
879
+ header: requestHeader,
880
+ }),
881
+ deadlinePromise,
882
+ ]);
883
+
884
+ if (responseCode === 416) {
885
+ discardBody = true;
886
+ pendingChunks = null;
887
+ const knownTotal = resumeMeta?.total ?? 0;
888
+ if (knownTotal > 0 && fileIo.accessSync(params.targetFile)) {
889
+ const stat = await fileIo.stat(params.targetFile);
890
+ if (stat.size === knownTotal) {
891
+ // partial 实际上就是完整文件。
892
+ this.onProgressUpdate(knownTotal, knownTotal);
893
+ return 'done';
894
+ }
895
+ }
896
+ return 'staleRange';
897
+ }
898
+ if (responseCode > 299) {
899
+ // 响应体从未落盘,partial + sidecar 原样保留——那就是续传状态。
900
+ discardBody = true;
901
+ pendingChunks = null;
902
+ throw createUpdateError(
903
+ ERROR_DOWNLOAD_FAILED,
904
+ `Server error: ${responseCode}`,
905
+ );
906
+ }
907
+
908
+ let encodedBody = false;
909
+ if (resumeOffset > 0 && responseCode === 206) {
910
+ // Content-Range 只能从 headersReceive 拿到,而它与 promise 的先后
911
+ // 顺序不保证——等头到达(dataEnd 前必到,兜底 5s)再判定。
912
+ let headersTimer = 0;
913
+ await Promise.race([
914
+ headersPromise,
915
+ new Promise<void>(resolve => {
916
+ headersTimer = setTimeout(resolve, 5000);
917
+ }),
918
+ ]);
919
+ clearTimeout(headersTimer);
920
+ encodedBody =
921
+ !!contentEncodingHeader &&
922
+ contentEncodingHeader.toLowerCase() !== 'identity';
923
+ const parsedTotal = encodedBody
924
+ ? -1
925
+ : parseContentRangeTotal(contentRangeHeader, resumeOffset);
926
+ if (parsedTotal < 0) {
927
+ // 编码过的 range 字节、或 Content-Range 缺失/畸形/起点不符:
928
+ // 追加不可信。按“partial 已过期”处理(删掉、干净地重来一次),
929
+ // 而不是抛错——抛错会保留 partial,之后每次都撞同一堵墙。
930
+ discardBody = true;
931
+ pendingChunks = null;
932
+ return 'staleRange';
933
+ }
934
+ baseOffset = resumeOffset;
935
+ totalAll = parsedTotal;
936
+ writer = await fileIo.open(
937
+ params.targetFile,
938
+ fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.APPEND,
939
+ );
940
+ } else {
941
+ // 服务端忽略了 Range(或本就没发):从零开始。
942
+ if (fileIo.accessSync(params.targetFile)) {
943
+ await fileIo.unlink(params.targetFile);
944
+ }
945
+ baseOffset = 0;
946
+ totalAll = contentLength > 0 ? contentLength : 0;
947
+ writer = await fileIo.open(
948
+ params.targetFile,
949
+ fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY,
950
+ );
951
+ }
952
+ if (totalAll > MAX_ARCHIVE_BYTES) {
953
+ writeError = createUpdateError(
954
+ ERROR_PATCH_FAILED,
955
+ `archive too large: ${totalAll} bytes`,
956
+ );
957
+ throw writeError;
958
+ }
959
+ await ensureFreeSpace(
960
+ params.targetFile,
961
+ totalAll > 0 ? totalAll - baseOffset : 0,
962
+ );
963
+ // 先落 sidecar 再放行写入,流中崩溃才有得续。
964
+ const meta: ResumeMeta = { url: params.url };
965
+ const etag = etagHeader || resumeMeta?.etag;
966
+ const lastModified = lastModifiedHeader || resumeMeta?.lastModified;
967
+ if (etag) {
968
+ meta.etag = etag;
969
+ }
970
+ if (lastModified) {
971
+ meta.lastModified = lastModified;
972
+ }
973
+ if (totalAll > 0) {
974
+ meta.total = totalAll;
975
+ }
976
+ await this.writeResumeMeta(params.targetFile, meta);
977
+
978
+ // 鉴权通过:回放缓冲,之后的数据直写。
979
+ const buffered = pendingChunks ?? [];
980
+ pendingChunks = null;
981
+ for (const chunk of buffered) {
982
+ enqueueWrite(chunk);
983
+ }
984
+ if (buffered.length > 0) {
985
+ reportProgress();
986
+ }
987
+ const grant = authorize as (() => void) | null;
988
+ if (grant) {
989
+ grant();
990
+ }
991
+
992
+ // watchdog 到这里才首次启动:requestInStream 阶段已有 connect/readTimeout
993
+ // 覆盖;若提早启动,连接超过 60s 时 inactivityPromise 会在 race 尚无订阅者
994
+ // 时 reject(unhandled rejection),且 promise 一经 reject 无法复活——
995
+ // 即使随后数据正常流入,race 也必然以 "Download stalled" 失败。
996
+ refreshWatchdog();
997
+ await Promise.race([dataEndPromise, inactivityPromise, deadlinePromise]);
998
+ // dataEnd 之后响应头必然已到齐,此时才能可靠判定编码。
999
+ const finalEncoded =
1000
+ !!contentEncodingHeader &&
1001
+ contentEncodingHeader.toLowerCase() !== 'identity';
1002
+ const stats = await fileIo.stat(params.targetFile);
1003
+ if (!finalEncoded) {
1004
+ if (contentLength > 0 && received !== contentLength) {
1005
+ throw createUpdateError(
1006
+ ERROR_DOWNLOAD_FAILED,
1007
+ `Download incomplete: expected ${contentLength} bytes but got ${received} bytes`,
1008
+ );
1009
+ }
1010
+ if (totalAll > 0 && stats.size !== totalAll) {
1011
+ throw createUpdateError(
1012
+ ERROR_DOWNLOAD_FAILED,
1013
+ `Download incomplete: expected ${totalAll} total bytes but got ${stats.size} bytes`,
1014
+ );
1015
+ }
1016
+ // 用最终观测值刷新 sidecar:首次写入可能因头部竞态缺 total/验证器,
1017
+ // 补齐后“下载完、解压前死”的窗口才能被 complete 检测覆盖。
1018
+ const finalMeta: ResumeMeta = { url: params.url, total: stats.size };
1019
+ if (etagHeader || resumeMeta?.etag) {
1020
+ finalMeta.etag = etagHeader || resumeMeta?.etag;
1021
+ }
1022
+ if (lastModifiedHeader || resumeMeta?.lastModified) {
1023
+ finalMeta.lastModified =
1024
+ lastModifiedHeader || resumeMeta?.lastModified;
1025
+ }
1026
+ await this.writeResumeMeta(params.targetFile, finalMeta);
1027
+ } else {
1028
+ // 编码传输不可续传:盘上是解码后的字节,编码域的长度与偏移都失效。
1029
+ await this.deleteResumeSidecar(params.targetFile);
1030
+ }
1031
+ return 'done';
1032
+ } catch (error) {
1033
+ logger.error(TAG, `Download failed: ${getErrorMessage(error)}`);
1034
+ throw toUpdateError(error, ERROR_DOWNLOAD_FAILED);
1035
+ } finally {
1036
+ clearWatchdog();
1037
+ if (deadlineTimer !== null) {
1038
+ clearTimeout(deadlineTimer);
1039
+ }
1040
+ // 解除 dataEnd 对鉴权的等待(失败路径上可能从未放行)。
1041
+ const release = authorize as (() => void) | null;
1042
+ if (release) {
1043
+ release();
1044
+ }
1045
+ try {
1046
+ await closeWriter();
1047
+ } catch (closeError) {
1048
+ logger.error(TAG, `Failed to close file: ${getErrorMessage(closeError)}`);
1049
+ }
1050
+ httpRequest.off('headersReceive');
1051
+ httpRequest.off('dataReceive');
1052
+ httpRequest.off('dataReceiveProgress');
1053
+ httpRequest.off('dataEnd');
1054
+ httpRequest.destroy();
1055
+ }
1056
+ }
1057
+
1058
+ private onProgressUpdate(received: number, total: number): void {
1059
+ this.eventHub.emit('RCTPaktaDownloadProgress', {
1060
+ received,
1061
+ total,
1062
+ hash: this.hash,
1063
+ });
1064
+ }
1065
+
1066
+ /**
1067
+ * 三种安装共用的脚手架:下载 → 重建 staging → 归档摘要(工作线程)→ 解压
1068
+ * (含上限校验)。返回 staging 目录。下载完成后的失败一律是 patch 应用
1069
+ * 失败(见 execute 的归码)。
1070
+ */
1071
+ private async downloadAndExtract(params: DownloadTaskParams): Promise<string> {
1072
+ await this.downloadFile(params);
1073
+ const work = this.stagingDirectory(params);
1074
+ await this.recreateDirectory(work);
1075
+ this.artifactSha256 = await NativePatchCore.sha256HexFileAsync(
1076
+ params.targetFile,
1077
+ );
1078
+ await this.extractArchive(params.targetFile, work);
1079
+ return work;
1080
+ }
1081
+
1082
+ /** 解压目录里的条目名 + __diff.json 解析结果,供 patch plan 使用。 */
1083
+ private async readPatchInputs(
1084
+ work: string,
1085
+ normalizeResourceCopies: boolean,
1086
+ ): Promise<PatchInputs> {
1087
+ const results = await Promise.all([
1088
+ this.listEntryNames(work),
1089
+ this.readManifestArrays(work, normalizeResourceCopies),
1090
+ ]);
1091
+ return { entryNames: results[0], manifestArrays: results[1] };
1092
+ }
1093
+
1094
+ private async doFullPatch(params: DownloadTaskParams): Promise<void> {
1095
+ await this.downloadAndExtract(params);
1096
+ await this.deleteArchiveAndSidecar(params.targetFile);
1097
+ }
1098
+
1099
+ private async doPatchFromApp(params: DownloadTaskParams): Promise<void> {
1100
+ const work = await this.downloadAndExtract(params);
1101
+ const inputs = await this.readPatchInputs(work, true);
1102
+ const manifestArrays = inputs.manifestArrays;
1103
+
1104
+ NativePatchCore.buildArchivePatchPlan(
1105
+ ARCHIVE_PATCH_TYPE_FROM_PACKAGE,
1106
+ inputs.entryNames,
1107
+ manifestArrays.copyFroms,
1108
+ manifestArrays.copyTos,
1109
+ manifestArrays.deletes,
1110
+ HARMONY_BUNDLE_PATCH_ENTRY,
1111
+ );
1112
+
1113
+ const bundlePatchPath = `${work}/${HARMONY_BUNDLE_PATCH_ENTRY}`;
1114
+ if (!fileIo.accessSync(bundlePatchPath)) {
1115
+ throw createUpdateError(ERROR_PATCH_FAILED, 'bundle patch not found');
1116
+ }
1117
+ const resourceManager = this.context.resourceManager;
1118
+ const originContent = await resourceManager.getRawFileContent(
1119
+ 'bundle.harmony.js',
1120
+ );
1121
+ await this.applyBundlePatchFromFileSource(
1122
+ originContent.buffer as ArrayBuffer,
1123
+ work,
1124
+ bundlePatchPath,
1125
+ `${work}/${HARMONY_BUNDLE_FILE_NAME}`,
1126
+ manifestArrays.hbcTransformMeta,
1127
+ );
1128
+ // 组按 from 聚合;同一 from 的内容必然一致,所以每组一个 CRC 即可
1129
+ // (与 manifest 逐位对齐的 copyCrcs 里取第一个非空值)。
1130
+ const crcByFrom = new Map<string, number>();
1131
+ manifestArrays.copyFroms.forEach((from, index) => {
1132
+ const crc = manifestArrays.copyCrcs[index];
1133
+ if (crc !== null && !crcByFrom.has(from)) {
1134
+ crcByFrom.set(from, crc);
1135
+ }
1136
+ });
1137
+ await this.copyFromResource(
1138
+ NativePatchCore.buildCopyGroups(
1139
+ manifestArrays.copyFroms,
1140
+ manifestArrays.copyTos,
1141
+ ),
1142
+ work,
1143
+ crcByFrom,
1144
+ );
1145
+ await this.deleteArchiveAndSidecar(params.targetFile);
1146
+ }
1147
+
1148
+ private async doPatchFromPpk(params: DownloadTaskParams): Promise<void> {
1149
+ const work = await this.downloadAndExtract(params);
1150
+ const inputs = await this.readPatchInputs(work, false);
1151
+ const manifestArrays = inputs.manifestArrays;
1152
+
1153
+ const plan = NativePatchCore.buildArchivePatchPlan(
1154
+ ARCHIVE_PATCH_TYPE_FROM_PPK,
1155
+ inputs.entryNames,
1156
+ manifestArrays.copyFroms,
1157
+ manifestArrays.copyTos,
1158
+ manifestArrays.deletes,
1159
+ HARMONY_BUNDLE_PATCH_ENTRY,
1160
+ );
1161
+ await NativePatchCore.applyPatchFromFileSource({
1162
+ copyFroms: manifestArrays.copyFroms,
1163
+ copyTos: manifestArrays.copyTos,
1164
+ deletes: manifestArrays.deletes,
1165
+ sourceRoot: params.originDirectory,
1166
+ targetRoot: work,
1167
+ originBundlePath: `${params.originDirectory}/bundle.harmony.js`,
1168
+ bundlePatchPath: `${work}/${HARMONY_BUNDLE_PATCH_ENTRY}`,
1169
+ bundleOutputPath: `${work}/${HARMONY_BUNDLE_FILE_NAME}`,
1170
+ mergeSourceSubdir: plan.mergeSourceSubdir,
1171
+ enableMerge: plan.enableMerge,
1172
+ bundleHbcTransformMeta: manifestArrays.hbcTransformMeta,
1173
+ });
1174
+ logger.info(TAG, 'Patch from PPK completed');
1175
+ await this.deleteArchiveAndSidecar(params.targetFile);
1176
+ }
1177
+
1178
+ private async copyFromResource(
1179
+ copyGroups: CopyGroupResult[],
1180
+ targetRoot: string,
1181
+ crcByFrom?: Map<string, number>,
1182
+ ): Promise<void> {
1183
+ let currentFrom = '';
1184
+ try {
1185
+ const resourceManager = this.context.resourceManager;
1186
+
1187
+ for (const group of copyGroups) {
1188
+ currentFrom = group.from;
1189
+ const targets = group.toPaths.map(path => `${targetRoot}/${path}`);
1190
+ if (targets.length === 0) {
1191
+ continue;
1192
+ }
1193
+ const expectedCrc = crcByFrom?.get(currentFrom);
1194
+
1195
+ if (currentFrom.startsWith('resources/base/media/')) {
1196
+ // Strip only the final extension: 'icon.round.png' -> 'icon.round',
1197
+ // not 'icon' (getMediaByName expects the full resource name).
1198
+ const mediaName = currentFrom
1199
+ .replace('resources/base/media/', '')
1200
+ .replace(/\.[^.]+$/, '');
1201
+ const mediaBuffer = await resourceManager.getMediaByName(mediaName);
1202
+ this.verifyCopySourceCrc(mediaBuffer, expectedCrc, currentFrom);
1203
+ await this.ensureParentDirectories(targets);
1204
+ await Promise.all(
1205
+ targets.map(target => this.writeFileContent(target, mediaBuffer)),
1206
+ );
1207
+ continue;
1208
+ }
1209
+
1210
+ if (expectedCrc !== undefined) {
1211
+ // 声明了 CRC 的条目改走字节路径:读出内容先校验再落盘。
1212
+ // 重打包的二进制里同名 rawfile 内容可能已漂移,fd 直拷会把
1213
+ // 错误字节静默装进版本目录。
1214
+ const rawContent =
1215
+ await resourceManager.getRawFileContent(currentFrom);
1216
+ this.verifyCopySourceCrc(rawContent, expectedCrc, currentFrom);
1217
+ const firstTarget = targets[0];
1218
+ const restTargets = targets.slice(1);
1219
+ await this.writeFileContent(firstTarget, rawContent);
1220
+ await Promise.all(
1221
+ restTargets.map(target => this.copySandboxFile(firstTarget, target)),
1222
+ );
1223
+ continue;
1224
+ }
1225
+
1226
+ const fromContent = await resourceManager.getRawFd(currentFrom);
1227
+ try {
1228
+ const firstTarget = targets[0];
1229
+ const restTargets = targets.slice(1);
1230
+ await this.ensureParentDirectories(targets);
1231
+ if (fileIo.accessSync(firstTarget)) {
1232
+ await fileIo.unlink(firstTarget);
1233
+ }
1234
+ saveFileToSandbox(fromContent, firstTarget);
1235
+ await Promise.all(
1236
+ restTargets.map(target => this.copySandboxFile(firstTarget, target)),
1237
+ );
1238
+ } finally {
1239
+ try {
1240
+ await resourceManager.closeRawFd(currentFrom);
1241
+ } catch (closeError) {
1242
+ logger.error(
1243
+ TAG,
1244
+ `Failed to close raw fd for ${currentFrom}: ${getErrorMessage(closeError)}`,
1245
+ );
1246
+ }
1247
+ }
1248
+ }
1249
+ } catch (error) {
1250
+ const coded = toUpdateError(error, ERROR_PATCH_FAILED);
1251
+ const message = `Copy from resource failed: ${currentFrom}, ${getErrorMessage(error)}`;
1252
+ logger.error(TAG, message);
1253
+ throw createUpdateError(coded.code, message);
1254
+ }
1255
+ }
1256
+
1257
+ /** 去重后并行创建所有目标文件的父目录。 */
1258
+ private async ensureParentDirectories(targets: string[]): Promise<void> {
1259
+ const parentDirs = new Set<string>();
1260
+ for (const target of targets) {
1261
+ const parent = target.substring(0, target.lastIndexOf('/'));
1262
+ if (parent) {
1263
+ parentDirs.add(parent);
1264
+ }
1265
+ }
1266
+ await Promise.all(
1267
+ Array.from(parentDirs).map(dir => this.ensureDirectory(dir)),
1268
+ );
1269
+ }
1270
+
1271
+ // pdiff 拷贝源内容校验(__diff.json copiesCrc):不符即抛错,整次 patch
1272
+ // 失败后 JS 策略链自动回退 full,绝不把漂移的资源装进版本目录。
1273
+ private verifyCopySourceCrc(
1274
+ content: Uint8Array,
1275
+ expectedCrc: number | undefined,
1276
+ from: string,
1277
+ ): void {
1278
+ if (expectedCrc === undefined) {
1279
+ return;
1280
+ }
1281
+ const actualCrc = NativePatchCore.crc32(content);
1282
+ if (actualCrc !== expectedCrc) {
1283
+ throw createUpdateError(
1284
+ ERROR_PATCH_FAILED,
1285
+ `resource content mismatch (crc32): ${from}`,
1286
+ );
1287
+ }
1288
+ }
1289
+
1290
+ private async doCleanUp(params: DownloadTaskParams): Promise<void> {
1291
+ try {
1292
+ await NativePatchCore.cleanupOldEntries(
1293
+ params.unzipDirectory,
1294
+ [params.hash, params.originHash].filter(name => !!name),
1295
+ 3,
1296
+ );
1297
+ } catch (error) {
1298
+ const message = `Cleanup failed: ${getErrorMessage(error)}`;
1299
+ logger.error(TAG, message);
1300
+ throw createUpdateError(ERROR_FILE_OPERATION_FAILED, message);
1301
+ }
1302
+ }
1303
+
1304
+ public async execute(params: DownloadTaskParams): Promise<void> {
1305
+ const isPatchTask =
1306
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FULL ||
1307
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FROM_APP ||
1308
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK;
1309
+ try {
1310
+ switch (params.type) {
1311
+ case DownloadTaskParams.TASK_TYPE_PATCH_FULL:
1312
+ await this.doFullPatch(params);
1313
+ break;
1314
+ case DownloadTaskParams.TASK_TYPE_PATCH_FROM_APP:
1315
+ await this.doPatchFromApp(params);
1316
+ break;
1317
+ case DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK:
1318
+ await this.doPatchFromPpk(params);
1319
+ break;
1320
+ case DownloadTaskParams.TASK_TYPE_CLEANUP:
1321
+ await this.doCleanUp(params);
1322
+ break;
1323
+ case DownloadTaskParams.TASK_TYPE_PLAIN_DOWNLOAD:
1324
+ await this.downloadFile(params);
1325
+ // 文件在完成时即是最终产物——残留的 sidecar 会让下次同 URL 的
1326
+ // 下载不发请求直接返回这份旧字节。
1327
+ await this.deleteResumeSidecar(params.targetFile);
1328
+ break;
1329
+ default:
1330
+ throw createUpdateError(
1331
+ ERROR_INVALID_OPTIONS,
1332
+ `Unknown task type: ${params.type}`,
1333
+ );
1334
+ }
1335
+ if (isPatchTask) {
1336
+ await this.promoteStaging(params);
1337
+ }
1338
+ } catch (rawError) {
1339
+ // 稳定错误码:下载阶段的失败是 DOWNLOAD_FAILED;归档收齐之后的失败
1340
+ // (解压/hpatch/资源拷贝含 copiesCrc 校验/完成记录)一律 PATCH_FAILED,
1341
+ // JS 层 patch-health 遥测据此区分网络失败与补丁失败。已带码的错误
1342
+ // (磁盘空间、参数)原样保留。
1343
+ const error = toUpdateError(
1344
+ rawError,
1345
+ this.downloadPhaseCompleted ? ERROR_PATCH_FAILED : ERROR_DOWNLOAD_FAILED,
1346
+ );
1347
+ logger.error(TAG, `Task execution failed: ${error.message}`);
1348
+ if (params.type !== DownloadTaskParams.TASK_TYPE_CLEANUP) {
1349
+ try {
1350
+ if (params.type === DownloadTaskParams.TASK_TYPE_PLAIN_DOWNLOAD) {
1351
+ await fileIo.unlink(params.targetFile);
1352
+ await this.deleteResumeSidecar(params.targetFile);
1353
+ } else {
1354
+ // Only the staging directory is ours to drop: the final version
1355
+ // directory is never touched by a failed install, so a failed
1356
+ // duplicate task cannot remove an earlier task's install.
1357
+ await this.removeDirectory(this.stagingDirectory(params));
1358
+ if (this.downloadPhaseCompleted) {
1359
+ // 收齐后才失败的是解压/patch 失败:归档有毒,续传只会撞上
1360
+ // 同一个失败。下载阶段的失败则保留 partial + sidecar——那
1361
+ // 就是续传状态。
1362
+ await this.deleteArchiveAndSidecar(params.targetFile);
1363
+ }
1364
+ }
1365
+ } catch (cleanupError) {
1366
+ logger.error(
1367
+ TAG,
1368
+ `Cleanup after error failed: ${getErrorMessage(cleanupError)}`,
1369
+ );
1370
+ }
1371
+ }
1372
+ throw error;
1373
+ }
1374
+ }
1375
+ }