hane 1.1.1 → 1.2.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 (379) hide show
  1. package/README.md +32 -32
  2. package/binding.gyp +50 -50
  3. package/deps/win-nodeapi/node_api.def +158 -158
  4. package/package.json +34 -34
  5. package/src/native/addon.cc +183 -183
  6. package/src/native/zsign_driver.cc +86 -86
  7. package/src/native/zsign_driver.h +38 -38
  8. package/vendor/zlib/.cmake-format.yaml +245 -245
  9. package/vendor/zlib/.github/workflows/c-std.yml +230 -230
  10. package/vendor/zlib/.github/workflows/cmake.yml +112 -112
  11. package/vendor/zlib/.github/workflows/configure.yml +136 -136
  12. package/vendor/zlib/.github/workflows/fuzz.yml +25 -25
  13. package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -77
  14. package/vendor/zlib/BUILD.bazel +134 -134
  15. package/vendor/zlib/CMakeLists.txt +330 -330
  16. package/vendor/zlib/ChangeLog +1621 -1621
  17. package/vendor/zlib/FAQ +367 -367
  18. package/vendor/zlib/INDEX +68 -68
  19. package/vendor/zlib/LICENSE +22 -22
  20. package/vendor/zlib/MODULE.bazel +9 -9
  21. package/vendor/zlib/Makefile.in +419 -419
  22. package/vendor/zlib/README +115 -115
  23. package/vendor/zlib/README-cmake.md +83 -83
  24. package/vendor/zlib/adler32.c +164 -164
  25. package/vendor/zlib/amiga/Makefile.pup +69 -69
  26. package/vendor/zlib/amiga/Makefile.sas +68 -68
  27. package/vendor/zlib/compress.c +75 -75
  28. package/vendor/zlib/configure +966 -966
  29. package/vendor/zlib/contrib/README.contrib +57 -57
  30. package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -106
  31. package/vendor/zlib/contrib/ada/mtest.adb +156 -156
  32. package/vendor/zlib/contrib/ada/read.adb +156 -156
  33. package/vendor/zlib/contrib/ada/readme.txt +65 -65
  34. package/vendor/zlib/contrib/ada/test.adb +463 -463
  35. package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -225
  36. package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -114
  37. package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -142
  38. package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -450
  39. package/vendor/zlib/contrib/ada/zlib.adb +701 -701
  40. package/vendor/zlib/contrib/ada/zlib.ads +328 -328
  41. package/vendor/zlib/contrib/ada/zlib.gpr +20 -20
  42. package/vendor/zlib/contrib/blast/Makefile +8 -8
  43. package/vendor/zlib/contrib/blast/README +4 -4
  44. package/vendor/zlib/contrib/blast/blast.c +466 -466
  45. package/vendor/zlib/contrib/blast/blast.h +83 -83
  46. package/vendor/zlib/contrib/delphi/ZLib.pas +557 -557
  47. package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -11
  48. package/vendor/zlib/contrib/delphi/readme.txt +76 -76
  49. package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -99
  50. package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -574
  51. package/vendor/zlib/contrib/infback9/README +1 -1
  52. package/vendor/zlib/contrib/infback9/infback9.c +603 -603
  53. package/vendor/zlib/contrib/infback9/infback9.h +37 -37
  54. package/vendor/zlib/contrib/infback9/inffix9.h +107 -107
  55. package/vendor/zlib/contrib/infback9/inflate9.h +47 -47
  56. package/vendor/zlib/contrib/infback9/inftree9.c +319 -319
  57. package/vendor/zlib/contrib/infback9/inftree9.h +61 -61
  58. package/vendor/zlib/contrib/iostream/test.cpp +24 -24
  59. package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -329
  60. package/vendor/zlib/contrib/iostream/zfstream.h +128 -128
  61. package/vendor/zlib/contrib/iostream2/zstream.h +307 -307
  62. package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -25
  63. package/vendor/zlib/contrib/iostream3/README +35 -35
  64. package/vendor/zlib/contrib/iostream3/TODO +17 -17
  65. package/vendor/zlib/contrib/iostream3/test.cc +50 -50
  66. package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -479
  67. package/vendor/zlib/contrib/iostream3/zfstream.h +466 -466
  68. package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -380
  69. package/vendor/zlib/contrib/minizip/Makefile +37 -37
  70. package/vendor/zlib/contrib/minizip/Makefile.am +45 -45
  71. package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -6
  72. package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -74
  73. package/vendor/zlib/contrib/minizip/configure.ac +32 -32
  74. package/vendor/zlib/contrib/minizip/crypt.h +128 -128
  75. package/vendor/zlib/contrib/minizip/ints.h +57 -57
  76. package/vendor/zlib/contrib/minizip/ioapi.c +231 -231
  77. package/vendor/zlib/contrib/minizip/ioapi.h +183 -183
  78. package/vendor/zlib/contrib/minizip/iowin32.c +448 -448
  79. package/vendor/zlib/contrib/minizip/iowin32.h +28 -28
  80. package/vendor/zlib/contrib/minizip/make_vms.com +25 -25
  81. package/vendor/zlib/contrib/minizip/miniunz.c +647 -647
  82. package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -63
  83. package/vendor/zlib/contrib/minizip/minizip.1 +46 -46
  84. package/vendor/zlib/contrib/minizip/minizip.c +512 -512
  85. package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -12
  86. package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -13
  87. package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -35
  88. package/vendor/zlib/contrib/minizip/mztools.c +288 -288
  89. package/vendor/zlib/contrib/minizip/mztools.h +37 -37
  90. package/vendor/zlib/contrib/minizip/skipset.h +361 -361
  91. package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -121
  92. package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -29
  93. package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -28
  94. package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -25
  95. package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -32
  96. package/vendor/zlib/contrib/minizip/unzip.c +1981 -1981
  97. package/vendor/zlib/contrib/minizip/unzip.h +441 -441
  98. package/vendor/zlib/contrib/minizip/zip.c +2199 -2199
  99. package/vendor/zlib/contrib/minizip/zip.h +370 -370
  100. package/vendor/zlib/contrib/nuget/nuget.csproj +43 -43
  101. package/vendor/zlib/contrib/nuget/nuget.sln +22 -22
  102. package/vendor/zlib/contrib/pascal/example.pas +599 -599
  103. package/vendor/zlib/contrib/pascal/readme.txt +76 -76
  104. package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -99
  105. package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -276
  106. package/vendor/zlib/contrib/puff/Makefile +42 -42
  107. package/vendor/zlib/contrib/puff/README +63 -63
  108. package/vendor/zlib/contrib/puff/puff.c +840 -840
  109. package/vendor/zlib/contrib/puff/puff.h +35 -35
  110. package/vendor/zlib/contrib/puff/pufftest.c +169 -169
  111. package/vendor/zlib/contrib/untgz/Makefile +14 -14
  112. package/vendor/zlib/contrib/untgz/Makefile.msc +17 -17
  113. package/vendor/zlib/contrib/untgz/untgz.c +667 -667
  114. package/vendor/zlib/contrib/vstudio/readme.txt +81 -81
  115. package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +315 -315
  116. package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +312 -312
  117. package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +421 -421
  118. package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +315 -315
  119. package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -32
  120. package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +458 -458
  121. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -119
  122. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +667 -667
  123. package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +315 -315
  124. package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +312 -312
  125. package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +421 -421
  126. package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +315 -315
  127. package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -32
  128. package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +458 -458
  129. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -119
  130. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +667 -667
  131. package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +408 -408
  132. package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +404 -404
  133. package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +472 -472
  134. package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +408 -408
  135. package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -32
  136. package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +601 -601
  137. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -179
  138. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +874 -874
  139. package/vendor/zlib/crc32.c +1049 -1049
  140. package/vendor/zlib/crc32.h +9446 -9446
  141. package/vendor/zlib/deflate.c +2152 -2152
  142. package/vendor/zlib/deflate.h +380 -380
  143. package/vendor/zlib/doc/algorithm.txt +209 -209
  144. package/vendor/zlib/doc/rfc1950.txt +619 -619
  145. package/vendor/zlib/doc/rfc1951.txt +955 -955
  146. package/vendor/zlib/doc/rfc1952.txt +675 -675
  147. package/vendor/zlib/doc/txtvsbin.txt +107 -107
  148. package/vendor/zlib/examples/README.examples +54 -54
  149. package/vendor/zlib/examples/enough.c +597 -597
  150. package/vendor/zlib/examples/fitblk.c +233 -233
  151. package/vendor/zlib/examples/gun.c +702 -702
  152. package/vendor/zlib/examples/gzappend.c +504 -504
  153. package/vendor/zlib/examples/gzjoin.c +449 -449
  154. package/vendor/zlib/examples/gzlog.c +1061 -1061
  155. package/vendor/zlib/examples/gzlog.h +91 -91
  156. package/vendor/zlib/examples/gznorm.c +474 -474
  157. package/vendor/zlib/examples/zlib_how.html +549 -549
  158. package/vendor/zlib/examples/zpipe.c +209 -209
  159. package/vendor/zlib/examples/zran.c +550 -550
  160. package/vendor/zlib/examples/zran.h +53 -53
  161. package/vendor/zlib/gzclose.c +23 -23
  162. package/vendor/zlib/gzguts.h +215 -215
  163. package/vendor/zlib/gzlib.c +585 -585
  164. package/vendor/zlib/gzread.c +603 -603
  165. package/vendor/zlib/gzwrite.c +631 -631
  166. package/vendor/zlib/infback.c +628 -628
  167. package/vendor/zlib/inffast.c +320 -320
  168. package/vendor/zlib/inffast.h +11 -11
  169. package/vendor/zlib/inffixed.h +94 -94
  170. package/vendor/zlib/inflate.c +1526 -1526
  171. package/vendor/zlib/inflate.h +126 -126
  172. package/vendor/zlib/inftrees.c +299 -299
  173. package/vendor/zlib/inftrees.h +62 -62
  174. package/vendor/zlib/make_vms.com +867 -867
  175. package/vendor/zlib/msdos/Makefile.bor +115 -115
  176. package/vendor/zlib/msdos/Makefile.dj2 +104 -104
  177. package/vendor/zlib/msdos/Makefile.emx +69 -69
  178. package/vendor/zlib/msdos/Makefile.msc +112 -112
  179. package/vendor/zlib/msdos/Makefile.tc +100 -100
  180. package/vendor/zlib/nintendods/Makefile +126 -126
  181. package/vendor/zlib/nintendods/README +5 -5
  182. package/vendor/zlib/old/Makefile.emx +69 -69
  183. package/vendor/zlib/old/Makefile.riscos +151 -151
  184. package/vendor/zlib/old/README +3 -3
  185. package/vendor/zlib/old/descrip.mms +48 -48
  186. package/vendor/zlib/old/os2/Makefile.os2 +136 -136
  187. package/vendor/zlib/old/os2/zlib.def +51 -51
  188. package/vendor/zlib/old/visual-basic.txt +160 -160
  189. package/vendor/zlib/os400/README400 +48 -48
  190. package/vendor/zlib/os400/bndsrc +133 -133
  191. package/vendor/zlib/os400/make.sh +366 -366
  192. package/vendor/zlib/os400/zlib.inc +531 -531
  193. package/vendor/zlib/qnx/package.qpg +141 -141
  194. package/vendor/zlib/test/CMakeLists.txt +265 -265
  195. package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -29
  196. package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -28
  197. package/vendor/zlib/test/example.c +552 -552
  198. package/vendor/zlib/test/find_package_test.cmake.in +26 -26
  199. package/vendor/zlib/test/infcover.c +672 -672
  200. package/vendor/zlib/test/minigzip.c +590 -590
  201. package/vendor/zlib/treebuild.xml +116 -116
  202. package/vendor/zlib/trees.c +1119 -1119
  203. package/vendor/zlib/trees.h +128 -128
  204. package/vendor/zlib/uncompr.c +85 -85
  205. package/vendor/zlib/watcom/watcom_f.mak +43 -43
  206. package/vendor/zlib/watcom/watcom_l.mak +43 -43
  207. package/vendor/zlib/win32/DLL_FAQ.txt +381 -381
  208. package/vendor/zlib/win32/Makefile.bor +109 -109
  209. package/vendor/zlib/win32/Makefile.gcc +177 -177
  210. package/vendor/zlib/win32/Makefile.msc +159 -159
  211. package/vendor/zlib/win32/README-WIN32.txt +103 -103
  212. package/vendor/zlib/win32/VisualC.txt +3 -3
  213. package/vendor/zlib/win32/zlib1.rc +37 -37
  214. package/vendor/zlib/zconf.h.in +544 -544
  215. package/vendor/zlib/zlib.3 +149 -149
  216. package/vendor/zlib/zlib.h +1957 -1957
  217. package/vendor/zlib/zlib.map +103 -103
  218. package/vendor/zlib/zlib.pc.cmakein +13 -13
  219. package/vendor/zlib/zlib.pc.in +13 -13
  220. package/vendor/zlib/zlibConfig.cmake.in +26 -26
  221. package/vendor/zlib/zutil.c +299 -299
  222. package/vendor/zlib/zutil.h +257 -257
  223. package/vendor/zsign/.gitattributes +3 -3
  224. package/vendor/zsign/LICENSE +20 -20
  225. package/vendor/zsign/README.md +142 -142
  226. package/vendor/zsign/build/linux/Makefile +43 -43
  227. package/vendor/zsign/build/macos/Makefile +43 -43
  228. package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -128
  229. package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -216
  230. package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -28
  231. package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -37
  232. package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -437
  233. package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -364
  234. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -22
  235. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -26
  236. package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -111
  237. package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -153
  238. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -10
  239. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -142
  240. package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -104
  241. package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -29
  242. package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -72
  243. package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -78
  244. package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -590
  245. package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -47
  246. package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -62
  247. package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -25
  248. package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -117
  249. package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -71
  250. package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -52
  251. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -56
  252. package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -131
  253. package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -125
  254. package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -38
  255. package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -46
  256. package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -52
  257. package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -44
  258. package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -236
  259. package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -1022
  260. package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -41
  261. package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -50
  262. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -56
  263. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -1466
  264. package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -45
  265. package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -133
  266. package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -28
  267. package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -211
  268. package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -339
  269. package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -59
  270. package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -280
  271. package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -44
  272. package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -57
  273. package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -310
  274. package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -38
  275. package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -39
  276. package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -1588
  277. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -10
  278. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -10
  279. package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -104
  280. package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -124
  281. package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -28
  282. package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -833
  283. package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -63
  284. package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -32
  285. package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -2231
  286. package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -140
  287. package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -50
  288. package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -62
  289. package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -169
  290. package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -118
  291. package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -56
  292. package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -82
  293. package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -31
  294. package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -138
  295. package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -16
  296. package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -338
  297. package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -56
  298. package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -63
  299. package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -62
  300. package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -55
  301. package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -219
  302. package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -5820
  303. package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -184
  304. package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -28
  305. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -53
  306. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -17
  307. package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -16
  308. package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -63
  309. package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -160
  310. package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -543
  311. package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -19
  312. package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -58
  313. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -46
  314. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -63
  315. package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -38
  316. package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -162
  317. package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -66
  318. package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -70
  319. package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -125
  320. package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -69
  321. package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -68
  322. package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -47
  323. package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -79
  324. package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -59
  325. package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -615
  326. package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -107
  327. package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -113
  328. package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -98
  329. package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -139
  330. package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -68
  331. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -30
  332. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -357
  333. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -379
  334. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -467
  335. package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -90
  336. package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -377
  337. package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -49
  338. package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -39
  339. package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -31
  340. package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -1220
  341. package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -320
  342. package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -522
  343. package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -67
  344. package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -63
  345. package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -245
  346. package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -38
  347. package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -62
  348. package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -70
  349. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -96
  350. package/vendor/zsign/src/archo.cpp +742 -742
  351. package/vendor/zsign/src/archo.h +61 -61
  352. package/vendor/zsign/src/bundle.cpp +589 -589
  353. package/vendor/zsign/src/bundle.h +46 -46
  354. package/vendor/zsign/src/common/archive.cpp +246 -246
  355. package/vendor/zsign/src/common/archive.h +22 -22
  356. package/vendor/zsign/src/common/common.h +56 -56
  357. package/vendor/zsign/src/common/fs.cpp +573 -573
  358. package/vendor/zsign/src/common/fs.h +50 -50
  359. package/vendor/zsign/src/common/log.cpp +145 -145
  360. package/vendor/zsign/src/common/log.h +37 -37
  361. package/vendor/zsign/src/common/mach-o.h +585 -585
  362. package/vendor/zsign/src/common/sha.cpp +133 -133
  363. package/vendor/zsign/src/common/sha.h +24 -24
  364. package/vendor/zsign/src/common/timer.cpp +28 -28
  365. package/vendor/zsign/src/common/timer.h +17 -17
  366. package/vendor/zsign/src/common/util.cpp +185 -185
  367. package/vendor/zsign/src/common/util.h +25 -25
  368. package/vendor/zsign/src/macho.cpp +273 -273
  369. package/vendor/zsign/src/macho.h +38 -38
  370. package/vendor/zsign/src/openssl.cpp +698 -698
  371. package/vendor/zsign/src/openssl.h +71 -71
  372. package/vendor/zsign/src/signing.cpp +745 -745
  373. package/vendor/zsign/src/signing.h +59 -59
  374. package/vendor/zsign/src/zsign.cpp +317 -317
  375. package/vendor/zsign/test/dylib/demo/Makefile +12 -12
  376. package/vendor/zsign/test/dylib/demo/control +9 -9
  377. package/vendor/zsign/test/dylib/demo/demo.m +21 -21
  378. package/vendor/zsign/test/linux/test.sh +19 -19
  379. 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
+ }