hane 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/README.md +32 -32
  2. package/binding.gyp +77 -50
  3. package/deps/win-nodeapi/node_api.def +158 -0
  4. package/deps/win-nodeapi/node_api.lib +0 -0
  5. package/dist/index.js +1 -1
  6. package/package.json +34 -33
  7. package/src/native/addon.cc +247 -207
  8. package/src/native/zsign_driver.cc +87 -87
  9. package/src/native/zsign_driver.h +38 -38
  10. package/vendor/zlib/.cmake-format.yaml +245 -245
  11. package/vendor/zlib/.github/workflows/c-std.yml +230 -230
  12. package/vendor/zlib/.github/workflows/cmake.yml +112 -112
  13. package/vendor/zlib/.github/workflows/configure.yml +136 -136
  14. package/vendor/zlib/.github/workflows/fuzz.yml +25 -25
  15. package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -77
  16. package/vendor/zlib/BUILD.bazel +134 -134
  17. package/vendor/zlib/CMakeLists.txt +330 -330
  18. package/vendor/zlib/ChangeLog +1621 -1621
  19. package/vendor/zlib/FAQ +367 -367
  20. package/vendor/zlib/INDEX +68 -68
  21. package/vendor/zlib/LICENSE +22 -22
  22. package/vendor/zlib/MODULE.bazel +9 -9
  23. package/vendor/zlib/Makefile.in +419 -419
  24. package/vendor/zlib/README +115 -115
  25. package/vendor/zlib/README-cmake.md +83 -83
  26. package/vendor/zlib/adler32.c +164 -164
  27. package/vendor/zlib/amiga/Makefile.pup +69 -69
  28. package/vendor/zlib/amiga/Makefile.sas +68 -68
  29. package/vendor/zlib/compress.c +75 -75
  30. package/vendor/zlib/configure +966 -966
  31. package/vendor/zlib/contrib/README.contrib +57 -57
  32. package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -106
  33. package/vendor/zlib/contrib/ada/mtest.adb +156 -156
  34. package/vendor/zlib/contrib/ada/read.adb +156 -156
  35. package/vendor/zlib/contrib/ada/readme.txt +65 -65
  36. package/vendor/zlib/contrib/ada/test.adb +463 -463
  37. package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -225
  38. package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -114
  39. package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -142
  40. package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -450
  41. package/vendor/zlib/contrib/ada/zlib.adb +701 -701
  42. package/vendor/zlib/contrib/ada/zlib.ads +328 -328
  43. package/vendor/zlib/contrib/ada/zlib.gpr +20 -20
  44. package/vendor/zlib/contrib/blast/Makefile +8 -8
  45. package/vendor/zlib/contrib/blast/README +4 -4
  46. package/vendor/zlib/contrib/blast/blast.c +466 -466
  47. package/vendor/zlib/contrib/blast/blast.h +83 -83
  48. package/vendor/zlib/contrib/delphi/ZLib.pas +557 -557
  49. package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -11
  50. package/vendor/zlib/contrib/delphi/readme.txt +76 -76
  51. package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -99
  52. package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -574
  53. package/vendor/zlib/contrib/infback9/README +1 -1
  54. package/vendor/zlib/contrib/infback9/infback9.c +603 -603
  55. package/vendor/zlib/contrib/infback9/infback9.h +37 -37
  56. package/vendor/zlib/contrib/infback9/inffix9.h +107 -107
  57. package/vendor/zlib/contrib/infback9/inflate9.h +47 -47
  58. package/vendor/zlib/contrib/infback9/inftree9.c +319 -319
  59. package/vendor/zlib/contrib/infback9/inftree9.h +61 -61
  60. package/vendor/zlib/contrib/iostream/test.cpp +24 -24
  61. package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -329
  62. package/vendor/zlib/contrib/iostream/zfstream.h +128 -128
  63. package/vendor/zlib/contrib/iostream2/zstream.h +307 -307
  64. package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -25
  65. package/vendor/zlib/contrib/iostream3/README +35 -35
  66. package/vendor/zlib/contrib/iostream3/TODO +17 -17
  67. package/vendor/zlib/contrib/iostream3/test.cc +50 -50
  68. package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -479
  69. package/vendor/zlib/contrib/iostream3/zfstream.h +466 -466
  70. package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -380
  71. package/vendor/zlib/contrib/minizip/Makefile +37 -37
  72. package/vendor/zlib/contrib/minizip/Makefile.am +45 -45
  73. package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -6
  74. package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -74
  75. package/vendor/zlib/contrib/minizip/configure.ac +32 -32
  76. package/vendor/zlib/contrib/minizip/crypt.h +128 -128
  77. package/vendor/zlib/contrib/minizip/ints.h +57 -57
  78. package/vendor/zlib/contrib/minizip/ioapi.c +231 -231
  79. package/vendor/zlib/contrib/minizip/ioapi.h +183 -183
  80. package/vendor/zlib/contrib/minizip/iowin32.c +448 -448
  81. package/vendor/zlib/contrib/minizip/iowin32.h +28 -28
  82. package/vendor/zlib/contrib/minizip/make_vms.com +25 -25
  83. package/vendor/zlib/contrib/minizip/miniunz.c +647 -647
  84. package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -63
  85. package/vendor/zlib/contrib/minizip/minizip.1 +46 -46
  86. package/vendor/zlib/contrib/minizip/minizip.c +512 -512
  87. package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -12
  88. package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -13
  89. package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -35
  90. package/vendor/zlib/contrib/minizip/mztools.c +288 -288
  91. package/vendor/zlib/contrib/minizip/mztools.h +37 -37
  92. package/vendor/zlib/contrib/minizip/skipset.h +361 -361
  93. package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -121
  94. package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -29
  95. package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -28
  96. package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -25
  97. package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -32
  98. package/vendor/zlib/contrib/minizip/unzip.c +1981 -1981
  99. package/vendor/zlib/contrib/minizip/unzip.h +441 -441
  100. package/vendor/zlib/contrib/minizip/zip.c +2199 -2199
  101. package/vendor/zlib/contrib/minizip/zip.h +370 -370
  102. package/vendor/zlib/contrib/nuget/nuget.csproj +43 -43
  103. package/vendor/zlib/contrib/nuget/nuget.sln +22 -22
  104. package/vendor/zlib/contrib/pascal/example.pas +599 -599
  105. package/vendor/zlib/contrib/pascal/readme.txt +76 -76
  106. package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -99
  107. package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -276
  108. package/vendor/zlib/contrib/puff/Makefile +42 -42
  109. package/vendor/zlib/contrib/puff/README +63 -63
  110. package/vendor/zlib/contrib/puff/puff.c +840 -840
  111. package/vendor/zlib/contrib/puff/puff.h +35 -35
  112. package/vendor/zlib/contrib/puff/pufftest.c +169 -169
  113. package/vendor/zlib/contrib/untgz/Makefile +14 -14
  114. package/vendor/zlib/contrib/untgz/Makefile.msc +17 -17
  115. package/vendor/zlib/contrib/untgz/untgz.c +667 -667
  116. package/vendor/zlib/contrib/vstudio/readme.txt +81 -81
  117. package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +315 -315
  118. package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +312 -312
  119. package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +421 -421
  120. package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +315 -315
  121. package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -32
  122. package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +458 -458
  123. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -119
  124. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +667 -667
  125. package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +315 -315
  126. package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +312 -312
  127. package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +421 -421
  128. package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +315 -315
  129. package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -32
  130. package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +458 -458
  131. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -119
  132. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +667 -667
  133. package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +408 -408
  134. package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +404 -404
  135. package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +472 -472
  136. package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +408 -408
  137. package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -32
  138. package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +601 -601
  139. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -179
  140. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +874 -874
  141. package/vendor/zlib/crc32.c +1049 -1049
  142. package/vendor/zlib/crc32.h +9446 -9446
  143. package/vendor/zlib/deflate.c +2152 -2152
  144. package/vendor/zlib/deflate.h +380 -380
  145. package/vendor/zlib/doc/algorithm.txt +209 -209
  146. package/vendor/zlib/doc/rfc1950.txt +619 -619
  147. package/vendor/zlib/doc/rfc1951.txt +955 -955
  148. package/vendor/zlib/doc/rfc1952.txt +675 -675
  149. package/vendor/zlib/doc/txtvsbin.txt +107 -107
  150. package/vendor/zlib/examples/README.examples +54 -54
  151. package/vendor/zlib/examples/enough.c +597 -597
  152. package/vendor/zlib/examples/fitblk.c +233 -233
  153. package/vendor/zlib/examples/gun.c +702 -702
  154. package/vendor/zlib/examples/gzappend.c +504 -504
  155. package/vendor/zlib/examples/gzjoin.c +449 -449
  156. package/vendor/zlib/examples/gzlog.c +1061 -1061
  157. package/vendor/zlib/examples/gzlog.h +91 -91
  158. package/vendor/zlib/examples/gznorm.c +474 -474
  159. package/vendor/zlib/examples/zlib_how.html +549 -549
  160. package/vendor/zlib/examples/zpipe.c +209 -209
  161. package/vendor/zlib/examples/zran.c +550 -550
  162. package/vendor/zlib/examples/zran.h +53 -53
  163. package/vendor/zlib/gzclose.c +23 -23
  164. package/vendor/zlib/gzguts.h +215 -215
  165. package/vendor/zlib/gzlib.c +585 -585
  166. package/vendor/zlib/gzread.c +603 -603
  167. package/vendor/zlib/gzwrite.c +631 -631
  168. package/vendor/zlib/infback.c +628 -628
  169. package/vendor/zlib/inffast.c +320 -320
  170. package/vendor/zlib/inffast.h +11 -11
  171. package/vendor/zlib/inffixed.h +94 -94
  172. package/vendor/zlib/inflate.c +1526 -1526
  173. package/vendor/zlib/inflate.h +126 -126
  174. package/vendor/zlib/inftrees.c +299 -299
  175. package/vendor/zlib/inftrees.h +62 -62
  176. package/vendor/zlib/make_vms.com +867 -867
  177. package/vendor/zlib/msdos/Makefile.bor +115 -115
  178. package/vendor/zlib/msdos/Makefile.dj2 +104 -104
  179. package/vendor/zlib/msdos/Makefile.emx +69 -69
  180. package/vendor/zlib/msdos/Makefile.msc +112 -112
  181. package/vendor/zlib/msdos/Makefile.tc +100 -100
  182. package/vendor/zlib/nintendods/Makefile +126 -126
  183. package/vendor/zlib/nintendods/README +5 -5
  184. package/vendor/zlib/old/Makefile.emx +69 -69
  185. package/vendor/zlib/old/Makefile.riscos +151 -151
  186. package/vendor/zlib/old/README +3 -3
  187. package/vendor/zlib/old/descrip.mms +48 -48
  188. package/vendor/zlib/old/os2/Makefile.os2 +136 -136
  189. package/vendor/zlib/old/os2/zlib.def +51 -51
  190. package/vendor/zlib/old/visual-basic.txt +160 -160
  191. package/vendor/zlib/os400/README400 +48 -48
  192. package/vendor/zlib/os400/bndsrc +133 -133
  193. package/vendor/zlib/os400/make.sh +366 -366
  194. package/vendor/zlib/os400/zlib.inc +531 -531
  195. package/vendor/zlib/qnx/package.qpg +141 -141
  196. package/vendor/zlib/test/CMakeLists.txt +265 -265
  197. package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -29
  198. package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -28
  199. package/vendor/zlib/test/example.c +552 -552
  200. package/vendor/zlib/test/find_package_test.cmake.in +26 -26
  201. package/vendor/zlib/test/infcover.c +672 -672
  202. package/vendor/zlib/test/minigzip.c +590 -590
  203. package/vendor/zlib/treebuild.xml +116 -116
  204. package/vendor/zlib/trees.c +1119 -1119
  205. package/vendor/zlib/trees.h +128 -128
  206. package/vendor/zlib/uncompr.c +85 -85
  207. package/vendor/zlib/watcom/watcom_f.mak +43 -43
  208. package/vendor/zlib/watcom/watcom_l.mak +43 -43
  209. package/vendor/zlib/win32/DLL_FAQ.txt +381 -381
  210. package/vendor/zlib/win32/Makefile.bor +109 -109
  211. package/vendor/zlib/win32/Makefile.gcc +177 -177
  212. package/vendor/zlib/win32/Makefile.msc +159 -159
  213. package/vendor/zlib/win32/README-WIN32.txt +103 -103
  214. package/vendor/zlib/win32/VisualC.txt +3 -3
  215. package/vendor/zlib/win32/zlib1.rc +37 -37
  216. package/vendor/zlib/zconf.h.in +544 -544
  217. package/vendor/zlib/zlib.3 +149 -149
  218. package/vendor/zlib/zlib.h +1957 -1957
  219. package/vendor/zlib/zlib.map +103 -103
  220. package/vendor/zlib/zlib.pc.cmakein +13 -13
  221. package/vendor/zlib/zlib.pc.in +13 -13
  222. package/vendor/zlib/zlibConfig.cmake.in +26 -26
  223. package/vendor/zlib/zutil.c +299 -299
  224. package/vendor/zlib/zutil.h +257 -257
  225. package/vendor/zsign/.gitattributes +3 -3
  226. package/vendor/zsign/LICENSE +20 -20
  227. package/vendor/zsign/README.md +142 -142
  228. package/vendor/zsign/build/linux/Makefile +43 -43
  229. package/vendor/zsign/build/macos/Makefile +43 -43
  230. package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -128
  231. package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -216
  232. package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -28
  233. package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -37
  234. package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -437
  235. package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -364
  236. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -22
  237. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -26
  238. package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -111
  239. package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -153
  240. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -10
  241. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -142
  242. package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -104
  243. package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -29
  244. package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -72
  245. package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -78
  246. package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -590
  247. package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -47
  248. package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -62
  249. package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -25
  250. package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -117
  251. package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -71
  252. package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -52
  253. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -56
  254. package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -131
  255. package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -125
  256. package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -38
  257. package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -46
  258. package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -52
  259. package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -44
  260. package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -236
  261. package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -1022
  262. package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -41
  263. package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -50
  264. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -56
  265. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -1466
  266. package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -45
  267. package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -133
  268. package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -28
  269. package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -211
  270. package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -339
  271. package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -59
  272. package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -280
  273. package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -44
  274. package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -57
  275. package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -310
  276. package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -38
  277. package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -39
  278. package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -1588
  279. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -10
  280. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -10
  281. package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -104
  282. package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -124
  283. package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -28
  284. package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -833
  285. package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -63
  286. package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -32
  287. package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -2231
  288. package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -140
  289. package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -50
  290. package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -62
  291. package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -169
  292. package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -118
  293. package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -56
  294. package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -82
  295. package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -31
  296. package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -138
  297. package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -16
  298. package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -338
  299. package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -56
  300. package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -63
  301. package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -62
  302. package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -55
  303. package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -219
  304. package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -5820
  305. package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -184
  306. package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -28
  307. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -53
  308. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -17
  309. package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -16
  310. package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -63
  311. package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -160
  312. package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -543
  313. package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -19
  314. package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -58
  315. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -46
  316. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -63
  317. package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -38
  318. package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -162
  319. package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -66
  320. package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -70
  321. package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -125
  322. package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -69
  323. package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -68
  324. package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -47
  325. package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -79
  326. package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -59
  327. package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -615
  328. package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -107
  329. package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -113
  330. package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -98
  331. package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -139
  332. package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -68
  333. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -30
  334. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -357
  335. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -379
  336. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -467
  337. package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -90
  338. package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -377
  339. package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -49
  340. package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -39
  341. package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -31
  342. package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -1220
  343. package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -320
  344. package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -522
  345. package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -67
  346. package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -63
  347. package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -245
  348. package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -38
  349. package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -62
  350. package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -70
  351. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -96
  352. package/vendor/zsign/src/archo.cpp +742 -742
  353. package/vendor/zsign/src/archo.h +61 -61
  354. package/vendor/zsign/src/bundle.cpp +589 -589
  355. package/vendor/zsign/src/bundle.h +46 -46
  356. package/vendor/zsign/src/common/archive.cpp +246 -246
  357. package/vendor/zsign/src/common/archive.h +22 -22
  358. package/vendor/zsign/src/common/common.h +56 -56
  359. package/vendor/zsign/src/common/fs.cpp +573 -573
  360. package/vendor/zsign/src/common/fs.h +50 -50
  361. package/vendor/zsign/src/common/log.cpp +145 -145
  362. package/vendor/zsign/src/common/log.h +37 -37
  363. package/vendor/zsign/src/common/mach-o.h +585 -585
  364. package/vendor/zsign/src/common/sha.cpp +133 -133
  365. package/vendor/zsign/src/common/sha.h +24 -24
  366. package/vendor/zsign/src/common/timer.cpp +28 -28
  367. package/vendor/zsign/src/common/timer.h +17 -17
  368. package/vendor/zsign/src/common/util.cpp +185 -185
  369. package/vendor/zsign/src/common/util.h +25 -25
  370. package/vendor/zsign/src/macho.cpp +273 -273
  371. package/vendor/zsign/src/macho.h +38 -38
  372. package/vendor/zsign/src/openssl.cpp +698 -698
  373. package/vendor/zsign/src/openssl.h +71 -71
  374. package/vendor/zsign/src/signing.cpp +745 -745
  375. package/vendor/zsign/src/signing.h +59 -59
  376. package/vendor/zsign/src/zsign.cpp +317 -317
  377. package/vendor/zsign/test/dylib/demo/Makefile +12 -12
  378. package/vendor/zsign/test/dylib/demo/control +9 -9
  379. package/vendor/zsign/test/dylib/demo/demo.m +21 -21
  380. package/vendor/zsign/test/linux/test.sh +19 -19
  381. package/vendor/zsign/test/macos/test.sh +19 -19
