diff --git a/Makefile.nmake b/Makefile.nmake index db14c9a..b9a3447 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -264,6 +264,7 @@ ex = \ crc_simple_test.exe \ crc64_example.exe \ igzip_example.exe \ + igzip_inflate_example.exe \ igzip_sync_flush_example.exe \ ec_simple_example.exe \ ec_piggyback_example.exe diff --git a/doc/functions.md b/doc/functions.md index c598873..46e6801 100644 --- a/doc/functions.md +++ b/doc/functions.md @@ -198,7 +198,7 @@ Examples: - [ec example] - [raid example] - [crc example] -- [igzip example] +- [igzip examples] --- @@ -207,4 +207,5 @@ Examples: [raid example]: https://github.com/intel/isa-l/blob/master/raid/xor_example.c [crc example]: https://github.com/intel/isa-l/blob/master/crc/crc64_example.c [crc combine example]: https://github.com/intel/isa-l/blob/master/examples/crc/crc_combine_example.c -[igzip example]: https://github.com/intel/isa-l/blob/master/igzip/igzip_example.c +[igzip deflate example]: https://github.com/intel/isa-l/blob/master/igzip/igzip_example.c +[igzip inflate example]: https://github.com/intel/isa-l/blob/master/igzip/igzip_inflate_example.c diff --git a/igzip/Makefile.am b/igzip/Makefile.am index 900034d..5015aa7 100644 --- a/igzip/Makefile.am +++ b/igzip/Makefile.am @@ -123,7 +123,7 @@ other_src += igzip/bitbuf2.asm \ perf_tests += igzip/adler32_perf -examples += igzip/igzip_example igzip/igzip_sync_flush_example +examples += igzip/igzip_example igzip/igzip_inflate_example igzip/igzip_sync_flush_example igzip_igzip_rand_test_LDADD = libisal.la diff --git a/igzip/igzip_inflate_example.c b/igzip/igzip_inflate_example.c new file mode 100644 index 0000000..9d40307 --- /dev/null +++ b/igzip/igzip_inflate_example.c @@ -0,0 +1,96 @@ +/********************************************************************** + Copyright(c) 2025 Intel Corporation All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************/ + +#include +#include +#include +#include "igzip_lib.h" + +#define BUF_SIZE 8192 + +struct inflate_state stream; + +int main(int argc, char *argv[]) +{ + uint8_t inbuf[BUF_SIZE], outbuf[BUF_SIZE]; + FILE *in, *out; + int ret; + int eof; + + if (argc != 3) { + fprintf(stderr, "Usage: igzip_inflate_example infile outfile\n"); + exit(0); + } + + in = fopen(argv[1], "rb"); + if (!in) { + fprintf(stderr, "Can't open %s for reading\n", argv[1]); + exit(0); + } + + out = fopen(argv[2], "wb"); + if (!out) { + fprintf(stderr, "Can't open %s for writing\n", argv[2]); + fclose(in); + exit(0); + } + + printf("igzip_inflate_example\n"); + fflush(0); + + isal_inflate_init(&stream); + + do { + stream.avail_in = (uint32_t)fread(inbuf, 1, BUF_SIZE, in); + eof = feof(in); + stream.next_in = inbuf; + + do { + stream.avail_out = BUF_SIZE; + stream.next_out = outbuf; + + ret = isal_inflate(&stream); + + if (ret != ISAL_DECOMP_OK && ret != ISAL_END_INPUT) { + fprintf(stderr, "Decompression error: %d\n", ret); + fclose(out); + fclose(in); + return 1; + } + + fwrite(outbuf, 1, BUF_SIZE - stream.avail_out, out); + } while (stream.avail_out == 0); + } while (eof == 0); + + fclose(out); + fclose(in); + + printf("End of igzip_inflate_example\n\n"); + return 0; +} diff --git a/tools/test_extended.sh b/tools/test_extended.sh index f08ba04..c75a7dd 100755 --- a/tools/test_extended.sh +++ b/tools/test_extended.sh @@ -152,6 +152,9 @@ test_end "xor_example" $? test_start "igzip_example" ./igzip_example ${in_file} ${in_file}.cmp test_end "igzip_example" $? +test_start "igzip_inflate_example" +./igzip_inflate_example ${in_file}.cmp ${in_file} +test_end "igzip_inflate_example" $? rm -rf ${in_file}.cmp msg+=$'Examples run: Pass\n'