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.
- package/README.md +32 -32
- package/binding.gyp +50 -50
- package/deps/win-nodeapi/node_api.def +158 -158
- package/package.json +34 -34
- package/src/native/addon.cc +183 -183
- package/src/native/zsign_driver.cc +86 -86
- package/src/native/zsign_driver.h +38 -38
- package/vendor/zlib/.cmake-format.yaml +245 -245
- package/vendor/zlib/.github/workflows/c-std.yml +230 -230
- package/vendor/zlib/.github/workflows/cmake.yml +112 -112
- package/vendor/zlib/.github/workflows/configure.yml +136 -136
- package/vendor/zlib/.github/workflows/fuzz.yml +25 -25
- package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -77
- package/vendor/zlib/BUILD.bazel +134 -134
- package/vendor/zlib/CMakeLists.txt +330 -330
- package/vendor/zlib/ChangeLog +1621 -1621
- package/vendor/zlib/FAQ +367 -367
- package/vendor/zlib/INDEX +68 -68
- package/vendor/zlib/LICENSE +22 -22
- package/vendor/zlib/MODULE.bazel +9 -9
- package/vendor/zlib/Makefile.in +419 -419
- package/vendor/zlib/README +115 -115
- package/vendor/zlib/README-cmake.md +83 -83
- package/vendor/zlib/adler32.c +164 -164
- package/vendor/zlib/amiga/Makefile.pup +69 -69
- package/vendor/zlib/amiga/Makefile.sas +68 -68
- package/vendor/zlib/compress.c +75 -75
- package/vendor/zlib/configure +966 -966
- package/vendor/zlib/contrib/README.contrib +57 -57
- package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -106
- package/vendor/zlib/contrib/ada/mtest.adb +156 -156
- package/vendor/zlib/contrib/ada/read.adb +156 -156
- package/vendor/zlib/contrib/ada/readme.txt +65 -65
- package/vendor/zlib/contrib/ada/test.adb +463 -463
- package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -225
- package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -114
- package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -142
- package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -450
- package/vendor/zlib/contrib/ada/zlib.adb +701 -701
- package/vendor/zlib/contrib/ada/zlib.ads +328 -328
- package/vendor/zlib/contrib/ada/zlib.gpr +20 -20
- package/vendor/zlib/contrib/blast/Makefile +8 -8
- package/vendor/zlib/contrib/blast/README +4 -4
- package/vendor/zlib/contrib/blast/blast.c +466 -466
- package/vendor/zlib/contrib/blast/blast.h +83 -83
- package/vendor/zlib/contrib/delphi/ZLib.pas +557 -557
- package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -11
- package/vendor/zlib/contrib/delphi/readme.txt +76 -76
- package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -99
- package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -574
- package/vendor/zlib/contrib/infback9/README +1 -1
- package/vendor/zlib/contrib/infback9/infback9.c +603 -603
- package/vendor/zlib/contrib/infback9/infback9.h +37 -37
- package/vendor/zlib/contrib/infback9/inffix9.h +107 -107
- package/vendor/zlib/contrib/infback9/inflate9.h +47 -47
- package/vendor/zlib/contrib/infback9/inftree9.c +319 -319
- package/vendor/zlib/contrib/infback9/inftree9.h +61 -61
- package/vendor/zlib/contrib/iostream/test.cpp +24 -24
- package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -329
- package/vendor/zlib/contrib/iostream/zfstream.h +128 -128
- package/vendor/zlib/contrib/iostream2/zstream.h +307 -307
- package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -25
- package/vendor/zlib/contrib/iostream3/README +35 -35
- package/vendor/zlib/contrib/iostream3/TODO +17 -17
- package/vendor/zlib/contrib/iostream3/test.cc +50 -50
- package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -479
- package/vendor/zlib/contrib/iostream3/zfstream.h +466 -466
- package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -380
- package/vendor/zlib/contrib/minizip/Makefile +37 -37
- package/vendor/zlib/contrib/minizip/Makefile.am +45 -45
- package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -6
- package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -74
- package/vendor/zlib/contrib/minizip/configure.ac +32 -32
- package/vendor/zlib/contrib/minizip/crypt.h +128 -128
- package/vendor/zlib/contrib/minizip/ints.h +57 -57
- package/vendor/zlib/contrib/minizip/ioapi.c +231 -231
- package/vendor/zlib/contrib/minizip/ioapi.h +183 -183
- package/vendor/zlib/contrib/minizip/iowin32.c +448 -448
- package/vendor/zlib/contrib/minizip/iowin32.h +28 -28
- package/vendor/zlib/contrib/minizip/make_vms.com +25 -25
- package/vendor/zlib/contrib/minizip/miniunz.c +647 -647
- package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -63
- package/vendor/zlib/contrib/minizip/minizip.1 +46 -46
- package/vendor/zlib/contrib/minizip/minizip.c +512 -512
- package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -12
- package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -13
- package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -35
- package/vendor/zlib/contrib/minizip/mztools.c +288 -288
- package/vendor/zlib/contrib/minizip/mztools.h +37 -37
- package/vendor/zlib/contrib/minizip/skipset.h +361 -361
- package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -121
- package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -29
- package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -28
- package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -25
- package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -32
- package/vendor/zlib/contrib/minizip/unzip.c +1981 -1981
- package/vendor/zlib/contrib/minizip/unzip.h +441 -441
- package/vendor/zlib/contrib/minizip/zip.c +2199 -2199
- package/vendor/zlib/contrib/minizip/zip.h +370 -370
- package/vendor/zlib/contrib/nuget/nuget.csproj +43 -43
- package/vendor/zlib/contrib/nuget/nuget.sln +22 -22
- package/vendor/zlib/contrib/pascal/example.pas +599 -599
- package/vendor/zlib/contrib/pascal/readme.txt +76 -76
- package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -99
- package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -276
- package/vendor/zlib/contrib/puff/Makefile +42 -42
- package/vendor/zlib/contrib/puff/README +63 -63
- package/vendor/zlib/contrib/puff/puff.c +840 -840
- package/vendor/zlib/contrib/puff/puff.h +35 -35
- package/vendor/zlib/contrib/puff/pufftest.c +169 -169
- package/vendor/zlib/contrib/untgz/Makefile +14 -14
- package/vendor/zlib/contrib/untgz/Makefile.msc +17 -17
- package/vendor/zlib/contrib/untgz/untgz.c +667 -667
- package/vendor/zlib/contrib/vstudio/readme.txt +81 -81
- package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +315 -315
- package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +312 -312
- package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +421 -421
- package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +315 -315
- package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -32
- package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +458 -458
- package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -119
- package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +667 -667
- package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +315 -315
- package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +312 -312
- package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +421 -421
- package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +315 -315
- package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -32
- package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +458 -458
- package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -119
- package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +667 -667
- package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +408 -408
- package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +404 -404
- package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +472 -472
- package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +408 -408
- package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -32
- package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +601 -601
- package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -179
- package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +874 -874
- package/vendor/zlib/crc32.c +1049 -1049
- package/vendor/zlib/crc32.h +9446 -9446
- package/vendor/zlib/deflate.c +2152 -2152
- package/vendor/zlib/deflate.h +380 -380
- package/vendor/zlib/doc/algorithm.txt +209 -209
- package/vendor/zlib/doc/rfc1950.txt +619 -619
- package/vendor/zlib/doc/rfc1951.txt +955 -955
- package/vendor/zlib/doc/rfc1952.txt +675 -675
- package/vendor/zlib/doc/txtvsbin.txt +107 -107
- package/vendor/zlib/examples/README.examples +54 -54
- package/vendor/zlib/examples/enough.c +597 -597
- package/vendor/zlib/examples/fitblk.c +233 -233
- package/vendor/zlib/examples/gun.c +702 -702
- package/vendor/zlib/examples/gzappend.c +504 -504
- package/vendor/zlib/examples/gzjoin.c +449 -449
- package/vendor/zlib/examples/gzlog.c +1061 -1061
- package/vendor/zlib/examples/gzlog.h +91 -91
- package/vendor/zlib/examples/gznorm.c +474 -474
- package/vendor/zlib/examples/zlib_how.html +549 -549
- package/vendor/zlib/examples/zpipe.c +209 -209
- package/vendor/zlib/examples/zran.c +550 -550
- package/vendor/zlib/examples/zran.h +53 -53
- package/vendor/zlib/gzclose.c +23 -23
- package/vendor/zlib/gzguts.h +215 -215
- package/vendor/zlib/gzlib.c +585 -585
- package/vendor/zlib/gzread.c +603 -603
- package/vendor/zlib/gzwrite.c +631 -631
- package/vendor/zlib/infback.c +628 -628
- package/vendor/zlib/inffast.c +320 -320
- package/vendor/zlib/inffast.h +11 -11
- package/vendor/zlib/inffixed.h +94 -94
- package/vendor/zlib/inflate.c +1526 -1526
- package/vendor/zlib/inflate.h +126 -126
- package/vendor/zlib/inftrees.c +299 -299
- package/vendor/zlib/inftrees.h +62 -62
- package/vendor/zlib/make_vms.com +867 -867
- package/vendor/zlib/msdos/Makefile.bor +115 -115
- package/vendor/zlib/msdos/Makefile.dj2 +104 -104
- package/vendor/zlib/msdos/Makefile.emx +69 -69
- package/vendor/zlib/msdos/Makefile.msc +112 -112
- package/vendor/zlib/msdos/Makefile.tc +100 -100
- package/vendor/zlib/nintendods/Makefile +126 -126
- package/vendor/zlib/nintendods/README +5 -5
- package/vendor/zlib/old/Makefile.emx +69 -69
- package/vendor/zlib/old/Makefile.riscos +151 -151
- package/vendor/zlib/old/README +3 -3
- package/vendor/zlib/old/descrip.mms +48 -48
- package/vendor/zlib/old/os2/Makefile.os2 +136 -136
- package/vendor/zlib/old/os2/zlib.def +51 -51
- package/vendor/zlib/old/visual-basic.txt +160 -160
- package/vendor/zlib/os400/README400 +48 -48
- package/vendor/zlib/os400/bndsrc +133 -133
- package/vendor/zlib/os400/make.sh +366 -366
- package/vendor/zlib/os400/zlib.inc +531 -531
- package/vendor/zlib/qnx/package.qpg +141 -141
- package/vendor/zlib/test/CMakeLists.txt +265 -265
- package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -29
- package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -28
- package/vendor/zlib/test/example.c +552 -552
- package/vendor/zlib/test/find_package_test.cmake.in +26 -26
- package/vendor/zlib/test/infcover.c +672 -672
- package/vendor/zlib/test/minigzip.c +590 -590
- package/vendor/zlib/treebuild.xml +116 -116
- package/vendor/zlib/trees.c +1119 -1119
- package/vendor/zlib/trees.h +128 -128
- package/vendor/zlib/uncompr.c +85 -85
- package/vendor/zlib/watcom/watcom_f.mak +43 -43
- package/vendor/zlib/watcom/watcom_l.mak +43 -43
- package/vendor/zlib/win32/DLL_FAQ.txt +381 -381
- package/vendor/zlib/win32/Makefile.bor +109 -109
- package/vendor/zlib/win32/Makefile.gcc +177 -177
- package/vendor/zlib/win32/Makefile.msc +159 -159
- package/vendor/zlib/win32/README-WIN32.txt +103 -103
- package/vendor/zlib/win32/VisualC.txt +3 -3
- package/vendor/zlib/win32/zlib1.rc +37 -37
- package/vendor/zlib/zconf.h.in +544 -544
- package/vendor/zlib/zlib.3 +149 -149
- package/vendor/zlib/zlib.h +1957 -1957
- package/vendor/zlib/zlib.map +103 -103
- package/vendor/zlib/zlib.pc.cmakein +13 -13
- package/vendor/zlib/zlib.pc.in +13 -13
- package/vendor/zlib/zlibConfig.cmake.in +26 -26
- package/vendor/zlib/zutil.c +299 -299
- package/vendor/zlib/zutil.h +257 -257
- package/vendor/zsign/.gitattributes +3 -3
- package/vendor/zsign/LICENSE +20 -20
- package/vendor/zsign/README.md +142 -142
- package/vendor/zsign/build/linux/Makefile +43 -43
- package/vendor/zsign/build/macos/Makefile +43 -43
- package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -128
- package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -216
- package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -28
- package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -37
- package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -437
- package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -364
- package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -22
- package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -26
- package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -111
- package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -153
- package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -10
- package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -142
- package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -104
- package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -29
- package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -72
- package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -78
- package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -590
- package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -47
- package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -62
- package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -25
- package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -117
- package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -71
- package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -52
- package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -56
- package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -131
- package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -125
- package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -38
- package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -46
- package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -52
- package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -44
- package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -236
- package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -1022
- package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -41
- package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -50
- package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -56
- package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -1466
- package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -45
- package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -133
- package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -28
- package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -211
- package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -339
- package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -59
- package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -280
- package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -44
- package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -57
- package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -310
- package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -38
- package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -39
- package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -1588
- package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -10
- package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -10
- package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -104
- package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -124
- package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -28
- package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -833
- package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -63
- package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -32
- package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -2231
- package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -140
- package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -50
- package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -62
- package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -169
- package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -118
- package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -56
- package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -82
- package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -31
- package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -138
- package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -16
- package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -338
- package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -56
- package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -63
- package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -62
- package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -55
- package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -219
- package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -5820
- package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -184
- package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -28
- package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -53
- package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -17
- package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -16
- package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -63
- package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -160
- package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -543
- package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -19
- package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -58
- package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -46
- package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -63
- package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -38
- package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -162
- package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -66
- package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -70
- package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -125
- package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -69
- package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -68
- package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -47
- package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -79
- package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -59
- package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -615
- package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -107
- package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -113
- package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -98
- package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -139
- package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -68
- package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -30
- package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -357
- package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -379
- package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -467
- package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -90
- package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -377
- package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -49
- package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -39
- package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -31
- package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -1220
- package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -320
- package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -522
- package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -67
- package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -63
- package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -245
- package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -38
- package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -62
- package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -70
- package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -96
- package/vendor/zsign/src/archo.cpp +742 -742
- package/vendor/zsign/src/archo.h +61 -61
- package/vendor/zsign/src/bundle.cpp +589 -589
- package/vendor/zsign/src/bundle.h +46 -46
- package/vendor/zsign/src/common/archive.cpp +246 -246
- package/vendor/zsign/src/common/archive.h +22 -22
- package/vendor/zsign/src/common/common.h +56 -56
- package/vendor/zsign/src/common/fs.cpp +573 -573
- package/vendor/zsign/src/common/fs.h +50 -50
- package/vendor/zsign/src/common/log.cpp +145 -145
- package/vendor/zsign/src/common/log.h +37 -37
- package/vendor/zsign/src/common/mach-o.h +585 -585
- package/vendor/zsign/src/common/sha.cpp +133 -133
- package/vendor/zsign/src/common/sha.h +24 -24
- package/vendor/zsign/src/common/timer.cpp +28 -28
- package/vendor/zsign/src/common/timer.h +17 -17
- package/vendor/zsign/src/common/util.cpp +185 -185
- package/vendor/zsign/src/common/util.h +25 -25
- package/vendor/zsign/src/macho.cpp +273 -273
- package/vendor/zsign/src/macho.h +38 -38
- package/vendor/zsign/src/openssl.cpp +698 -698
- package/vendor/zsign/src/openssl.h +71 -71
- package/vendor/zsign/src/signing.cpp +745 -745
- package/vendor/zsign/src/signing.h +59 -59
- package/vendor/zsign/src/zsign.cpp +317 -317
- package/vendor/zsign/test/dylib/demo/Makefile +12 -12
- package/vendor/zsign/test/dylib/demo/control +9 -9
- package/vendor/zsign/test/dylib/demo/demo.m +21 -21
- package/vendor/zsign/test/linux/test.sh +19 -19
- package/vendor/zsign/test/macos/test.sh +19 -19
|
@@ -1,701 +1,701 @@
|
|
|
1
|
-
----------------------------------------------------------------
|
|
2
|
-
-- ZLib for Ada thick binding. --
|
|
3
|
-
-- --
|
|
4
|
-
-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
|
|
5
|
-
-- --
|
|
6
|
-
-- Open source license information is in the zlib.ads file. --
|
|
7
|
-
----------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
-- $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $
|
|
10
|
-
|
|
11
|
-
with Ada.Exceptions;
|
|
12
|
-
with Ada.Unchecked_Conversion;
|
|
13
|
-
with Ada.Unchecked_Deallocation;
|
|
14
|
-
|
|
15
|
-
with Interfaces.C.Strings;
|
|
16
|
-
|
|
17
|
-
with ZLib.Thin;
|
|
18
|
-
|
|
19
|
-
package body ZLib is
|
|
20
|
-
|
|
21
|
-
use type Thin.Int;
|
|
22
|
-
|
|
23
|
-
type Z_Stream is new Thin.Z_Stream;
|
|
24
|
-
|
|
25
|
-
type Return_Code_Enum is
|
|
26
|
-
(OK,
|
|
27
|
-
STREAM_END,
|
|
28
|
-
NEED_DICT,
|
|
29
|
-
ERRNO,
|
|
30
|
-
STREAM_ERROR,
|
|
31
|
-
DATA_ERROR,
|
|
32
|
-
MEM_ERROR,
|
|
33
|
-
BUF_ERROR,
|
|
34
|
-
VERSION_ERROR);
|
|
35
|
-
|
|
36
|
-
type Flate_Step_Function is access
|
|
37
|
-
function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int;
|
|
38
|
-
pragma Convention (C, Flate_Step_Function);
|
|
39
|
-
|
|
40
|
-
type Flate_End_Function is access
|
|
41
|
-
function (Ctrm : in Thin.Z_Streamp) return Thin.Int;
|
|
42
|
-
pragma Convention (C, Flate_End_Function);
|
|
43
|
-
|
|
44
|
-
type Flate_Type is record
|
|
45
|
-
Step : Flate_Step_Function;
|
|
46
|
-
Done : Flate_End_Function;
|
|
47
|
-
end record;
|
|
48
|
-
|
|
49
|
-
subtype Footer_Array is Stream_Element_Array (1 .. 8);
|
|
50
|
-
|
|
51
|
-
Simple_GZip_Header : constant Stream_Element_Array (1 .. 10)
|
|
52
|
-
:= (16#1f#, 16#8b#, -- Magic header
|
|
53
|
-
16#08#, -- Z_DEFLATED
|
|
54
|
-
16#00#, -- Flags
|
|
55
|
-
16#00#, 16#00#, 16#00#, 16#00#, -- Time
|
|
56
|
-
16#00#, -- XFlags
|
|
57
|
-
16#03# -- OS code
|
|
58
|
-
);
|
|
59
|
-
-- The simplest gzip header is not for informational, but just for
|
|
60
|
-
-- gzip format compatibility.
|
|
61
|
-
-- Note that some code below is using assumption
|
|
62
|
-
-- Simple_GZip_Header'Last > Footer_Array'Last, so do not make
|
|
63
|
-
-- Simple_GZip_Header'Last <= Footer_Array'Last.
|
|
64
|
-
|
|
65
|
-
Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum
|
|
66
|
-
:= (0 => OK,
|
|
67
|
-
1 => STREAM_END,
|
|
68
|
-
2 => NEED_DICT,
|
|
69
|
-
-1 => ERRNO,
|
|
70
|
-
-2 => STREAM_ERROR,
|
|
71
|
-
-3 => DATA_ERROR,
|
|
72
|
-
-4 => MEM_ERROR,
|
|
73
|
-
-5 => BUF_ERROR,
|
|
74
|
-
-6 => VERSION_ERROR);
|
|
75
|
-
|
|
76
|
-
Flate : constant array (Boolean) of Flate_Type
|
|
77
|
-
:= (True => (Step => Thin.Deflate'Access,
|
|
78
|
-
Done => Thin.DeflateEnd'Access),
|
|
79
|
-
False => (Step => Thin.Inflate'Access,
|
|
80
|
-
Done => Thin.InflateEnd'Access));
|
|
81
|
-
|
|
82
|
-
Flush_Finish : constant array (Boolean) of Flush_Mode
|
|
83
|
-
:= (True => Finish, False => No_Flush);
|
|
84
|
-
|
|
85
|
-
procedure Raise_Error (Stream : in Z_Stream);
|
|
86
|
-
pragma Inline (Raise_Error);
|
|
87
|
-
|
|
88
|
-
procedure Raise_Error (Message : in String);
|
|
89
|
-
pragma Inline (Raise_Error);
|
|
90
|
-
|
|
91
|
-
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int);
|
|
92
|
-
|
|
93
|
-
procedure Free is new Ada.Unchecked_Deallocation
|
|
94
|
-
(Z_Stream, Z_Stream_Access);
|
|
95
|
-
|
|
96
|
-
function To_Thin_Access is new Ada.Unchecked_Conversion
|
|
97
|
-
(Z_Stream_Access, Thin.Z_Streamp);
|
|
98
|
-
|
|
99
|
-
procedure Translate_GZip
|
|
100
|
-
(Filter : in out Filter_Type;
|
|
101
|
-
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
102
|
-
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
103
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
104
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
105
|
-
Flush : in Flush_Mode);
|
|
106
|
-
-- Separate translate routine for make gzip header.
|
|
107
|
-
|
|
108
|
-
procedure Translate_Auto
|
|
109
|
-
(Filter : in out Filter_Type;
|
|
110
|
-
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
111
|
-
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
112
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
113
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
114
|
-
Flush : in Flush_Mode);
|
|
115
|
-
-- translate routine without additional headers.
|
|
116
|
-
|
|
117
|
-
-----------------
|
|
118
|
-
-- Check_Error --
|
|
119
|
-
-----------------
|
|
120
|
-
|
|
121
|
-
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is
|
|
122
|
-
use type Thin.Int;
|
|
123
|
-
begin
|
|
124
|
-
if Code /= Thin.Z_OK then
|
|
125
|
-
Raise_Error
|
|
126
|
-
(Return_Code_Enum'Image (Return_Code (Code))
|
|
127
|
-
& ": " & Last_Error_Message (Stream));
|
|
128
|
-
end if;
|
|
129
|
-
end Check_Error;
|
|
130
|
-
|
|
131
|
-
-----------
|
|
132
|
-
-- Close --
|
|
133
|
-
-----------
|
|
134
|
-
|
|
135
|
-
procedure Close
|
|
136
|
-
(Filter : in out Filter_Type;
|
|
137
|
-
Ignore_Error : in Boolean := False)
|
|
138
|
-
is
|
|
139
|
-
Code : Thin.Int;
|
|
140
|
-
begin
|
|
141
|
-
if not Ignore_Error and then not Is_Open (Filter) then
|
|
142
|
-
raise Status_Error;
|
|
143
|
-
end if;
|
|
144
|
-
|
|
145
|
-
Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm));
|
|
146
|
-
|
|
147
|
-
if Ignore_Error or else Code = Thin.Z_OK then
|
|
148
|
-
Free (Filter.Strm);
|
|
149
|
-
else
|
|
150
|
-
declare
|
|
151
|
-
Error_Message : constant String
|
|
152
|
-
:= Last_Error_Message (Filter.Strm.all);
|
|
153
|
-
begin
|
|
154
|
-
Free (Filter.Strm);
|
|
155
|
-
Ada.Exceptions.Raise_Exception
|
|
156
|
-
(ZLib_Error'Identity,
|
|
157
|
-
Return_Code_Enum'Image (Return_Code (Code))
|
|
158
|
-
& ": " & Error_Message);
|
|
159
|
-
end;
|
|
160
|
-
end if;
|
|
161
|
-
end Close;
|
|
162
|
-
|
|
163
|
-
-----------
|
|
164
|
-
-- CRC32 --
|
|
165
|
-
-----------
|
|
166
|
-
|
|
167
|
-
function CRC32
|
|
168
|
-
(CRC : in Unsigned_32;
|
|
169
|
-
Data : in Ada.Streams.Stream_Element_Array)
|
|
170
|
-
return Unsigned_32
|
|
171
|
-
is
|
|
172
|
-
use Thin;
|
|
173
|
-
begin
|
|
174
|
-
return Unsigned_32 (crc32 (ULong (CRC),
|
|
175
|
-
Data'Address,
|
|
176
|
-
Data'Length));
|
|
177
|
-
end CRC32;
|
|
178
|
-
|
|
179
|
-
procedure CRC32
|
|
180
|
-
(CRC : in out Unsigned_32;
|
|
181
|
-
Data : in Ada.Streams.Stream_Element_Array) is
|
|
182
|
-
begin
|
|
183
|
-
CRC := CRC32 (CRC, Data);
|
|
184
|
-
end CRC32;
|
|
185
|
-
|
|
186
|
-
------------------
|
|
187
|
-
-- Deflate_Init --
|
|
188
|
-
------------------
|
|
189
|
-
|
|
190
|
-
procedure Deflate_Init
|
|
191
|
-
(Filter : in out Filter_Type;
|
|
192
|
-
Level : in Compression_Level := Default_Compression;
|
|
193
|
-
Strategy : in Strategy_Type := Default_Strategy;
|
|
194
|
-
Method : in Compression_Method := Deflated;
|
|
195
|
-
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
|
|
196
|
-
Memory_Level : in Memory_Level_Type := Default_Memory_Level;
|
|
197
|
-
Header : in Header_Type := Default)
|
|
198
|
-
is
|
|
199
|
-
use type Thin.Int;
|
|
200
|
-
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
|
|
201
|
-
begin
|
|
202
|
-
if Is_Open (Filter) then
|
|
203
|
-
raise Status_Error;
|
|
204
|
-
end if;
|
|
205
|
-
|
|
206
|
-
-- We allow ZLib to make header only in case of default header type.
|
|
207
|
-
-- Otherwise we would either do header by ourselves, or do not do
|
|
208
|
-
-- header at all.
|
|
209
|
-
|
|
210
|
-
if Header = None or else Header = GZip then
|
|
211
|
-
Win_Bits := -Win_Bits;
|
|
212
|
-
end if;
|
|
213
|
-
|
|
214
|
-
-- For the GZip CRC calculation and make headers.
|
|
215
|
-
|
|
216
|
-
if Header = GZip then
|
|
217
|
-
Filter.CRC := 0;
|
|
218
|
-
Filter.Offset := Simple_GZip_Header'First;
|
|
219
|
-
else
|
|
220
|
-
Filter.Offset := Simple_GZip_Header'Last + 1;
|
|
221
|
-
end if;
|
|
222
|
-
|
|
223
|
-
Filter.Strm := new Z_Stream;
|
|
224
|
-
Filter.Compression := True;
|
|
225
|
-
Filter.Stream_End := False;
|
|
226
|
-
Filter.Header := Header;
|
|
227
|
-
|
|
228
|
-
if Thin.Deflate_Init
|
|
229
|
-
(To_Thin_Access (Filter.Strm),
|
|
230
|
-
Level => Thin.Int (Level),
|
|
231
|
-
method => Thin.Int (Method),
|
|
232
|
-
windowBits => Win_Bits,
|
|
233
|
-
memLevel => Thin.Int (Memory_Level),
|
|
234
|
-
strategy => Thin.Int (Strategy)) /= Thin.Z_OK
|
|
235
|
-
then
|
|
236
|
-
Raise_Error (Filter.Strm.all);
|
|
237
|
-
end if;
|
|
238
|
-
end Deflate_Init;
|
|
239
|
-
|
|
240
|
-
-----------
|
|
241
|
-
-- Flush --
|
|
242
|
-
-----------
|
|
243
|
-
|
|
244
|
-
procedure Flush
|
|
245
|
-
(Filter : in out Filter_Type;
|
|
246
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
247
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
248
|
-
Flush : in Flush_Mode)
|
|
249
|
-
is
|
|
250
|
-
No_Data : Stream_Element_Array := (1 .. 0 => 0);
|
|
251
|
-
Last : Stream_Element_Offset;
|
|
252
|
-
begin
|
|
253
|
-
Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush);
|
|
254
|
-
end Flush;
|
|
255
|
-
|
|
256
|
-
-----------------------
|
|
257
|
-
-- Generic_Translate --
|
|
258
|
-
-----------------------
|
|
259
|
-
|
|
260
|
-
procedure Generic_Translate
|
|
261
|
-
(Filter : in out ZLib.Filter_Type;
|
|
262
|
-
In_Buffer_Size : in Integer := Default_Buffer_Size;
|
|
263
|
-
Out_Buffer_Size : in Integer := Default_Buffer_Size)
|
|
264
|
-
is
|
|
265
|
-
In_Buffer : Stream_Element_Array
|
|
266
|
-
(1 .. Stream_Element_Offset (In_Buffer_Size));
|
|
267
|
-
Out_Buffer : Stream_Element_Array
|
|
268
|
-
(1 .. Stream_Element_Offset (Out_Buffer_Size));
|
|
269
|
-
Last : Stream_Element_Offset;
|
|
270
|
-
In_Last : Stream_Element_Offset;
|
|
271
|
-
In_First : Stream_Element_Offset;
|
|
272
|
-
Out_Last : Stream_Element_Offset;
|
|
273
|
-
begin
|
|
274
|
-
Main : loop
|
|
275
|
-
Data_In (In_Buffer, Last);
|
|
276
|
-
|
|
277
|
-
In_First := In_Buffer'First;
|
|
278
|
-
|
|
279
|
-
loop
|
|
280
|
-
Translate
|
|
281
|
-
(Filter => Filter,
|
|
282
|
-
In_Data => In_Buffer (In_First .. Last),
|
|
283
|
-
In_Last => In_Last,
|
|
284
|
-
Out_Data => Out_Buffer,
|
|
285
|
-
Out_Last => Out_Last,
|
|
286
|
-
Flush => Flush_Finish (Last < In_Buffer'First));
|
|
287
|
-
|
|
288
|
-
if Out_Buffer'First <= Out_Last then
|
|
289
|
-
Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last));
|
|
290
|
-
end if;
|
|
291
|
-
|
|
292
|
-
exit Main when Stream_End (Filter);
|
|
293
|
-
|
|
294
|
-
-- The end of in buffer.
|
|
295
|
-
|
|
296
|
-
exit when In_Last = Last;
|
|
297
|
-
|
|
298
|
-
In_First := In_Last + 1;
|
|
299
|
-
end loop;
|
|
300
|
-
end loop Main;
|
|
301
|
-
|
|
302
|
-
end Generic_Translate;
|
|
303
|
-
|
|
304
|
-
------------------
|
|
305
|
-
-- Inflate_Init --
|
|
306
|
-
------------------
|
|
307
|
-
|
|
308
|
-
procedure Inflate_Init
|
|
309
|
-
(Filter : in out Filter_Type;
|
|
310
|
-
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
|
|
311
|
-
Header : in Header_Type := Default)
|
|
312
|
-
is
|
|
313
|
-
use type Thin.Int;
|
|
314
|
-
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
|
|
315
|
-
|
|
316
|
-
procedure Check_Version;
|
|
317
|
-
-- Check the latest header types compatibility.
|
|
318
|
-
|
|
319
|
-
procedure Check_Version is
|
|
320
|
-
begin
|
|
321
|
-
if Version <= "1.1.4" then
|
|
322
|
-
Raise_Error
|
|
323
|
-
("Inflate header type " & Header_Type'Image (Header)
|
|
324
|
-
& " incompatible with ZLib version " & Version);
|
|
325
|
-
end if;
|
|
326
|
-
end Check_Version;
|
|
327
|
-
|
|
328
|
-
begin
|
|
329
|
-
if Is_Open (Filter) then
|
|
330
|
-
raise Status_Error;
|
|
331
|
-
end if;
|
|
332
|
-
|
|
333
|
-
case Header is
|
|
334
|
-
when None =>
|
|
335
|
-
Check_Version;
|
|
336
|
-
|
|
337
|
-
-- Inflate data without headers determined
|
|
338
|
-
-- by negative Win_Bits.
|
|
339
|
-
|
|
340
|
-
Win_Bits := -Win_Bits;
|
|
341
|
-
when GZip =>
|
|
342
|
-
Check_Version;
|
|
343
|
-
|
|
344
|
-
-- Inflate gzip data defined by flag 16.
|
|
345
|
-
|
|
346
|
-
Win_Bits := Win_Bits + 16;
|
|
347
|
-
when Auto =>
|
|
348
|
-
Check_Version;
|
|
349
|
-
|
|
350
|
-
-- Inflate with automatic detection
|
|
351
|
-
-- of gzip or native header defined by flag 32.
|
|
352
|
-
|
|
353
|
-
Win_Bits := Win_Bits + 32;
|
|
354
|
-
when Default => null;
|
|
355
|
-
end case;
|
|
356
|
-
|
|
357
|
-
Filter.Strm := new Z_Stream;
|
|
358
|
-
Filter.Compression := False;
|
|
359
|
-
Filter.Stream_End := False;
|
|
360
|
-
Filter.Header := Header;
|
|
361
|
-
|
|
362
|
-
if Thin.Inflate_Init
|
|
363
|
-
(To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK
|
|
364
|
-
then
|
|
365
|
-
Raise_Error (Filter.Strm.all);
|
|
366
|
-
end if;
|
|
367
|
-
end Inflate_Init;
|
|
368
|
-
|
|
369
|
-
-------------
|
|
370
|
-
-- Is_Open --
|
|
371
|
-
-------------
|
|
372
|
-
|
|
373
|
-
function Is_Open (Filter : in Filter_Type) return Boolean is
|
|
374
|
-
begin
|
|
375
|
-
return Filter.Strm /= null;
|
|
376
|
-
end Is_Open;
|
|
377
|
-
|
|
378
|
-
-----------------
|
|
379
|
-
-- Raise_Error --
|
|
380
|
-
-----------------
|
|
381
|
-
|
|
382
|
-
procedure Raise_Error (Message : in String) is
|
|
383
|
-
begin
|
|
384
|
-
Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message);
|
|
385
|
-
end Raise_Error;
|
|
386
|
-
|
|
387
|
-
procedure Raise_Error (Stream : in Z_Stream) is
|
|
388
|
-
begin
|
|
389
|
-
Raise_Error (Last_Error_Message (Stream));
|
|
390
|
-
end Raise_Error;
|
|
391
|
-
|
|
392
|
-
----------
|
|
393
|
-
-- Read --
|
|
394
|
-
----------
|
|
395
|
-
|
|
396
|
-
procedure Read
|
|
397
|
-
(Filter : in out Filter_Type;
|
|
398
|
-
Item : out Ada.Streams.Stream_Element_Array;
|
|
399
|
-
Last : out Ada.Streams.Stream_Element_Offset;
|
|
400
|
-
Flush : in Flush_Mode := No_Flush)
|
|
401
|
-
is
|
|
402
|
-
In_Last : Stream_Element_Offset;
|
|
403
|
-
Item_First : Ada.Streams.Stream_Element_Offset := Item'First;
|
|
404
|
-
V_Flush : Flush_Mode := Flush;
|
|
405
|
-
|
|
406
|
-
begin
|
|
407
|
-
pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1);
|
|
408
|
-
pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last);
|
|
409
|
-
|
|
410
|
-
loop
|
|
411
|
-
if Rest_Last = Buffer'First - 1 then
|
|
412
|
-
V_Flush := Finish;
|
|
413
|
-
|
|
414
|
-
elsif Rest_First > Rest_Last then
|
|
415
|
-
Read (Buffer, Rest_Last);
|
|
416
|
-
Rest_First := Buffer'First;
|
|
417
|
-
|
|
418
|
-
if Rest_Last < Buffer'First then
|
|
419
|
-
V_Flush := Finish;
|
|
420
|
-
end if;
|
|
421
|
-
end if;
|
|
422
|
-
|
|
423
|
-
Translate
|
|
424
|
-
(Filter => Filter,
|
|
425
|
-
In_Data => Buffer (Rest_First .. Rest_Last),
|
|
426
|
-
In_Last => In_Last,
|
|
427
|
-
Out_Data => Item (Item_First .. Item'Last),
|
|
428
|
-
Out_Last => Last,
|
|
429
|
-
Flush => V_Flush);
|
|
430
|
-
|
|
431
|
-
Rest_First := In_Last + 1;
|
|
432
|
-
|
|
433
|
-
exit when Stream_End (Filter)
|
|
434
|
-
or else Last = Item'Last
|
|
435
|
-
or else (Last >= Item'First and then Allow_Read_Some);
|
|
436
|
-
|
|
437
|
-
Item_First := Last + 1;
|
|
438
|
-
end loop;
|
|
439
|
-
end Read;
|
|
440
|
-
|
|
441
|
-
----------------
|
|
442
|
-
-- Stream_End --
|
|
443
|
-
----------------
|
|
444
|
-
|
|
445
|
-
function Stream_End (Filter : in Filter_Type) return Boolean is
|
|
446
|
-
begin
|
|
447
|
-
if Filter.Header = GZip and Filter.Compression then
|
|
448
|
-
return Filter.Stream_End
|
|
449
|
-
and then Filter.Offset = Footer_Array'Last + 1;
|
|
450
|
-
else
|
|
451
|
-
return Filter.Stream_End;
|
|
452
|
-
end if;
|
|
453
|
-
end Stream_End;
|
|
454
|
-
|
|
455
|
-
--------------
|
|
456
|
-
-- Total_In --
|
|
457
|
-
--------------
|
|
458
|
-
|
|
459
|
-
function Total_In (Filter : in Filter_Type) return Count is
|
|
460
|
-
begin
|
|
461
|
-
return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all));
|
|
462
|
-
end Total_In;
|
|
463
|
-
|
|
464
|
-
---------------
|
|
465
|
-
-- Total_Out --
|
|
466
|
-
---------------
|
|
467
|
-
|
|
468
|
-
function Total_Out (Filter : in Filter_Type) return Count is
|
|
469
|
-
begin
|
|
470
|
-
return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all));
|
|
471
|
-
end Total_Out;
|
|
472
|
-
|
|
473
|
-
---------------
|
|
474
|
-
-- Translate --
|
|
475
|
-
---------------
|
|
476
|
-
|
|
477
|
-
procedure Translate
|
|
478
|
-
(Filter : in out Filter_Type;
|
|
479
|
-
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
480
|
-
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
481
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
482
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
483
|
-
Flush : in Flush_Mode) is
|
|
484
|
-
begin
|
|
485
|
-
if Filter.Header = GZip and then Filter.Compression then
|
|
486
|
-
Translate_GZip
|
|
487
|
-
(Filter => Filter,
|
|
488
|
-
In_Data => In_Data,
|
|
489
|
-
In_Last => In_Last,
|
|
490
|
-
Out_Data => Out_Data,
|
|
491
|
-
Out_Last => Out_Last,
|
|
492
|
-
Flush => Flush);
|
|
493
|
-
else
|
|
494
|
-
Translate_Auto
|
|
495
|
-
(Filter => Filter,
|
|
496
|
-
In_Data => In_Data,
|
|
497
|
-
In_Last => In_Last,
|
|
498
|
-
Out_Data => Out_Data,
|
|
499
|
-
Out_Last => Out_Last,
|
|
500
|
-
Flush => Flush);
|
|
501
|
-
end if;
|
|
502
|
-
end Translate;
|
|
503
|
-
|
|
504
|
-
--------------------
|
|
505
|
-
-- Translate_Auto --
|
|
506
|
-
--------------------
|
|
507
|
-
|
|
508
|
-
procedure Translate_Auto
|
|
509
|
-
(Filter : in out Filter_Type;
|
|
510
|
-
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
511
|
-
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
512
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
513
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
514
|
-
Flush : in Flush_Mode)
|
|
515
|
-
is
|
|
516
|
-
use type Thin.Int;
|
|
517
|
-
Code : Thin.Int;
|
|
518
|
-
|
|
519
|
-
begin
|
|
520
|
-
if not Is_Open (Filter) then
|
|
521
|
-
raise Status_Error;
|
|
522
|
-
end if;
|
|
523
|
-
|
|
524
|
-
if Out_Data'Length = 0 and then In_Data'Length = 0 then
|
|
525
|
-
raise Constraint_Error;
|
|
526
|
-
end if;
|
|
527
|
-
|
|
528
|
-
Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length);
|
|
529
|
-
Set_In (Filter.Strm.all, In_Data'Address, In_Data'Length);
|
|
530
|
-
|
|
531
|
-
Code := Flate (Filter.Compression).Step
|
|
532
|
-
(To_Thin_Access (Filter.Strm),
|
|
533
|
-
Thin.Int (Flush));
|
|
534
|
-
|
|
535
|
-
if Code = Thin.Z_STREAM_END then
|
|
536
|
-
Filter.Stream_End := True;
|
|
537
|
-
else
|
|
538
|
-
Check_Error (Filter.Strm.all, Code);
|
|
539
|
-
end if;
|
|
540
|
-
|
|
541
|
-
In_Last := In_Data'Last
|
|
542
|
-
- Stream_Element_Offset (Avail_In (Filter.Strm.all));
|
|
543
|
-
Out_Last := Out_Data'Last
|
|
544
|
-
- Stream_Element_Offset (Avail_Out (Filter.Strm.all));
|
|
545
|
-
end Translate_Auto;
|
|
546
|
-
|
|
547
|
-
--------------------
|
|
548
|
-
-- Translate_GZip --
|
|
549
|
-
--------------------
|
|
550
|
-
|
|
551
|
-
procedure Translate_GZip
|
|
552
|
-
(Filter : in out Filter_Type;
|
|
553
|
-
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
554
|
-
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
555
|
-
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
556
|
-
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
557
|
-
Flush : in Flush_Mode)
|
|
558
|
-
is
|
|
559
|
-
Out_First : Stream_Element_Offset;
|
|
560
|
-
|
|
561
|
-
procedure Add_Data (Data : in Stream_Element_Array);
|
|
562
|
-
-- Add data to stream from the Filter.Offset till necessary,
|
|
563
|
-
-- used for add gzip headr/footer.
|
|
564
|
-
|
|
565
|
-
procedure Put_32
|
|
566
|
-
(Item : in out Stream_Element_Array;
|
|
567
|
-
Data : in Unsigned_32);
|
|
568
|
-
pragma Inline (Put_32);
|
|
569
|
-
|
|
570
|
-
--------------
|
|
571
|
-
-- Add_Data --
|
|
572
|
-
--------------
|
|
573
|
-
|
|
574
|
-
procedure Add_Data (Data : in Stream_Element_Array) is
|
|
575
|
-
Data_First : Stream_Element_Offset renames Filter.Offset;
|
|
576
|
-
Data_Last : Stream_Element_Offset;
|
|
577
|
-
Data_Len : Stream_Element_Offset; -- -1
|
|
578
|
-
Out_Len : Stream_Element_Offset; -- -1
|
|
579
|
-
begin
|
|
580
|
-
Out_First := Out_Last + 1;
|
|
581
|
-
|
|
582
|
-
if Data_First > Data'Last then
|
|
583
|
-
return;
|
|
584
|
-
end if;
|
|
585
|
-
|
|
586
|
-
Data_Len := Data'Last - Data_First;
|
|
587
|
-
Out_Len := Out_Data'Last - Out_First;
|
|
588
|
-
|
|
589
|
-
if Data_Len <= Out_Len then
|
|
590
|
-
Out_Last := Out_First + Data_Len;
|
|
591
|
-
Data_Last := Data'Last;
|
|
592
|
-
else
|
|
593
|
-
Out_Last := Out_Data'Last;
|
|
594
|
-
Data_Last := Data_First + Out_Len;
|
|
595
|
-
end if;
|
|
596
|
-
|
|
597
|
-
Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last);
|
|
598
|
-
|
|
599
|
-
Data_First := Data_Last + 1;
|
|
600
|
-
Out_First := Out_Last + 1;
|
|
601
|
-
end Add_Data;
|
|
602
|
-
|
|
603
|
-
------------
|
|
604
|
-
-- Put_32 --
|
|
605
|
-
------------
|
|
606
|
-
|
|
607
|
-
procedure Put_32
|
|
608
|
-
(Item : in out Stream_Element_Array;
|
|
609
|
-
Data : in Unsigned_32)
|
|
610
|
-
is
|
|
611
|
-
D : Unsigned_32 := Data;
|
|
612
|
-
begin
|
|
613
|
-
for J in Item'First .. Item'First + 3 loop
|
|
614
|
-
Item (J) := Stream_Element (D and 16#FF#);
|
|
615
|
-
D := Shift_Right (D, 8);
|
|
616
|
-
end loop;
|
|
617
|
-
end Put_32;
|
|
618
|
-
|
|
619
|
-
begin
|
|
620
|
-
Out_Last := Out_Data'First - 1;
|
|
621
|
-
|
|
622
|
-
if not Filter.Stream_End then
|
|
623
|
-
Add_Data (Simple_GZip_Header);
|
|
624
|
-
|
|
625
|
-
Translate_Auto
|
|
626
|
-
(Filter => Filter,
|
|
627
|
-
In_Data => In_Data,
|
|
628
|
-
In_Last => In_Last,
|
|
629
|
-
Out_Data => Out_Data (Out_First .. Out_Data'Last),
|
|
630
|
-
Out_Last => Out_Last,
|
|
631
|
-
Flush => Flush);
|
|
632
|
-
|
|
633
|
-
CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last));
|
|
634
|
-
end if;
|
|
635
|
-
|
|
636
|
-
if Filter.Stream_End and then Out_Last <= Out_Data'Last then
|
|
637
|
-
-- This detection method would work only when
|
|
638
|
-
-- Simple_GZip_Header'Last > Footer_Array'Last
|
|
639
|
-
|
|
640
|
-
if Filter.Offset = Simple_GZip_Header'Last + 1 then
|
|
641
|
-
Filter.Offset := Footer_Array'First;
|
|
642
|
-
end if;
|
|
643
|
-
|
|
644
|
-
declare
|
|
645
|
-
Footer : Footer_Array;
|
|
646
|
-
begin
|
|
647
|
-
Put_32 (Footer, Filter.CRC);
|
|
648
|
-
Put_32 (Footer (Footer'First + 4 .. Footer'Last),
|
|
649
|
-
Unsigned_32 (Total_In (Filter)));
|
|
650
|
-
Add_Data (Footer);
|
|
651
|
-
end;
|
|
652
|
-
end if;
|
|
653
|
-
end Translate_GZip;
|
|
654
|
-
|
|
655
|
-
-------------
|
|
656
|
-
-- Version --
|
|
657
|
-
-------------
|
|
658
|
-
|
|
659
|
-
function Version return String is
|
|
660
|
-
begin
|
|
661
|
-
return Interfaces.C.Strings.Value (Thin.zlibVersion);
|
|
662
|
-
end Version;
|
|
663
|
-
|
|
664
|
-
-----------
|
|
665
|
-
-- Write --
|
|
666
|
-
-----------
|
|
667
|
-
|
|
668
|
-
procedure Write
|
|
669
|
-
(Filter : in out Filter_Type;
|
|
670
|
-
Item : in Ada.Streams.Stream_Element_Array;
|
|
671
|
-
Flush : in Flush_Mode := No_Flush)
|
|
672
|
-
is
|
|
673
|
-
Buffer : Stream_Element_Array (1 .. Buffer_Size);
|
|
674
|
-
In_Last : Stream_Element_Offset;
|
|
675
|
-
Out_Last : Stream_Element_Offset;
|
|
676
|
-
In_First : Stream_Element_Offset := Item'First;
|
|
677
|
-
begin
|
|
678
|
-
if Item'Length = 0 and Flush = No_Flush then
|
|
679
|
-
return;
|
|
680
|
-
end if;
|
|
681
|
-
|
|
682
|
-
loop
|
|
683
|
-
Translate
|
|
684
|
-
(Filter => Filter,
|
|
685
|
-
In_Data => Item (In_First .. Item'Last),
|
|
686
|
-
In_Last => In_Last,
|
|
687
|
-
Out_Data => Buffer,
|
|
688
|
-
Out_Last => Out_Last,
|
|
689
|
-
Flush => Flush);
|
|
690
|
-
|
|
691
|
-
if Out_Last >= Buffer'First then
|
|
692
|
-
Write (Buffer (1 .. Out_Last));
|
|
693
|
-
end if;
|
|
694
|
-
|
|
695
|
-
exit when In_Last = Item'Last or Stream_End (Filter);
|
|
696
|
-
|
|
697
|
-
In_First := In_Last + 1;
|
|
698
|
-
end loop;
|
|
699
|
-
end Write;
|
|
700
|
-
|
|
701
|
-
end ZLib;
|
|
1
|
+
----------------------------------------------------------------
|
|
2
|
+
-- ZLib for Ada thick binding. --
|
|
3
|
+
-- --
|
|
4
|
+
-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
|
|
5
|
+
-- --
|
|
6
|
+
-- Open source license information is in the zlib.ads file. --
|
|
7
|
+
----------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
-- $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $
|
|
10
|
+
|
|
11
|
+
with Ada.Exceptions;
|
|
12
|
+
with Ada.Unchecked_Conversion;
|
|
13
|
+
with Ada.Unchecked_Deallocation;
|
|
14
|
+
|
|
15
|
+
with Interfaces.C.Strings;
|
|
16
|
+
|
|
17
|
+
with ZLib.Thin;
|
|
18
|
+
|
|
19
|
+
package body ZLib is
|
|
20
|
+
|
|
21
|
+
use type Thin.Int;
|
|
22
|
+
|
|
23
|
+
type Z_Stream is new Thin.Z_Stream;
|
|
24
|
+
|
|
25
|
+
type Return_Code_Enum is
|
|
26
|
+
(OK,
|
|
27
|
+
STREAM_END,
|
|
28
|
+
NEED_DICT,
|
|
29
|
+
ERRNO,
|
|
30
|
+
STREAM_ERROR,
|
|
31
|
+
DATA_ERROR,
|
|
32
|
+
MEM_ERROR,
|
|
33
|
+
BUF_ERROR,
|
|
34
|
+
VERSION_ERROR);
|
|
35
|
+
|
|
36
|
+
type Flate_Step_Function is access
|
|
37
|
+
function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int;
|
|
38
|
+
pragma Convention (C, Flate_Step_Function);
|
|
39
|
+
|
|
40
|
+
type Flate_End_Function is access
|
|
41
|
+
function (Ctrm : in Thin.Z_Streamp) return Thin.Int;
|
|
42
|
+
pragma Convention (C, Flate_End_Function);
|
|
43
|
+
|
|
44
|
+
type Flate_Type is record
|
|
45
|
+
Step : Flate_Step_Function;
|
|
46
|
+
Done : Flate_End_Function;
|
|
47
|
+
end record;
|
|
48
|
+
|
|
49
|
+
subtype Footer_Array is Stream_Element_Array (1 .. 8);
|
|
50
|
+
|
|
51
|
+
Simple_GZip_Header : constant Stream_Element_Array (1 .. 10)
|
|
52
|
+
:= (16#1f#, 16#8b#, -- Magic header
|
|
53
|
+
16#08#, -- Z_DEFLATED
|
|
54
|
+
16#00#, -- Flags
|
|
55
|
+
16#00#, 16#00#, 16#00#, 16#00#, -- Time
|
|
56
|
+
16#00#, -- XFlags
|
|
57
|
+
16#03# -- OS code
|
|
58
|
+
);
|
|
59
|
+
-- The simplest gzip header is not for informational, but just for
|
|
60
|
+
-- gzip format compatibility.
|
|
61
|
+
-- Note that some code below is using assumption
|
|
62
|
+
-- Simple_GZip_Header'Last > Footer_Array'Last, so do not make
|
|
63
|
+
-- Simple_GZip_Header'Last <= Footer_Array'Last.
|
|
64
|
+
|
|
65
|
+
Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum
|
|
66
|
+
:= (0 => OK,
|
|
67
|
+
1 => STREAM_END,
|
|
68
|
+
2 => NEED_DICT,
|
|
69
|
+
-1 => ERRNO,
|
|
70
|
+
-2 => STREAM_ERROR,
|
|
71
|
+
-3 => DATA_ERROR,
|
|
72
|
+
-4 => MEM_ERROR,
|
|
73
|
+
-5 => BUF_ERROR,
|
|
74
|
+
-6 => VERSION_ERROR);
|
|
75
|
+
|
|
76
|
+
Flate : constant array (Boolean) of Flate_Type
|
|
77
|
+
:= (True => (Step => Thin.Deflate'Access,
|
|
78
|
+
Done => Thin.DeflateEnd'Access),
|
|
79
|
+
False => (Step => Thin.Inflate'Access,
|
|
80
|
+
Done => Thin.InflateEnd'Access));
|
|
81
|
+
|
|
82
|
+
Flush_Finish : constant array (Boolean) of Flush_Mode
|
|
83
|
+
:= (True => Finish, False => No_Flush);
|
|
84
|
+
|
|
85
|
+
procedure Raise_Error (Stream : in Z_Stream);
|
|
86
|
+
pragma Inline (Raise_Error);
|
|
87
|
+
|
|
88
|
+
procedure Raise_Error (Message : in String);
|
|
89
|
+
pragma Inline (Raise_Error);
|
|
90
|
+
|
|
91
|
+
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int);
|
|
92
|
+
|
|
93
|
+
procedure Free is new Ada.Unchecked_Deallocation
|
|
94
|
+
(Z_Stream, Z_Stream_Access);
|
|
95
|
+
|
|
96
|
+
function To_Thin_Access is new Ada.Unchecked_Conversion
|
|
97
|
+
(Z_Stream_Access, Thin.Z_Streamp);
|
|
98
|
+
|
|
99
|
+
procedure Translate_GZip
|
|
100
|
+
(Filter : in out Filter_Type;
|
|
101
|
+
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
102
|
+
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
103
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
104
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
105
|
+
Flush : in Flush_Mode);
|
|
106
|
+
-- Separate translate routine for make gzip header.
|
|
107
|
+
|
|
108
|
+
procedure Translate_Auto
|
|
109
|
+
(Filter : in out Filter_Type;
|
|
110
|
+
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
111
|
+
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
112
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
113
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
114
|
+
Flush : in Flush_Mode);
|
|
115
|
+
-- translate routine without additional headers.
|
|
116
|
+
|
|
117
|
+
-----------------
|
|
118
|
+
-- Check_Error --
|
|
119
|
+
-----------------
|
|
120
|
+
|
|
121
|
+
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is
|
|
122
|
+
use type Thin.Int;
|
|
123
|
+
begin
|
|
124
|
+
if Code /= Thin.Z_OK then
|
|
125
|
+
Raise_Error
|
|
126
|
+
(Return_Code_Enum'Image (Return_Code (Code))
|
|
127
|
+
& ": " & Last_Error_Message (Stream));
|
|
128
|
+
end if;
|
|
129
|
+
end Check_Error;
|
|
130
|
+
|
|
131
|
+
-----------
|
|
132
|
+
-- Close --
|
|
133
|
+
-----------
|
|
134
|
+
|
|
135
|
+
procedure Close
|
|
136
|
+
(Filter : in out Filter_Type;
|
|
137
|
+
Ignore_Error : in Boolean := False)
|
|
138
|
+
is
|
|
139
|
+
Code : Thin.Int;
|
|
140
|
+
begin
|
|
141
|
+
if not Ignore_Error and then not Is_Open (Filter) then
|
|
142
|
+
raise Status_Error;
|
|
143
|
+
end if;
|
|
144
|
+
|
|
145
|
+
Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm));
|
|
146
|
+
|
|
147
|
+
if Ignore_Error or else Code = Thin.Z_OK then
|
|
148
|
+
Free (Filter.Strm);
|
|
149
|
+
else
|
|
150
|
+
declare
|
|
151
|
+
Error_Message : constant String
|
|
152
|
+
:= Last_Error_Message (Filter.Strm.all);
|
|
153
|
+
begin
|
|
154
|
+
Free (Filter.Strm);
|
|
155
|
+
Ada.Exceptions.Raise_Exception
|
|
156
|
+
(ZLib_Error'Identity,
|
|
157
|
+
Return_Code_Enum'Image (Return_Code (Code))
|
|
158
|
+
& ": " & Error_Message);
|
|
159
|
+
end;
|
|
160
|
+
end if;
|
|
161
|
+
end Close;
|
|
162
|
+
|
|
163
|
+
-----------
|
|
164
|
+
-- CRC32 --
|
|
165
|
+
-----------
|
|
166
|
+
|
|
167
|
+
function CRC32
|
|
168
|
+
(CRC : in Unsigned_32;
|
|
169
|
+
Data : in Ada.Streams.Stream_Element_Array)
|
|
170
|
+
return Unsigned_32
|
|
171
|
+
is
|
|
172
|
+
use Thin;
|
|
173
|
+
begin
|
|
174
|
+
return Unsigned_32 (crc32 (ULong (CRC),
|
|
175
|
+
Data'Address,
|
|
176
|
+
Data'Length));
|
|
177
|
+
end CRC32;
|
|
178
|
+
|
|
179
|
+
procedure CRC32
|
|
180
|
+
(CRC : in out Unsigned_32;
|
|
181
|
+
Data : in Ada.Streams.Stream_Element_Array) is
|
|
182
|
+
begin
|
|
183
|
+
CRC := CRC32 (CRC, Data);
|
|
184
|
+
end CRC32;
|
|
185
|
+
|
|
186
|
+
------------------
|
|
187
|
+
-- Deflate_Init --
|
|
188
|
+
------------------
|
|
189
|
+
|
|
190
|
+
procedure Deflate_Init
|
|
191
|
+
(Filter : in out Filter_Type;
|
|
192
|
+
Level : in Compression_Level := Default_Compression;
|
|
193
|
+
Strategy : in Strategy_Type := Default_Strategy;
|
|
194
|
+
Method : in Compression_Method := Deflated;
|
|
195
|
+
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
|
|
196
|
+
Memory_Level : in Memory_Level_Type := Default_Memory_Level;
|
|
197
|
+
Header : in Header_Type := Default)
|
|
198
|
+
is
|
|
199
|
+
use type Thin.Int;
|
|
200
|
+
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
|
|
201
|
+
begin
|
|
202
|
+
if Is_Open (Filter) then
|
|
203
|
+
raise Status_Error;
|
|
204
|
+
end if;
|
|
205
|
+
|
|
206
|
+
-- We allow ZLib to make header only in case of default header type.
|
|
207
|
+
-- Otherwise we would either do header by ourselves, or do not do
|
|
208
|
+
-- header at all.
|
|
209
|
+
|
|
210
|
+
if Header = None or else Header = GZip then
|
|
211
|
+
Win_Bits := -Win_Bits;
|
|
212
|
+
end if;
|
|
213
|
+
|
|
214
|
+
-- For the GZip CRC calculation and make headers.
|
|
215
|
+
|
|
216
|
+
if Header = GZip then
|
|
217
|
+
Filter.CRC := 0;
|
|
218
|
+
Filter.Offset := Simple_GZip_Header'First;
|
|
219
|
+
else
|
|
220
|
+
Filter.Offset := Simple_GZip_Header'Last + 1;
|
|
221
|
+
end if;
|
|
222
|
+
|
|
223
|
+
Filter.Strm := new Z_Stream;
|
|
224
|
+
Filter.Compression := True;
|
|
225
|
+
Filter.Stream_End := False;
|
|
226
|
+
Filter.Header := Header;
|
|
227
|
+
|
|
228
|
+
if Thin.Deflate_Init
|
|
229
|
+
(To_Thin_Access (Filter.Strm),
|
|
230
|
+
Level => Thin.Int (Level),
|
|
231
|
+
method => Thin.Int (Method),
|
|
232
|
+
windowBits => Win_Bits,
|
|
233
|
+
memLevel => Thin.Int (Memory_Level),
|
|
234
|
+
strategy => Thin.Int (Strategy)) /= Thin.Z_OK
|
|
235
|
+
then
|
|
236
|
+
Raise_Error (Filter.Strm.all);
|
|
237
|
+
end if;
|
|
238
|
+
end Deflate_Init;
|
|
239
|
+
|
|
240
|
+
-----------
|
|
241
|
+
-- Flush --
|
|
242
|
+
-----------
|
|
243
|
+
|
|
244
|
+
procedure Flush
|
|
245
|
+
(Filter : in out Filter_Type;
|
|
246
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
247
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
248
|
+
Flush : in Flush_Mode)
|
|
249
|
+
is
|
|
250
|
+
No_Data : Stream_Element_Array := (1 .. 0 => 0);
|
|
251
|
+
Last : Stream_Element_Offset;
|
|
252
|
+
begin
|
|
253
|
+
Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush);
|
|
254
|
+
end Flush;
|
|
255
|
+
|
|
256
|
+
-----------------------
|
|
257
|
+
-- Generic_Translate --
|
|
258
|
+
-----------------------
|
|
259
|
+
|
|
260
|
+
procedure Generic_Translate
|
|
261
|
+
(Filter : in out ZLib.Filter_Type;
|
|
262
|
+
In_Buffer_Size : in Integer := Default_Buffer_Size;
|
|
263
|
+
Out_Buffer_Size : in Integer := Default_Buffer_Size)
|
|
264
|
+
is
|
|
265
|
+
In_Buffer : Stream_Element_Array
|
|
266
|
+
(1 .. Stream_Element_Offset (In_Buffer_Size));
|
|
267
|
+
Out_Buffer : Stream_Element_Array
|
|
268
|
+
(1 .. Stream_Element_Offset (Out_Buffer_Size));
|
|
269
|
+
Last : Stream_Element_Offset;
|
|
270
|
+
In_Last : Stream_Element_Offset;
|
|
271
|
+
In_First : Stream_Element_Offset;
|
|
272
|
+
Out_Last : Stream_Element_Offset;
|
|
273
|
+
begin
|
|
274
|
+
Main : loop
|
|
275
|
+
Data_In (In_Buffer, Last);
|
|
276
|
+
|
|
277
|
+
In_First := In_Buffer'First;
|
|
278
|
+
|
|
279
|
+
loop
|
|
280
|
+
Translate
|
|
281
|
+
(Filter => Filter,
|
|
282
|
+
In_Data => In_Buffer (In_First .. Last),
|
|
283
|
+
In_Last => In_Last,
|
|
284
|
+
Out_Data => Out_Buffer,
|
|
285
|
+
Out_Last => Out_Last,
|
|
286
|
+
Flush => Flush_Finish (Last < In_Buffer'First));
|
|
287
|
+
|
|
288
|
+
if Out_Buffer'First <= Out_Last then
|
|
289
|
+
Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last));
|
|
290
|
+
end if;
|
|
291
|
+
|
|
292
|
+
exit Main when Stream_End (Filter);
|
|
293
|
+
|
|
294
|
+
-- The end of in buffer.
|
|
295
|
+
|
|
296
|
+
exit when In_Last = Last;
|
|
297
|
+
|
|
298
|
+
In_First := In_Last + 1;
|
|
299
|
+
end loop;
|
|
300
|
+
end loop Main;
|
|
301
|
+
|
|
302
|
+
end Generic_Translate;
|
|
303
|
+
|
|
304
|
+
------------------
|
|
305
|
+
-- Inflate_Init --
|
|
306
|
+
------------------
|
|
307
|
+
|
|
308
|
+
procedure Inflate_Init
|
|
309
|
+
(Filter : in out Filter_Type;
|
|
310
|
+
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
|
|
311
|
+
Header : in Header_Type := Default)
|
|
312
|
+
is
|
|
313
|
+
use type Thin.Int;
|
|
314
|
+
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
|
|
315
|
+
|
|
316
|
+
procedure Check_Version;
|
|
317
|
+
-- Check the latest header types compatibility.
|
|
318
|
+
|
|
319
|
+
procedure Check_Version is
|
|
320
|
+
begin
|
|
321
|
+
if Version <= "1.1.4" then
|
|
322
|
+
Raise_Error
|
|
323
|
+
("Inflate header type " & Header_Type'Image (Header)
|
|
324
|
+
& " incompatible with ZLib version " & Version);
|
|
325
|
+
end if;
|
|
326
|
+
end Check_Version;
|
|
327
|
+
|
|
328
|
+
begin
|
|
329
|
+
if Is_Open (Filter) then
|
|
330
|
+
raise Status_Error;
|
|
331
|
+
end if;
|
|
332
|
+
|
|
333
|
+
case Header is
|
|
334
|
+
when None =>
|
|
335
|
+
Check_Version;
|
|
336
|
+
|
|
337
|
+
-- Inflate data without headers determined
|
|
338
|
+
-- by negative Win_Bits.
|
|
339
|
+
|
|
340
|
+
Win_Bits := -Win_Bits;
|
|
341
|
+
when GZip =>
|
|
342
|
+
Check_Version;
|
|
343
|
+
|
|
344
|
+
-- Inflate gzip data defined by flag 16.
|
|
345
|
+
|
|
346
|
+
Win_Bits := Win_Bits + 16;
|
|
347
|
+
when Auto =>
|
|
348
|
+
Check_Version;
|
|
349
|
+
|
|
350
|
+
-- Inflate with automatic detection
|
|
351
|
+
-- of gzip or native header defined by flag 32.
|
|
352
|
+
|
|
353
|
+
Win_Bits := Win_Bits + 32;
|
|
354
|
+
when Default => null;
|
|
355
|
+
end case;
|
|
356
|
+
|
|
357
|
+
Filter.Strm := new Z_Stream;
|
|
358
|
+
Filter.Compression := False;
|
|
359
|
+
Filter.Stream_End := False;
|
|
360
|
+
Filter.Header := Header;
|
|
361
|
+
|
|
362
|
+
if Thin.Inflate_Init
|
|
363
|
+
(To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK
|
|
364
|
+
then
|
|
365
|
+
Raise_Error (Filter.Strm.all);
|
|
366
|
+
end if;
|
|
367
|
+
end Inflate_Init;
|
|
368
|
+
|
|
369
|
+
-------------
|
|
370
|
+
-- Is_Open --
|
|
371
|
+
-------------
|
|
372
|
+
|
|
373
|
+
function Is_Open (Filter : in Filter_Type) return Boolean is
|
|
374
|
+
begin
|
|
375
|
+
return Filter.Strm /= null;
|
|
376
|
+
end Is_Open;
|
|
377
|
+
|
|
378
|
+
-----------------
|
|
379
|
+
-- Raise_Error --
|
|
380
|
+
-----------------
|
|
381
|
+
|
|
382
|
+
procedure Raise_Error (Message : in String) is
|
|
383
|
+
begin
|
|
384
|
+
Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message);
|
|
385
|
+
end Raise_Error;
|
|
386
|
+
|
|
387
|
+
procedure Raise_Error (Stream : in Z_Stream) is
|
|
388
|
+
begin
|
|
389
|
+
Raise_Error (Last_Error_Message (Stream));
|
|
390
|
+
end Raise_Error;
|
|
391
|
+
|
|
392
|
+
----------
|
|
393
|
+
-- Read --
|
|
394
|
+
----------
|
|
395
|
+
|
|
396
|
+
procedure Read
|
|
397
|
+
(Filter : in out Filter_Type;
|
|
398
|
+
Item : out Ada.Streams.Stream_Element_Array;
|
|
399
|
+
Last : out Ada.Streams.Stream_Element_Offset;
|
|
400
|
+
Flush : in Flush_Mode := No_Flush)
|
|
401
|
+
is
|
|
402
|
+
In_Last : Stream_Element_Offset;
|
|
403
|
+
Item_First : Ada.Streams.Stream_Element_Offset := Item'First;
|
|
404
|
+
V_Flush : Flush_Mode := Flush;
|
|
405
|
+
|
|
406
|
+
begin
|
|
407
|
+
pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1);
|
|
408
|
+
pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last);
|
|
409
|
+
|
|
410
|
+
loop
|
|
411
|
+
if Rest_Last = Buffer'First - 1 then
|
|
412
|
+
V_Flush := Finish;
|
|
413
|
+
|
|
414
|
+
elsif Rest_First > Rest_Last then
|
|
415
|
+
Read (Buffer, Rest_Last);
|
|
416
|
+
Rest_First := Buffer'First;
|
|
417
|
+
|
|
418
|
+
if Rest_Last < Buffer'First then
|
|
419
|
+
V_Flush := Finish;
|
|
420
|
+
end if;
|
|
421
|
+
end if;
|
|
422
|
+
|
|
423
|
+
Translate
|
|
424
|
+
(Filter => Filter,
|
|
425
|
+
In_Data => Buffer (Rest_First .. Rest_Last),
|
|
426
|
+
In_Last => In_Last,
|
|
427
|
+
Out_Data => Item (Item_First .. Item'Last),
|
|
428
|
+
Out_Last => Last,
|
|
429
|
+
Flush => V_Flush);
|
|
430
|
+
|
|
431
|
+
Rest_First := In_Last + 1;
|
|
432
|
+
|
|
433
|
+
exit when Stream_End (Filter)
|
|
434
|
+
or else Last = Item'Last
|
|
435
|
+
or else (Last >= Item'First and then Allow_Read_Some);
|
|
436
|
+
|
|
437
|
+
Item_First := Last + 1;
|
|
438
|
+
end loop;
|
|
439
|
+
end Read;
|
|
440
|
+
|
|
441
|
+
----------------
|
|
442
|
+
-- Stream_End --
|
|
443
|
+
----------------
|
|
444
|
+
|
|
445
|
+
function Stream_End (Filter : in Filter_Type) return Boolean is
|
|
446
|
+
begin
|
|
447
|
+
if Filter.Header = GZip and Filter.Compression then
|
|
448
|
+
return Filter.Stream_End
|
|
449
|
+
and then Filter.Offset = Footer_Array'Last + 1;
|
|
450
|
+
else
|
|
451
|
+
return Filter.Stream_End;
|
|
452
|
+
end if;
|
|
453
|
+
end Stream_End;
|
|
454
|
+
|
|
455
|
+
--------------
|
|
456
|
+
-- Total_In --
|
|
457
|
+
--------------
|
|
458
|
+
|
|
459
|
+
function Total_In (Filter : in Filter_Type) return Count is
|
|
460
|
+
begin
|
|
461
|
+
return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all));
|
|
462
|
+
end Total_In;
|
|
463
|
+
|
|
464
|
+
---------------
|
|
465
|
+
-- Total_Out --
|
|
466
|
+
---------------
|
|
467
|
+
|
|
468
|
+
function Total_Out (Filter : in Filter_Type) return Count is
|
|
469
|
+
begin
|
|
470
|
+
return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all));
|
|
471
|
+
end Total_Out;
|
|
472
|
+
|
|
473
|
+
---------------
|
|
474
|
+
-- Translate --
|
|
475
|
+
---------------
|
|
476
|
+
|
|
477
|
+
procedure Translate
|
|
478
|
+
(Filter : in out Filter_Type;
|
|
479
|
+
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
480
|
+
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
481
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
482
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
483
|
+
Flush : in Flush_Mode) is
|
|
484
|
+
begin
|
|
485
|
+
if Filter.Header = GZip and then Filter.Compression then
|
|
486
|
+
Translate_GZip
|
|
487
|
+
(Filter => Filter,
|
|
488
|
+
In_Data => In_Data,
|
|
489
|
+
In_Last => In_Last,
|
|
490
|
+
Out_Data => Out_Data,
|
|
491
|
+
Out_Last => Out_Last,
|
|
492
|
+
Flush => Flush);
|
|
493
|
+
else
|
|
494
|
+
Translate_Auto
|
|
495
|
+
(Filter => Filter,
|
|
496
|
+
In_Data => In_Data,
|
|
497
|
+
In_Last => In_Last,
|
|
498
|
+
Out_Data => Out_Data,
|
|
499
|
+
Out_Last => Out_Last,
|
|
500
|
+
Flush => Flush);
|
|
501
|
+
end if;
|
|
502
|
+
end Translate;
|
|
503
|
+
|
|
504
|
+
--------------------
|
|
505
|
+
-- Translate_Auto --
|
|
506
|
+
--------------------
|
|
507
|
+
|
|
508
|
+
procedure Translate_Auto
|
|
509
|
+
(Filter : in out Filter_Type;
|
|
510
|
+
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
511
|
+
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
512
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
513
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
514
|
+
Flush : in Flush_Mode)
|
|
515
|
+
is
|
|
516
|
+
use type Thin.Int;
|
|
517
|
+
Code : Thin.Int;
|
|
518
|
+
|
|
519
|
+
begin
|
|
520
|
+
if not Is_Open (Filter) then
|
|
521
|
+
raise Status_Error;
|
|
522
|
+
end if;
|
|
523
|
+
|
|
524
|
+
if Out_Data'Length = 0 and then In_Data'Length = 0 then
|
|
525
|
+
raise Constraint_Error;
|
|
526
|
+
end if;
|
|
527
|
+
|
|
528
|
+
Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length);
|
|
529
|
+
Set_In (Filter.Strm.all, In_Data'Address, In_Data'Length);
|
|
530
|
+
|
|
531
|
+
Code := Flate (Filter.Compression).Step
|
|
532
|
+
(To_Thin_Access (Filter.Strm),
|
|
533
|
+
Thin.Int (Flush));
|
|
534
|
+
|
|
535
|
+
if Code = Thin.Z_STREAM_END then
|
|
536
|
+
Filter.Stream_End := True;
|
|
537
|
+
else
|
|
538
|
+
Check_Error (Filter.Strm.all, Code);
|
|
539
|
+
end if;
|
|
540
|
+
|
|
541
|
+
In_Last := In_Data'Last
|
|
542
|
+
- Stream_Element_Offset (Avail_In (Filter.Strm.all));
|
|
543
|
+
Out_Last := Out_Data'Last
|
|
544
|
+
- Stream_Element_Offset (Avail_Out (Filter.Strm.all));
|
|
545
|
+
end Translate_Auto;
|
|
546
|
+
|
|
547
|
+
--------------------
|
|
548
|
+
-- Translate_GZip --
|
|
549
|
+
--------------------
|
|
550
|
+
|
|
551
|
+
procedure Translate_GZip
|
|
552
|
+
(Filter : in out Filter_Type;
|
|
553
|
+
In_Data : in Ada.Streams.Stream_Element_Array;
|
|
554
|
+
In_Last : out Ada.Streams.Stream_Element_Offset;
|
|
555
|
+
Out_Data : out Ada.Streams.Stream_Element_Array;
|
|
556
|
+
Out_Last : out Ada.Streams.Stream_Element_Offset;
|
|
557
|
+
Flush : in Flush_Mode)
|
|
558
|
+
is
|
|
559
|
+
Out_First : Stream_Element_Offset;
|
|
560
|
+
|
|
561
|
+
procedure Add_Data (Data : in Stream_Element_Array);
|
|
562
|
+
-- Add data to stream from the Filter.Offset till necessary,
|
|
563
|
+
-- used for add gzip headr/footer.
|
|
564
|
+
|
|
565
|
+
procedure Put_32
|
|
566
|
+
(Item : in out Stream_Element_Array;
|
|
567
|
+
Data : in Unsigned_32);
|
|
568
|
+
pragma Inline (Put_32);
|
|
569
|
+
|
|
570
|
+
--------------
|
|
571
|
+
-- Add_Data --
|
|
572
|
+
--------------
|
|
573
|
+
|
|
574
|
+
procedure Add_Data (Data : in Stream_Element_Array) is
|
|
575
|
+
Data_First : Stream_Element_Offset renames Filter.Offset;
|
|
576
|
+
Data_Last : Stream_Element_Offset;
|
|
577
|
+
Data_Len : Stream_Element_Offset; -- -1
|
|
578
|
+
Out_Len : Stream_Element_Offset; -- -1
|
|
579
|
+
begin
|
|
580
|
+
Out_First := Out_Last + 1;
|
|
581
|
+
|
|
582
|
+
if Data_First > Data'Last then
|
|
583
|
+
return;
|
|
584
|
+
end if;
|
|
585
|
+
|
|
586
|
+
Data_Len := Data'Last - Data_First;
|
|
587
|
+
Out_Len := Out_Data'Last - Out_First;
|
|
588
|
+
|
|
589
|
+
if Data_Len <= Out_Len then
|
|
590
|
+
Out_Last := Out_First + Data_Len;
|
|
591
|
+
Data_Last := Data'Last;
|
|
592
|
+
else
|
|
593
|
+
Out_Last := Out_Data'Last;
|
|
594
|
+
Data_Last := Data_First + Out_Len;
|
|
595
|
+
end if;
|
|
596
|
+
|
|
597
|
+
Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last);
|
|
598
|
+
|
|
599
|
+
Data_First := Data_Last + 1;
|
|
600
|
+
Out_First := Out_Last + 1;
|
|
601
|
+
end Add_Data;
|
|
602
|
+
|
|
603
|
+
------------
|
|
604
|
+
-- Put_32 --
|
|
605
|
+
------------
|
|
606
|
+
|
|
607
|
+
procedure Put_32
|
|
608
|
+
(Item : in out Stream_Element_Array;
|
|
609
|
+
Data : in Unsigned_32)
|
|
610
|
+
is
|
|
611
|
+
D : Unsigned_32 := Data;
|
|
612
|
+
begin
|
|
613
|
+
for J in Item'First .. Item'First + 3 loop
|
|
614
|
+
Item (J) := Stream_Element (D and 16#FF#);
|
|
615
|
+
D := Shift_Right (D, 8);
|
|
616
|
+
end loop;
|
|
617
|
+
end Put_32;
|
|
618
|
+
|
|
619
|
+
begin
|
|
620
|
+
Out_Last := Out_Data'First - 1;
|
|
621
|
+
|
|
622
|
+
if not Filter.Stream_End then
|
|
623
|
+
Add_Data (Simple_GZip_Header);
|
|
624
|
+
|
|
625
|
+
Translate_Auto
|
|
626
|
+
(Filter => Filter,
|
|
627
|
+
In_Data => In_Data,
|
|
628
|
+
In_Last => In_Last,
|
|
629
|
+
Out_Data => Out_Data (Out_First .. Out_Data'Last),
|
|
630
|
+
Out_Last => Out_Last,
|
|
631
|
+
Flush => Flush);
|
|
632
|
+
|
|
633
|
+
CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last));
|
|
634
|
+
end if;
|
|
635
|
+
|
|
636
|
+
if Filter.Stream_End and then Out_Last <= Out_Data'Last then
|
|
637
|
+
-- This detection method would work only when
|
|
638
|
+
-- Simple_GZip_Header'Last > Footer_Array'Last
|
|
639
|
+
|
|
640
|
+
if Filter.Offset = Simple_GZip_Header'Last + 1 then
|
|
641
|
+
Filter.Offset := Footer_Array'First;
|
|
642
|
+
end if;
|
|
643
|
+
|
|
644
|
+
declare
|
|
645
|
+
Footer : Footer_Array;
|
|
646
|
+
begin
|
|
647
|
+
Put_32 (Footer, Filter.CRC);
|
|
648
|
+
Put_32 (Footer (Footer'First + 4 .. Footer'Last),
|
|
649
|
+
Unsigned_32 (Total_In (Filter)));
|
|
650
|
+
Add_Data (Footer);
|
|
651
|
+
end;
|
|
652
|
+
end if;
|
|
653
|
+
end Translate_GZip;
|
|
654
|
+
|
|
655
|
+
-------------
|
|
656
|
+
-- Version --
|
|
657
|
+
-------------
|
|
658
|
+
|
|
659
|
+
function Version return String is
|
|
660
|
+
begin
|
|
661
|
+
return Interfaces.C.Strings.Value (Thin.zlibVersion);
|
|
662
|
+
end Version;
|
|
663
|
+
|
|
664
|
+
-----------
|
|
665
|
+
-- Write --
|
|
666
|
+
-----------
|
|
667
|
+
|
|
668
|
+
procedure Write
|
|
669
|
+
(Filter : in out Filter_Type;
|
|
670
|
+
Item : in Ada.Streams.Stream_Element_Array;
|
|
671
|
+
Flush : in Flush_Mode := No_Flush)
|
|
672
|
+
is
|
|
673
|
+
Buffer : Stream_Element_Array (1 .. Buffer_Size);
|
|
674
|
+
In_Last : Stream_Element_Offset;
|
|
675
|
+
Out_Last : Stream_Element_Offset;
|
|
676
|
+
In_First : Stream_Element_Offset := Item'First;
|
|
677
|
+
begin
|
|
678
|
+
if Item'Length = 0 and Flush = No_Flush then
|
|
679
|
+
return;
|
|
680
|
+
end if;
|
|
681
|
+
|
|
682
|
+
loop
|
|
683
|
+
Translate
|
|
684
|
+
(Filter => Filter,
|
|
685
|
+
In_Data => Item (In_First .. Item'Last),
|
|
686
|
+
In_Last => In_Last,
|
|
687
|
+
Out_Data => Buffer,
|
|
688
|
+
Out_Last => Out_Last,
|
|
689
|
+
Flush => Flush);
|
|
690
|
+
|
|
691
|
+
if Out_Last >= Buffer'First then
|
|
692
|
+
Write (Buffer (1 .. Out_Last));
|
|
693
|
+
end if;
|
|
694
|
+
|
|
695
|
+
exit when In_Last = Item'Last or Stream_End (Filter);
|
|
696
|
+
|
|
697
|
+
In_First := In_Last + 1;
|
|
698
|
+
end loop;
|
|
699
|
+
end Write;
|
|
700
|
+
|
|
701
|
+
end ZLib;
|