@@ -1,702 +1,702 @@
1
- /* gun.c -- simple gunzip to give an example of the use of inflateBack()
2
- * Copyright (C) 2003, 2005, 2008, 2010, 2012 Mark Adler
3
- * For conditions of distribution and use, see copyright notice in zlib.h
4
- Version 1.7 12 August 2012 Mark Adler */
5
-
6
- /* Version history:
7
- 1.0 16 Feb 2003 First version for testing of inflateBack()
8
- 1.1 21 Feb 2005 Decompress concatenated gzip streams
9
- Remove use of "this" variable (C++ keyword)
10
- Fix return value for in()
11
- Improve allocation failure checking
12
- Add typecasting for void * structures
13
- Add -h option for command version and usage
14
- Add a bunch of comments
15
- 1.2 20 Mar 2005 Add Unix compress (LZW) decompression
16
- Copy file attributes from input file to output file
17
- 1.3 12 Jun 2005 Add casts for error messages [Oberhumer]
18
- 1.4 8 Dec 2006 LZW decompression speed improvements
19
- 1.5 9 Feb 2008 Avoid warning in latest version of gcc
20
- 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings
21
- 1.7 12 Aug 2012 Update for z_const usage in zlib 1.2.8
22
- */
23
-
24
- /*
25
- gun [ -t ] [ name ... ]
26
-
27
- decompresses the data in the named gzip files. If no arguments are given,
28
- gun will decompress from stdin to stdout. The names must end in .gz, -gz,
29
- .z, -z, _z, or .Z. The uncompressed data will be written to a file name
30
- with the suffix stripped. On success, the original file is deleted. On
31
- failure, the output file is deleted. For most failures, the command will
32
- continue to process the remaining names on the command line. A memory
33
- allocation failure will abort the command. If -t is specified, then the
34
- listed files or stdin will be tested as gzip files for integrity (without
35
- checking for a proper suffix), no output will be written, and no files
36
- will be deleted.
37
-
38
- Like gzip, gun allows concatenated gzip streams and will decompress them,
39
- writing all of the uncompressed data to the output. Unlike gzip, gun allows
40
- an empty file on input, and will produce no error writing an empty output
41
- file.
42
-
43
- gun will also decompress files made by Unix compress, which uses LZW
44
- compression. These files are automatically detected by virtue of their
45
- magic header bytes. Since the end of Unix compress stream is marked by the
46
- end-of-file, they cannot be concatenated. If a Unix compress stream is
47
- encountered in an input file, it is the last stream in that file.
48
-
49
- Like gunzip and uncompress, the file attributes of the original compressed
50
- file are maintained in the final uncompressed file, to the extent that the
51
- user permissions allow it.
52
-
53
- On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version
54
- 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the
55
- LZW decompression provided by gun is about twice as fast as the standard
56
- Unix uncompress command.
57
- */
58
-
59
- /* external functions and related types and constants */
60
- #include <stdio.h> /* fprintf() */
61
- #include <stdlib.h> /* malloc(), free() */
62
- #include <string.h> /* strerror(), strcmp(), strlen(), memcpy() */
63
- #include <errno.h> /* errno */
64
- #include <fcntl.h> /* open() */
65
- #include <unistd.h> /* read(), write(), close(), chown(), unlink() */
66
- #include <sys/types.h>
67
- #include <sys/stat.h> /* stat(), chmod() */
68
- #include <utime.h> /* utime() */
69
- #include "zlib.h" /* inflateBackInit(), inflateBack(), */
70
- /* inflateBackEnd(), crc32() */
71
-
72
- /* function declaration */
73
- #define local static
74
-
75
- /* buffer constants */
76
- #define SIZE 32768U /* input and output buffer sizes */
77
- #define PIECE 16384 /* limits i/o chunks for 16-bit int case */
78
-
79
- /* structure for infback() to pass to input function in() -- it maintains the
80
- input file and a buffer of size SIZE */
81
- struct ind {
82
- int infile;
83
- unsigned char *inbuf;
84
- };
85
-
86
- /* Load input buffer, assumed to be empty, and return bytes loaded and a
87
- pointer to them. read() is called until the buffer is full, or until it
88
- returns end-of-file or error. Return 0 on error. */
89
- local unsigned in(void *in_desc, z_const unsigned char **buf)
90
- {
91
- int ret;
92
- unsigned len;
93
- unsigned char *next;
94
- struct ind *me = (struct ind *)in_desc;
95
-
96
- next = me->inbuf;
97
- *buf = next;
98
- len = 0;
99
- do {
100
- ret = PIECE;
101
- if ((unsigned)ret > SIZE - len)
102
- ret = (int)(SIZE - len);
103
- ret = (int)read(me->infile, next, ret);
104
- if (ret == -1) {
105
- len = 0;
106
- break;
107
- }
108
- next += ret;
109
- len += ret;
110
- } while (ret != 0 && len < SIZE);
111
- return len;
112
- }
113
-
114
- /* structure for infback() to pass to output function out() -- it maintains the
115
- output file, a running CRC-32 check on the output and the total number of
116
- bytes output, both for checking against the gzip trailer. (The length in
117
- the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and
118
- the output is greater than 4 GB.) */
119
- struct outd {
120
- int outfile;
121
- int check; /* true if checking crc and total */
122
- unsigned long crc;
123
- unsigned long total;
124
- };
125
-
126
- /* Write output buffer and update the CRC-32 and total bytes written. write()
127
- is called until all of the output is written or an error is encountered.
128
- On success out() returns 0. For a write failure, out() returns 1. If the
129
- output file descriptor is -1, then nothing is written.
130
- */
131
- local int out(void *out_desc, unsigned char *buf, unsigned len)
132
- {
133
- int ret;
134
- struct outd *me = (struct outd *)out_desc;
135
-
136
- if (me->check) {
137
- me->crc = crc32(me->crc, buf, len);
138
- me->total += len;
139
- }
140
- if (me->outfile != -1)
141
- do {
142
- ret = PIECE;
143
- if ((unsigned)ret > len)
144
- ret = (int)len;
145
- ret = (int)write(me->outfile, buf, ret);
146
- if (ret == -1)
147
- return 1;
148
- buf += ret;
149
- len -= ret;
150
- } while (len != 0);
151
- return 0;
152
- }
153
-
154
- /* next input byte macro for use inside lunpipe() and gunpipe() */
155
- #define NEXT() (have ? 0 : (have = in(indp, &next)), \
156
- last = have ? (have--, (int)(*next++)) : -1)
157
-
158
- /* memory for gunpipe() and lunpipe() --
159
- the first 256 entries of prefix[] and suffix[] are never used, could
160
- have offset the index, but it's faster to waste the memory */
161
- unsigned char inbuf[SIZE]; /* input buffer */
162
- unsigned char outbuf[SIZE]; /* output buffer */
163
- unsigned short prefix[65536]; /* index to LZW prefix string */
164
- unsigned char suffix[65536]; /* one-character LZW suffix */
165
- unsigned char match[65280 + 2]; /* buffer for reversed match or gzip
166
- 32K sliding window */
167
-
168
- /* throw out what's left in the current bits byte buffer (this is a vestigial
169
- aspect of the compressed data format derived from an implementation that
170
- made use of a special VAX machine instruction!) */
171
- #define FLUSHCODE() \
172
- do { \
173
- left = 0; \
174
- rem = 0; \
175
- if (chunk > have) { \
176
- chunk -= have; \
177
- have = 0; \
178
- if (NEXT() == -1) \
179
- break; \
180
- chunk--; \
181
- if (chunk > have) { \
182
- chunk = have = 0; \
183
- break; \
184
- } \
185
- } \
186
- have -= chunk; \
187
- next += chunk; \
188
- chunk = 0; \
189
- } while (0)
190
-
191
- /* Decompress a compress (LZW) file from indp to outfile. The compress magic
192
- header (two bytes) has already been read and verified. There are have bytes
193
- of buffered input at next. strm is used for passing error information back
194
- to gunpipe().
195
-
196
- lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of
197
- file, read error, or write error (a write error indicated by strm->next_in
198
- not equal to Z_NULL), or Z_DATA_ERROR for invalid input.
199
- */
200
- local int lunpipe(unsigned have, z_const unsigned char *next, struct ind *indp,
201
- int outfile, z_stream *strm)
202
- {
203
- int last; /* last byte read by NEXT(), or -1 if EOF */
204
- unsigned chunk; /* bytes left in current chunk */
205
- int left; /* bits left in rem */
206
- unsigned rem; /* unused bits from input */
207
- int bits; /* current bits per code */
208
- unsigned code; /* code, table traversal index */
209
- unsigned mask; /* mask for current bits codes */
210
- int max; /* maximum bits per code for this stream */
211
- unsigned flags; /* compress flags, then block compress flag */
212
- unsigned end; /* last valid entry in prefix/suffix tables */
213
- unsigned temp; /* current code */
214
- unsigned prev; /* previous code */
215
- unsigned final; /* last character written for previous code */
216
- unsigned stack; /* next position for reversed string */
217
- unsigned outcnt; /* bytes in output buffer */
218
- struct outd outd; /* output structure */
219
- unsigned char *p;
220
-
221
- /* set up output */
222
- outd.outfile = outfile;
223
- outd.check = 0;
224
-
225
- /* process remainder of compress header -- a flags byte */
226
- flags = NEXT();
227
- if (last == -1)
228
- return Z_BUF_ERROR;
229
- if (flags & 0x60) {
230
- strm->msg = (z_const char *)"unknown lzw flags set";
231
- return Z_DATA_ERROR;
232
- }
233
- max = flags & 0x1f;
234
- if (max < 9 || max > 16) {
235
- strm->msg = (z_const char *)"lzw bits out of range";
236
- return Z_DATA_ERROR;
237
- }
238
- if (max == 9) /* 9 doesn't really mean 9 */
239
- max = 10;
240
- flags &= 0x80; /* true if block compress */
241
-
242
- /* clear table */
243
- bits = 9;
244
- mask = 0x1ff;
245
- end = flags ? 256 : 255;
246
-
247
- /* set up: get first 9-bit code, which is the first decompressed byte, but
248
- don't create a table entry until the next code */
249
- if (NEXT() == -1) /* no compressed data is ok */
250
- return Z_OK;
251
- final = prev = (unsigned)last; /* low 8 bits of code */
252
- if (NEXT() == -1) /* missing a bit */
253
- return Z_BUF_ERROR;
254
- if (last & 1) { /* code must be < 256 */
255
- strm->msg = (z_const char *)"invalid lzw code";
256
- return Z_DATA_ERROR;
257
- }
258
- rem = (unsigned)last >> 1; /* remaining 7 bits */
259
- left = 7;
260
- chunk = bits - 2; /* 7 bytes left in this chunk */
261
- outbuf[0] = (unsigned char)final; /* write first decompressed byte */
262
- outcnt = 1;
263
-
264
- /* decode codes */
265
- stack = 0;
266
- for (;;) {
267
- /* if the table will be full after this, increment the code size */
268
- if (end >= mask && bits < max) {
269
- FLUSHCODE();
270
- bits++;
271
- mask <<= 1;
272
- mask++;
273
- }
274
-
275
- /* get a code of length bits */
276
- if (chunk == 0) /* decrement chunk modulo bits */
277
- chunk = bits;
278
- code = rem; /* low bits of code */
279
- if (NEXT() == -1) { /* EOF is end of compressed data */
280
- /* write remaining buffered output */
281
- if (outcnt && out(&outd, outbuf, outcnt)) {
282
- strm->next_in = outbuf; /* signal write error */
283
- return Z_BUF_ERROR;
284
- }
285
- return Z_OK;
286
- }
287
- code += (unsigned)last << left; /* middle (or high) bits of code */
288
- left += 8;
289
- chunk--;
290
- if (bits > left) { /* need more bits */
291
- if (NEXT() == -1) /* can't end in middle of code */
292
- return Z_BUF_ERROR;
293
- code += (unsigned)last << left; /* high bits of code */
294
- left += 8;
295
- chunk--;
296
- }
297
- code &= mask; /* mask to current code length */
298
- left -= bits; /* number of unused bits */
299
- rem = (unsigned)last >> (8 - left); /* unused bits from last byte */
300
-
301
- /* process clear code (256) */
302
- if (code == 256 && flags) {
303
- FLUSHCODE();
304
- bits = 9; /* initialize bits and mask */
305
- mask = 0x1ff;
306
- end = 255; /* empty table */
307
- continue; /* get next code */
308
- }
309
-
310
- /* special code to reuse last match */
311
- temp = code; /* save the current code */
312
- if (code > end) {
313
- /* Be picky on the allowed code here, and make sure that the code
314
- we drop through (prev) will be a valid index so that random
315
- input does not cause an exception. The code != end + 1 check is
316
- empirically derived, and not checked in the original uncompress
317
- code. If this ever causes a problem, that check could be safely
318
- removed. Leaving this check in greatly improves gun's ability
319
- to detect random or corrupted input after a compress header.
320
- In any case, the prev > end check must be retained. */
321
- if (code != end + 1 || prev > end) {
322
- strm->msg = (z_const char *)"invalid lzw code";
323
- return Z_DATA_ERROR;
324
- }
325
- match[stack++] = (unsigned char)final;
326
- code = prev;
327
- }
328
-
329
- /* walk through linked list to generate output in reverse order */
330
- p = match + stack;
331
- while (code >= 256) {
332
- *p++ = suffix[code];
333
- code = prefix[code];
334
- }
335
- stack = p - match;
336
- match[stack++] = (unsigned char)code;
337
- final = code;
338
-
339
- /* link new table entry */
340
- if (end < mask) {
341
- end++;
342
- prefix[end] = (unsigned short)prev;
343
- suffix[end] = (unsigned char)final;
344
- }
345
-
346
- /* set previous code for next iteration */
347
- prev = temp;
348
-
349
- /* write output in forward order */
350
- while (stack > SIZE - outcnt) {
351
- while (outcnt < SIZE)
352
- outbuf[outcnt++] = match[--stack];
353
- if (out(&outd, outbuf, outcnt)) {
354
- strm->next_in = outbuf; /* signal write error */
355
- return Z_BUF_ERROR;
356
- }
357
- outcnt = 0;
358
- }
359
- p = match + stack;
360
- do {
361
- outbuf[outcnt++] = *--p;
362
- } while (p > match);
363
- stack = 0;
364
-
365
- /* loop for next code with final and prev as the last match, rem and
366
- left provide the first 0..7 bits of the next code, end is the last
367
- valid table entry */
368
- }
369
- }
370
-
371
- /* Decompress a gzip file from infile to outfile. strm is assumed to have been
372
- successfully initialized with inflateBackInit(). The input file may consist
373
- of a series of gzip streams, in which case all of them will be decompressed
374
- to the output file. If outfile is -1, then the gzip stream(s) integrity is
375
- checked and nothing is written.
376
-
377
- The return value is a zlib error code: Z_MEM_ERROR if out of memory,
378
- Z_DATA_ERROR if the header or the compressed data is invalid, or if the
379
- trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends
380
- prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip
381
- stream) follows a valid gzip stream.
382
- */
383
- local int gunpipe(z_stream *strm, int infile, int outfile)
384
- {
385
- int ret, first, last;
386
- unsigned have, flags, len;
387
- z_const unsigned char *next = NULL;
388
- struct ind ind, *indp;
389
- struct outd outd;
390
-
391
- /* setup input buffer */
392
- ind.infile = infile;
393
- ind.inbuf = inbuf;
394
- indp = &ind;
395
-
396
- /* decompress concatenated gzip streams */
397
- have = 0; /* no input data read in yet */
398
- first = 1; /* looking for first gzip header */
399
- strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
400
- for (;;) {
401
- /* look for the two magic header bytes for a gzip stream */
402
- if (NEXT() == -1) {
403
- ret = Z_OK;
404
- break; /* empty gzip stream is ok */
405
- }
406
- if (last != 31 || (NEXT() != 139 && last != 157)) {
407
- strm->msg = (z_const char *)"incorrect header check";
408
- ret = first ? Z_DATA_ERROR : Z_ERRNO;
409
- break; /* not a gzip or compress header */
410
- }
411
- first = 0; /* next non-header is junk */
412
-
413
- /* process a compress (LZW) file -- can't be concatenated after this */
414
- if (last == 157) {
415
- ret = lunpipe(have, next, indp, outfile, strm);
416
- break;
417
- }
418
-
419
- /* process remainder of gzip header */
420
- ret = Z_BUF_ERROR;
421
- if (NEXT() != 8) { /* only deflate method allowed */
422
- if (last == -1) break;
423
- strm->msg = (z_const char *)"unknown compression method";
424
- ret = Z_DATA_ERROR;
425
- break;
426
- }
427
- flags = NEXT(); /* header flags */
428
- NEXT(); /* discard mod time, xflgs, os */
429
- NEXT();
430
- NEXT();
431
- NEXT();
432
- NEXT();
433
- NEXT();
434
- if (last == -1) break;
435
- if (flags & 0xe0) {
436
- strm->msg = (z_const char *)"unknown header flags set";
437
- ret = Z_DATA_ERROR;
438
- break;
439
- }
440
- if (flags & 4) { /* extra field */
441
- len = NEXT();
442
- len += (unsigned)(NEXT()) << 8;
443
- if (last == -1) break;
444
- while (len > have) {
445
- len -= have;
446
- have = 0;
447
- if (NEXT() == -1) break;
448
- len--;
449
- }
450
- if (last == -1) break;
451
- have -= len;
452
- next += len;
453
- }
454
- if (flags & 8) /* file name */
455
- while (NEXT() != 0 && last != -1)
456
- ;
457
- if (flags & 16) /* comment */
458
- while (NEXT() != 0 && last != -1)
459
- ;
460
- if (flags & 2) { /* header crc */
461
- NEXT();
462
- NEXT();
463
- }
464
- if (last == -1) break;
465
-
466
- /* set up output */
467
- outd.outfile = outfile;
468
- outd.check = 1;
469
- outd.crc = crc32(0L, Z_NULL, 0);
470
- outd.total = 0;
471
-
472
- /* decompress data to output */
473
- strm->next_in = next;
474
- strm->avail_in = have;
475
- ret = inflateBack(strm, in, indp, out, &outd);
476
- if (ret != Z_STREAM_END) break;
477
- next = strm->next_in;
478
- have = strm->avail_in;
479
- strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
480
-
481
- /* check trailer */
482
- ret = Z_BUF_ERROR;
483
- if (NEXT() != (int)(outd.crc & 0xff) ||
484
- NEXT() != (int)((outd.crc >> 8) & 0xff) ||
485
- NEXT() != (int)((outd.crc >> 16) & 0xff) ||
486
- NEXT() != (int)((outd.crc >> 24) & 0xff)) {
487
- /* crc error */
488
- if (last != -1) {
489
- strm->msg = (z_const char *)"incorrect data check";
490
- ret = Z_DATA_ERROR;
491
- }
492
- break;
493
- }
494
- if (NEXT() != (int)(outd.total & 0xff) ||
495
- NEXT() != (int)((outd.total >> 8) & 0xff) ||
496
- NEXT() != (int)((outd.total >> 16) & 0xff) ||
497
- NEXT() != (int)((outd.total >> 24) & 0xff)) {
498
- /* length error */
499
- if (last != -1) {
500
- strm->msg = (z_const char *)"incorrect length check";
501
- ret = Z_DATA_ERROR;
502
- }
503
- break;
504
- }
505
-
506
- /* go back and look for another gzip stream */
507
- }
508
-
509
- /* clean up and return */
510
- return ret;
511
- }
512
-
513
- /* Copy file attributes, from -> to, as best we can. This is best effort, so
514
- no errors are reported. The mode bits, including suid, sgid, and the sticky
515
- bit are copied (if allowed), the owner's user id and group id are copied
516
- (again if allowed), and the access and modify times are copied. */
517
- local void copymeta(char *from, char *to)
518
- {
519
- struct stat was;
520
- struct utimbuf when;
521
-
522
- /* get all of from's Unix meta data, return if not a regular file */
523
- if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG)
524
- return;
525
-
526
- /* set to's mode bits, ignore errors */
527
- (void)chmod(to, was.st_mode & 07777);
528
-
529
- /* copy owner's user and group, ignore errors */
530
- (void)chown(to, was.st_uid, was.st_gid);
531
-
532
- /* copy access and modify times, ignore errors */
533
- when.actime = was.st_atime;
534
- when.modtime = was.st_mtime;
535
- (void)utime(to, &when);
536
- }
537
-
538
- /* Decompress the file inname to the file outnname, of if test is true, just
539
- decompress without writing and check the gzip trailer for integrity. If
540
- inname is NULL or an empty string, read from stdin. If outname is NULL or
541
- an empty string, write to stdout. strm is a pre-initialized inflateBack
542
- structure. When appropriate, copy the file attributes from inname to
543
- outname.
544
-
545
- gunzip() returns 1 if there is an out-of-memory error or an unexpected
546
- return code from gunpipe(). Otherwise it returns 0.
547
- */
548
- local int gunzip(z_stream *strm, char *inname, char *outname, int test)
549
- {
550
- int ret;
551
- int infile, outfile;
552
-
553
- /* open files */
554
- if (inname == NULL || *inname == 0) {
555
- inname = "-";
556
- infile = 0; /* stdin */
557
- }
558
- else {
559
- infile = open(inname, O_RDONLY, 0);
560
- if (infile == -1) {
561
- fprintf(stderr, "gun cannot open %s\n", inname);
562
- return 0;
563
- }
564
- }
565
- if (test)
566
- outfile = -1;
567
- else if (outname == NULL || *outname == 0) {
568
- outname = "-";
569
- outfile = 1; /* stdout */
570
- }
571
- else {
572
- outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666);
573
- if (outfile == -1) {
574
- close(infile);
575
- fprintf(stderr, "gun cannot create %s\n", outname);
576
- return 0;
577
- }
578
- }
579
- errno = 0;
580
-
581
- /* decompress */
582
- ret = gunpipe(strm, infile, outfile);
583
- if (outfile > 2) close(outfile);
584
- if (infile > 2) close(infile);
585
-
586
- /* interpret result */
587
- switch (ret) {
588
- case Z_OK:
589
- case Z_ERRNO:
590
- if (infile > 2 && outfile > 2) {
591
- copymeta(inname, outname); /* copy attributes */
592
- unlink(inname);
593
- }
594
- if (ret == Z_ERRNO)
595
- fprintf(stderr, "gun warning: trailing garbage ignored in %s\n",
596
- inname);
597
- break;
598
- case Z_DATA_ERROR:
599
- if (outfile > 2) unlink(outname);
600
- fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg);
601
- break;
602
- case Z_MEM_ERROR:
603
- if (outfile > 2) unlink(outname);
604
- fprintf(stderr, "gun out of memory error--aborting\n");
605
- return 1;
606
- case Z_BUF_ERROR:
607
- if (outfile > 2) unlink(outname);
608
- if (strm->next_in != Z_NULL) {
609
- fprintf(stderr, "gun write error on %s: %s\n",
610
- outname, strerror(errno));
611
- }
612
- else if (errno) {
613
- fprintf(stderr, "gun read error on %s: %s\n",
614
- inname, strerror(errno));
615
- }
616
- else {
617
- fprintf(stderr, "gun unexpected end of file on %s\n",
618
- inname);
619
- }
620
- break;
621
- default:
622
- if (outfile > 2) unlink(outname);
623
- fprintf(stderr, "gun internal error--aborting\n");
624
- return 1;
625
- }
626
- return 0;
627
- }
628
-
629
- /* Process the gun command line arguments. See the command syntax near the
630
- beginning of this source file. */
631
- int main(int argc, char **argv)
632
- {
633
- int ret, len, test;
634
- char *outname;
635
- unsigned char *window;
636
- z_stream strm;
637
-
638
- /* initialize inflateBack state for repeated use */
639
- window = match; /* reuse LZW match buffer */
640
- strm.zalloc = Z_NULL;
641
- strm.zfree = Z_NULL;
642
- strm.opaque = Z_NULL;
643
- ret = inflateBackInit(&strm, 15, window);
644
- if (ret != Z_OK) {
645
- fprintf(stderr, "gun out of memory error--aborting\n");
646
- return 1;
647
- }
648
-
649
- /* decompress each file to the same name with the suffix removed */
650
- argc--;
651
- argv++;
652
- test = 0;
653
- if (argc && strcmp(*argv, "-h") == 0) {
654
- fprintf(stderr, "gun 1.6 (17 Jan 2010)\n");
655
- fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n");
656
- fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n");
657
- return 0;
658
- }
659
- if (argc && strcmp(*argv, "-t") == 0) {
660
- test = 1;
661
- argc--;
662
- argv++;
663
- }
664
- if (argc)
665
- do {
666
- if (test)
667
- outname = NULL;
668
- else {
669
- len = (int)strlen(*argv);
670
- if (strcmp(*argv + len - 3, ".gz") == 0 ||
671
- strcmp(*argv + len - 3, "-gz") == 0)
672
- len -= 3;
673
- else if (strcmp(*argv + len - 2, ".z") == 0 ||
674
- strcmp(*argv + len - 2, "-z") == 0 ||
675
- strcmp(*argv + len - 2, "_z") == 0 ||
676
- strcmp(*argv + len - 2, ".Z") == 0)
677
- len -= 2;
678
- else {
679
- fprintf(stderr, "gun error: no gz type on %s--skipping\n",
680
- *argv);
681
- continue;
682
- }
683
- outname = malloc(len + 1);
684
- if (outname == NULL) {
685
- fprintf(stderr, "gun out of memory error--aborting\n");
686
- ret = 1;
687
- break;
688
- }
689
- memcpy(outname, *argv, len);
690
- outname[len] = 0;
691
- }
692
- ret = gunzip(&strm, *argv, outname, test);
693
- if (outname != NULL) free(outname);
694
- if (ret) break;
695
- } while (argv++, --argc);
696
- else
697
- ret = gunzip(&strm, NULL, NULL, test);
698
-
699
- /* clean up */
700
- inflateBackEnd(&strm);
701
- return ret;
702
- }
1
+ /* gun.c -- simple gunzip to give an example of the use of inflateBack()
2
+ * Copyright (C) 2003, 2005, 2008, 2010, 2012 Mark Adler
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ Version 1.7 12 August 2012 Mark Adler */
5
+
6
+ /* Version history:
7
+ 1.0 16 Feb 2003 First version for testing of inflateBack()
8
+ 1.1 21 Feb 2005 Decompress concatenated gzip streams
9
+ Remove use of "this" variable (C++ keyword)
10
+ Fix return value for in()
11
+ Improve allocation failure checking
12
+ Add typecasting for void * structures
13
+ Add -h option for command version and usage
14
+ Add a bunch of comments
15
+ 1.2 20 Mar 2005 Add Unix compress (LZW) decompression
16
+ Copy file attributes from input file to output file
17
+ 1.3 12 Jun 2005 Add casts for error messages [Oberhumer]
18
+ 1.4 8 Dec 2006 LZW decompression speed improvements
19
+ 1.5 9 Feb 2008 Avoid warning in latest version of gcc
20
+ 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings
21
+ 1.7 12 Aug 2012 Update for z_const usage in zlib 1.2.8
22
+ */
23
+
24
+ /*
25
+ gun [ -t ] [ name ... ]
26
+
27
+ decompresses the data in the named gzip files. If no arguments are given,
28
+ gun will decompress from stdin to stdout. The names must end in .gz, -gz,
29
+ .z, -z, _z, or .Z. The uncompressed data will be written to a file name
30
+ with the suffix stripped. On success, the original file is deleted. On
31
+ failure, the output file is deleted. For most failures, the command will
32
+ continue to process the remaining names on the command line. A memory
33
+ allocation failure will abort the command. If -t is specified, then the
34
+ listed files or stdin will be tested as gzip files for integrity (without
35
+ checking for a proper suffix), no output will be written, and no files
36
+ will be deleted.
37
+
38
+ Like gzip, gun allows concatenated gzip streams and will decompress them,
39
+ writing all of the uncompressed data to the output. Unlike gzip, gun allows
40
+ an empty file on input, and will produce no error writing an empty output
41
+ file.
42
+
43
+ gun will also decompress files made by Unix compress, which uses LZW
44
+ compression. These files are automatically detected by virtue of their
45
+ magic header bytes. Since the end of Unix compress stream is marked by the
46
+ end-of-file, they cannot be concatenated. If a Unix compress stream is
47
+ encountered in an input file, it is the last stream in that file.
48
+
49
+ Like gunzip and uncompress, the file attributes of the original compressed
50
+ file are maintained in the final uncompressed file, to the extent that the
51
+ user permissions allow it.
52
+
53
+ On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version
54
+ 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the
55
+ LZW decompression provided by gun is about twice as fast as the standard
56
+ Unix uncompress command.
57
+ */
58
+
59
+ /* external functions and related types and constants */
60
+ #include <stdio.h> /* fprintf() */
61
+ #include <stdlib.h> /* malloc(), free() */
62
+ #include <string.h> /* strerror(), strcmp(), strlen(), memcpy() */
63
+ #include <errno.h> /* errno */
64
+ #include <fcntl.h> /* open() */
65
+ #include <unistd.h> /* read(), write(), close(), chown(), unlink() */
66
+ #include <sys/types.h>
67
+ #include <sys/stat.h> /* stat(), chmod() */
68
+ #include <utime.h> /* utime() */
69
+ #include "zlib.h" /* inflateBackInit(), inflateBack(), */
70
+ /* inflateBackEnd(), crc32() */
71
+
72
+ /* function declaration */
73
+ #define local static
74
+
75
+ /* buffer constants */
76
+ #define SIZE 32768U /* input and output buffer sizes */
77
+ #define PIECE 16384 /* limits i/o chunks for 16-bit int case */
78
+
79
+ /* structure for infback() to pass to input function in() -- it maintains the
80
+ input file and a buffer of size SIZE */
81
+ struct ind {
82
+ int infile;
83
+ unsigned char *inbuf;
84
+ };
85
+
86
+ /* Load input buffer, assumed to be empty, and return bytes loaded and a
87
+ pointer to them. read() is called until the buffer is full, or until it
88
+ returns end-of-file or error. Return 0 on error. */
89
+ local unsigned in(void *in_desc, z_const unsigned char **buf)
90
+ {
91
+ int ret;
92
+ unsigned len;
93
+ unsigned char *next;
94
+ struct ind *me = (struct ind *)in_desc;
95
+
96
+ next = me->inbuf;
97
+ *buf = next;
98
+ len = 0;
99
+ do {
100
+ ret = PIECE;
101
+ if ((unsigned)ret > SIZE - len)
102
+ ret = (int)(SIZE - len);
103
+ ret = (int)read(me->infile, next, ret);
104
+ if (ret == -1) {
105
+ len = 0;
106
+ break;
107
+ }
108
+ next += ret;
109
+ len += ret;
110
+ } while (ret != 0 && len < SIZE);
111
+ return len;
112
+ }
113
+
114
+ /* structure for infback() to pass to output function out() -- it maintains the
115
+ output file, a running CRC-32 check on the output and the total number of
116
+ bytes output, both for checking against the gzip trailer. (The length in
117
+ the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and
118
+ the output is greater than 4 GB.) */
119
+ struct outd {
120
+ int outfile;
121
+ int check; /* true if checking crc and total */
122
+ unsigned long crc;
123
+ unsigned long total;
124
+ };
125
+
126
+ /* Write output buffer and update the CRC-32 and total bytes written. write()
127
+ is called until all of the output is written or an error is encountered.
128
+ On success out() returns 0. For a write failure, out() returns 1. If the
129
+ output file descriptor is -1, then nothing is written.
130
+ */
131
+ local int out(void *out_desc, unsigned char *buf, unsigned len)
132
+ {
133
+ int ret;
134
+ struct outd *me = (struct outd *)out_desc;
135
+
136
+ if (me->check) {
137
+ me->crc = crc32(me->crc, buf, len);
138
+ me->total += len;
139
+ }
140
+ if (me->outfile != -1)
141
+ do {
142
+ ret = PIECE;
143
+ if ((unsigned)ret > len)
144
+ ret = (int)len;
145
+ ret = (int)write(me->outfile, buf, ret);
146
+ if (ret == -1)
147
+ return 1;
148
+ buf += ret;
149
+ len -= ret;
150
+ } while (len != 0);
151
+ return 0;
152
+ }
153
+
154
+ /* next input byte macro for use inside lunpipe() and gunpipe() */
155
+ #define NEXT() (have ? 0 : (have = in(indp, &next)), \
156
+ last = have ? (have--, (int)(*next++)) : -1)
157
+
158
+ /* memory for gunpipe() and lunpipe() --
159
+ the first 256 entries of prefix[] and suffix[] are never used, could
160
+ have offset the index, but it's faster to waste the memory */
161
+ unsigned char inbuf[SIZE]; /* input buffer */
162
+ unsigned char outbuf[SIZE]; /* output buffer */
163
+ unsigned short prefix[65536]; /* index to LZW prefix string */
164
+ unsigned char suffix[65536]; /* one-character LZW suffix */
165
+ unsigned char match[65280 + 2]; /* buffer for reversed match or gzip
166
+ 32K sliding window */
167
+
168
+ /* throw out what's left in the current bits byte buffer (this is a vestigial
169
+ aspect of the compressed data format derived from an implementation that
170
+ made use of a special VAX machine instruction!) */
171
+ #define FLUSHCODE() \
172
+ do { \
173
+ left = 0; \
174
+ rem = 0; \
175
+ if (chunk > have) { \
176
+ chunk -= have; \
177
+ have = 0; \
178
+ if (NEXT() == -1) \
179
+ break; \
180
+ chunk--; \
181
+ if (chunk > have) { \
182
+ chunk = have = 0; \
183
+ break; \
184
+ } \
185
+ } \
186
+ have -= chunk; \
187
+ next += chunk; \
188
+ chunk = 0; \
189
+ } while (0)
190
+
191
+ /* Decompress a compress (LZW) file from indp to outfile. The compress magic
192
+ header (two bytes) has already been read and verified. There are have bytes
193
+ of buffered input at next. strm is used for passing error information back
194
+ to gunpipe().
195
+
196
+ lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of
197
+ file, read error, or write error (a write error indicated by strm->next_in
198
+ not equal to Z_NULL), or Z_DATA_ERROR for invalid input.
199
+ */
200
+ local int lunpipe(unsigned have, z_const unsigned char *next, struct ind *indp,
201
+ int outfile, z_stream *strm)
202
+ {
203
+ int last; /* last byte read by NEXT(), or -1 if EOF */
204
+ unsigned chunk; /* bytes left in current chunk */
205
+ int left; /* bits left in rem */
206
+ unsigned rem; /* unused bits from input */
207
+ int bits; /* current bits per code */
208
+ unsigned code; /* code, table traversal index */
209
+ unsigned mask; /* mask for current bits codes */
210
+ int max; /* maximum bits per code for this stream */
211
+ unsigned flags; /* compress flags, then block compress flag */
212
+ unsigned end; /* last valid entry in prefix/suffix tables */
213
+ unsigned temp; /* current code */
214
+ unsigned prev; /* previous code */
215
+ unsigned final; /* last character written for previous code */
216
+ unsigned stack; /* next position for reversed string */
217
+ unsigned outcnt; /* bytes in output buffer */
218
+ struct outd outd; /* output structure */
219
+ unsigned char *p;
220
+
221
+ /* set up output */
222
+ outd.outfile = outfile;
223
+ outd.check = 0;
224
+
225
+ /* process remainder of compress header -- a flags byte */
226
+ flags = NEXT();
227
+ if (last == -1)
228
+ return Z_BUF_ERROR;
229
+ if (flags & 0x60) {
230
+ strm->msg = (z_const char *)"unknown lzw flags set";
231
+ return Z_DATA_ERROR;
232
+ }
233
+ max = flags & 0x1f;
234
+ if (max < 9 || max > 16) {
235
+ strm->msg = (z_const char *)"lzw bits out of range";
236
+ return Z_DATA_ERROR;
237
+ }
238
+ if (max == 9) /* 9 doesn't really mean 9 */
239
+ max = 10;
240
+ flags &= 0x80; /* true if block compress */
241
+
242
+ /* clear table */
243
+ bits = 9;
244
+ mask = 0x1ff;
245
+ end = flags ? 256 : 255;
246
+
247
+ /* set up: get first 9-bit code, which is the first decompressed byte, but
248
+ don't create a table entry until the next code */
249
+ if (NEXT() == -1) /* no compressed data is ok */
250
+ return Z_OK;
251
+ final = prev = (unsigned)last; /* low 8 bits of code */
252
+ if (NEXT() == -1) /* missing a bit */
253
+ return Z_BUF_ERROR;
254
+ if (last & 1) { /* code must be < 256 */
255
+ strm->msg = (z_const char *)"invalid lzw code";
256
+ return Z_DATA_ERROR;
257
+ }
258
+ rem = (unsigned)last >> 1; /* remaining 7 bits */
259
+ left = 7;
260
+ chunk = bits - 2; /* 7 bytes left in this chunk */
261
+ outbuf[0] = (unsigned char)final; /* write first decompressed byte */
262
+ outcnt = 1;
263
+
264
+ /* decode codes */
265
+ stack = 0;
266
+ for (;;) {
267
+ /* if the table will be full after this, increment the code size */
268
+ if (end >= mask && bits < max) {
269
+ FLUSHCODE();
270
+ bits++;
271
+ mask <<= 1;
272
+ mask++;
273
+ }
274
+
275
+ /* get a code of length bits */
276
+ if (chunk == 0) /* decrement chunk modulo bits */
277
+ chunk = bits;
278
+ code = rem; /* low bits of code */
279
+ if (NEXT() == -1) { /* EOF is end of compressed data */
280
+ /* write remaining buffered output */
281
+ if (outcnt && out(&outd, outbuf, outcnt)) {
282
+ strm->next_in = outbuf; /* signal write error */
283
+ return Z_BUF_ERROR;
284
+ }
285
+ return Z_OK;
286
+ }
287
+ code += (unsigned)last << left; /* middle (or high) bits of code */
288
+ left += 8;
289
+ chunk--;
290
+ if (bits > left) { /* need more bits */
291
+ if (NEXT() == -1) /* can't end in middle of code */
292
+ return Z_BUF_ERROR;
293
+ code += (unsigned)last << left; /* high bits of code */
294
+ left += 8;
295
+ chunk--;
296
+ }
297
+ code &= mask; /* mask to current code length */
298
+ left -= bits; /* number of unused bits */
299
+ rem = (unsigned)last >> (8 - left); /* unused bits from last byte */
300
+
301
+ /* process clear code (256) */
302
+ if (code == 256 && flags) {
303
+ FLUSHCODE();
304
+ bits = 9; /* initialize bits and mask */
305
+ mask = 0x1ff;
306
+ end = 255; /* empty table */
307
+ continue; /* get next code */
308
+ }
309
+
310
+ /* special code to reuse last match */
311
+ temp = code; /* save the current code */
312
+ if (code > end) {
313
+ /* Be picky on the allowed code here, and make sure that the code
314
+ we drop through (prev) will be a valid index so that random
315
+ input does not cause an exception. The code != end + 1 check is
316
+ empirically derived, and not checked in the original uncompress
317
+ code. If this ever causes a problem, that check could be safely
318
+ removed. Leaving this check in greatly improves gun's ability
319
+ to detect random or corrupted input after a compress header.
320
+ In any case, the prev > end check must be retained. */
321
+ if (code != end + 1 || prev > end) {
322
+ strm->msg = (z_const char *)"invalid lzw code";
323
+ return Z_DATA_ERROR;
324
+ }
325
+ match[stack++] = (unsigned char)final;
326
+ code = prev;
327
+ }
328
+
329
+ /* walk through linked list to generate output in reverse order */
330
+ p = match + stack;
331
+ while (code >= 256) {
332
+ *p++ = suffix[code];
333
+ code = prefix[code];
334
+ }
335
+ stack = p - match;
336
+ match[stack++] = (unsigned char)code;
337
+ final = code;
338
+
339
+ /* link new table entry */
340
+ if (end < mask) {
341
+ end++;
342
+ prefix[end] = (unsigned short)prev;
343
+ suffix[end] = (unsigned char)final;
344
+ }
345
+
346
+ /* set previous code for next iteration */
347
+ prev = temp;
348
+
349
+ /* write output in forward order */
350
+ while (stack > SIZE - outcnt) {
351
+ while (outcnt < SIZE)
352
+ outbuf[outcnt++] = match[--stack];
353
+ if (out(&outd, outbuf, outcnt)) {
354
+ strm->next_in = outbuf; /* signal write error */
355
+ return Z_BUF_ERROR;
356
+ }
357
+ outcnt = 0;
358
+ }
359
+ p = match + stack;
360
+ do {
361
+ outbuf[outcnt++] = *--p;
362
+ } while (p > match);
363
+ stack = 0;
364
+
365
+ /* loop for next code with final and prev as the last match, rem and
366
+ left provide the first 0..7 bits of the next code, end is the last
367
+ valid table entry */
368
+ }
369
+ }
370
+
371
+ /* Decompress a gzip file from infile to outfile. strm is assumed to have been
372
+ successfully initialized with inflateBackInit(). The input file may consist
373
+ of a series of gzip streams, in which case all of them will be decompressed
374
+ to the output file. If outfile is -1, then the gzip stream(s) integrity is
375
+ checked and nothing is written.
376
+
377
+ The return value is a zlib error code: Z_MEM_ERROR if out of memory,
378
+ Z_DATA_ERROR if the header or the compressed data is invalid, or if the
379
+ trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends
380
+ prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip
381
+ stream) follows a valid gzip stream.
382
+ */
383
+ local int gunpipe(z_stream *strm, int infile, int outfile)
384
+ {
385
+ int ret, first, last;
386
+ unsigned have, flags, len;
387
+ z_const unsigned char *next = NULL;
388
+ struct ind ind, *indp;
389
+ struct outd outd;
390
+
391
+ /* setup input buffer */
392
+ ind.infile = infile;
393
+ ind.inbuf = inbuf;
394
+ indp = &ind;
395
+
396
+ /* decompress concatenated gzip streams */
397
+ have = 0; /* no input data read in yet */
398
+ first = 1; /* looking for first gzip header */
399
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
400
+ for (;;) {
401
+ /* look for the two magic header bytes for a gzip stream */
402
+ if (NEXT() == -1) {
403
+ ret = Z_OK;
404
+ break; /* empty gzip stream is ok */
405
+ }
406
+ if (last != 31 || (NEXT() != 139 && last != 157)) {
407
+ strm->msg = (z_const char *)"incorrect header check";
408
+ ret = first ? Z_DATA_ERROR : Z_ERRNO;
409
+ break; /* not a gzip or compress header */
410
+ }
411
+ first = 0; /* next non-header is junk */
412
+
413
+ /* process a compress (LZW) file -- can't be concatenated after this */
414
+ if (last == 157) {
415
+ ret = lunpipe(have, next, indp, outfile, strm);
416
+ break;
417
+ }
418
+
419
+ /* process remainder of gzip header */
420
+ ret = Z_BUF_ERROR;
421
+ if (NEXT() != 8) { /* only deflate method allowed */
422
+ if (last == -1) break;
423
+ strm->msg = (z_const char *)"unknown compression method";
424
+ ret = Z_DATA_ERROR;
425
+ break;
426
+ }
427
+ flags = NEXT(); /* header flags */
428
+ NEXT(); /* discard mod time, xflgs, os */
429
+ NEXT();
430
+ NEXT();
431
+ NEXT();
432
+ NEXT();
433
+ NEXT();
434
+ if (last == -1) break;
435
+ if (flags & 0xe0) {
436
+ strm->msg = (z_const char *)"unknown header flags set";
437
+ ret = Z_DATA_ERROR;
438
+ break;
439
+ }
440
+ if (flags & 4) { /* extra field */
441
+ len = NEXT();
442
+ len += (unsigned)(NEXT()) << 8;
443
+ if (last == -1) break;
444
+ while (len > have) {
445
+ len -= have;
446
+ have = 0;
447
+ if (NEXT() == -1) break;
448
+ len--;
449
+ }
450
+ if (last == -1) break;
451
+ have -= len;
452
+ next += len;
453
+ }
454
+ if (flags & 8) /* file name */
455
+ while (NEXT() != 0 && last != -1)
456
+ ;
457
+ if (flags & 16) /* comment */
458
+ while (NEXT() != 0 && last != -1)
459
+ ;
460
+ if (flags & 2) { /* header crc */
461
+ NEXT();
462
+ NEXT();
463
+ }
464
+ if (last == -1) break;
465
+
466
+ /* set up output */
467
+ outd.outfile = outfile;
468
+ outd.check = 1;
469
+ outd.crc = crc32(0L, Z_NULL, 0);
470
+ outd.total = 0;
471
+
472
+ /* decompress data to output */
473
+ strm->next_in = next;
474
+ strm->avail_in = have;
475
+ ret = inflateBack(strm, in, indp, out, &outd);
476
+ if (ret != Z_STREAM_END) break;
477
+ next = strm->next_in;
478
+ have = strm->avail_in;
479
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
480
+
481
+ /* check trailer */
482
+ ret = Z_BUF_ERROR;
483
+ if (NEXT() != (int)(outd.crc & 0xff) ||
484
+ NEXT() != (int)((outd.crc >> 8) & 0xff) ||
485
+ NEXT() != (int)((outd.crc >> 16) & 0xff) ||
486
+ NEXT() != (int)((outd.crc >> 24) & 0xff)) {
487
+ /* crc error */
488
+ if (last != -1) {
489
+ strm->msg = (z_const char *)"incorrect data check";
490
+ ret = Z_DATA_ERROR;
491
+ }
492
+ break;
493
+ }
494
+ if (NEXT() != (int)(outd.total & 0xff) ||
495
+ NEXT() != (int)((outd.total >> 8) & 0xff) ||
496
+ NEXT() != (int)((outd.total >> 16) & 0xff) ||
497
+ NEXT() != (int)((outd.total >> 24) & 0xff)) {
498
+ /* length error */
499
+ if (last != -1) {
500
+ strm->msg = (z_const char *)"incorrect length check";
501
+ ret = Z_DATA_ERROR;
502
+ }
503
+ break;
504
+ }
505
+
506
+ /* go back and look for another gzip stream */
507
+ }
508
+
509
+ /* clean up and return */
510
+ return ret;
511
+ }
512
+
513
+ /* Copy file attributes, from -> to, as best we can. This is best effort, so
514
+ no errors are reported. The mode bits, including suid, sgid, and the sticky
515
+ bit are copied (if allowed), the owner's user id and group id are copied
516
+ (again if allowed), and the access and modify times are copied. */
517
+ local void copymeta(char *from, char *to)
518
+ {
519
+ struct stat was;
520
+ struct utimbuf when;
521
+
522
+ /* get all of from's Unix meta data, return if not a regular file */
523
+ if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG)
524
+ return;
525
+
526
+ /* set to's mode bits, ignore errors */
527
+ (void)chmod(to, was.st_mode & 07777);
528
+
529
+ /* copy owner's user and group, ignore errors */
530
+ (void)chown(to, was.st_uid, was.st_gid);
531
+
532
+ /* copy access and modify times, ignore errors */
533
+ when.actime = was.st_atime;
534
+ when.modtime = was.st_mtime;
535
+ (void)utime(to, &when);
536
+ }
537
+
538
+ /* Decompress the file inname to the file outnname, of if test is true, just
539
+ decompress without writing and check the gzip trailer for integrity. If
540
+ inname is NULL or an empty string, read from stdin. If outname is NULL or
541
+ an empty string, write to stdout. strm is a pre-initialized inflateBack
542
+ structure. When appropriate, copy the file attributes from inname to
543
+ outname.
544
+
545
+ gunzip() returns 1 if there is an out-of-memory error or an unexpected
546
+ return code from gunpipe(). Otherwise it returns 0.
547
+ */
548
+ local int gunzip(z_stream *strm, char *inname, char *outname, int test)
549
+ {
550
+ int ret;
551
+ int infile, outfile;
552
+
553
+ /* open files */
554
+ if (inname == NULL || *inname == 0) {
555
+ inname = "-";
556
+ infile = 0; /* stdin */
557
+ }
558
+ else {
559
+ infile = open(inname, O_RDONLY, 0);
560
+ if (infile == -1) {
561
+ fprintf(stderr, "gun cannot open %s\n", inname);
562
+ return 0;
563
+ }
564
+ }
565
+ if (test)
566
+ outfile = -1;
567
+ else if (outname == NULL || *outname == 0) {
568
+ outname = "-";
569
+ outfile = 1; /* stdout */
570
+ }
571
+ else {
572
+ outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666);
573
+ if (outfile == -1) {
574
+ close(infile);
575
+ fprintf(stderr, "gun cannot create %s\n", outname);
576
+ return 0;
577
+ }
578
+ }
579
+ errno = 0;
580
+
581
+ /* decompress */
582
+ ret = gunpipe(strm, infile, outfile);
583
+ if (outfile > 2) close(outfile);
584
+ if (infile > 2) close(infile);
585
+
586
+ /* interpret result */
587
+ switch (ret) {
588
+ case Z_OK:
589
+ case Z_ERRNO:
590
+ if (infile > 2 && outfile > 2) {
591
+ copymeta(inname, outname); /* copy attributes */
592
+ unlink(inname);
593
+ }
594
+ if (ret == Z_ERRNO)
595
+ fprintf(stderr, "gun warning: trailing garbage ignored in %s\n",
596
+ inname);
597
+ break;
598
+ case Z_DATA_ERROR:
599
+ if (outfile > 2) unlink(outname);
600
+ fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg);
601
+ break;
602
+ case Z_MEM_ERROR:
603
+ if (outfile > 2) unlink(outname);
604
+ fprintf(stderr, "gun out of memory error--aborting\n");
605
+ return 1;
606
+ case Z_BUF_ERROR:
607
+ if (outfile > 2) unlink(outname);
608
+ if (strm->next_in != Z_NULL) {
609
+ fprintf(stderr, "gun write error on %s: %s\n",
610
+ outname, strerror(errno));
611
+ }
612
+ else if (errno) {
613
+ fprintf(stderr, "gun read error on %s: %s\n",
614
+ inname, strerror(errno));
615
+ }
616
+ else {
617
+ fprintf(stderr, "gun unexpected end of file on %s\n",
618
+ inname);
619
+ }
620
+ break;
621
+ default:
622
+ if (outfile > 2) unlink(outname);
623
+ fprintf(stderr, "gun internal error--aborting\n");
624
+ return 1;
625
+ }
626
+ return 0;
627
+ }
628
+
629
+ /* Process the gun command line arguments. See the command syntax near the
630
+ beginning of this source file. */
631
+ int main(int argc, char **argv)
632
+ {
633
+ int ret, len, test;
634
+ char *outname;
635
+ unsigned char *window;
636
+ z_stream strm;
637
+
638
+ /* initialize inflateBack state for repeated use */
639
+ window = match; /* reuse LZW match buffer */
640
+ strm.zalloc = Z_NULL;
641
+ strm.zfree = Z_NULL;
642
+ strm.opaque = Z_NULL;
643
+ ret = inflateBackInit(&strm, 15, window);
644
+ if (ret != Z_OK) {
645
+ fprintf(stderr, "gun out of memory error--aborting\n");
646
+ return 1;
647
+ }
648
+
649
+ /* decompress each file to the same name with the suffix removed */
650
+ argc--;
651
+ argv++;
652
+ test = 0;
653
+ if (argc && strcmp(*argv, "-h") == 0) {
654
+ fprintf(stderr, "gun 1.6 (17 Jan 2010)\n");
655
+ fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n");
656
+ fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n");
657
+ return 0;
658
+ }
659
+ if (argc && strcmp(*argv, "-t") == 0) {
660
+ test = 1;
661
+ argc--;
662
+ argv++;
663
+ }
664
+ if (argc)
665
+ do {
666
+ if (test)
667
+ outname = NULL;
668
+ else {
669
+ len = (int)strlen(*argv);
670
+ if (strcmp(*argv + len - 3, ".gz") == 0 ||
671
+ strcmp(*argv + len - 3, "-gz") == 0)
672
+ len -= 3;
673
+ else if (strcmp(*argv + len - 2, ".z") == 0 ||
674
+ strcmp(*argv + len - 2, "-z") == 0 ||
675
+ strcmp(*argv + len - 2, "_z") == 0 ||
676
+ strcmp(*argv + len - 2, ".Z") == 0)
677
+ len -= 2;
678
+ else {
679
+ fprintf(stderr, "gun error: no gz type on %s--skipping\n",
680
+ *argv);
681
+ continue;
682
+ }
683
+ outname = malloc(len + 1);
684
+ if (outname == NULL) {
685
+ fprintf(stderr, "gun out of memory error--aborting\n");
686
+ ret = 1;
687
+ break;
688
+ }
689
+ memcpy(outname, *argv, len);
690
+ outname[len] = 0;
691
+ }
692
+ ret = gunzip(&strm, *argv, outname, test);
693
+ if (outname != NULL) free(outname);
694
+ if (ret) break;
695
+ } while (argv++, --argc);
696
+ else
697
+ ret = gunzip(&strm, NULL, NULL, test);
698
+
699
+ /* clean up */
700
+ inflateBackEnd(&strm);
701
+ return ret;
702
+ }