static SquashStatus squash_libdeflate_compress_buffer (SquashCodec* codec, size_t* compressed_size, uint8_t compressed[HEDLEY_ARRAY_PARAM(*compressed_size)], size_t uncompressed_size, const uint8_t uncompressed[HEDLEY_ARRAY_PARAM(uncompressed_size)], SquashOptions* options) { const int level = squash_options_get_int_at (options, codec, SQUASH_LIBDEFLATE_OPT_LEVEL); struct deflate_compressor *compressor = deflate_alloc_compressor(level); *compressed_size = deflate_compress(compressor, uncompressed, uncompressed_size, compressed, *compressed_size); deflate_free_compressor(compressor); return HEDLEY_LIKELY(*compressed_size != 0) ? SQUASH_OK : squash_error (SQUASH_BUFFER_FULL); }
int libdeflate_deflate( unsigned char *dest, size_t *destLen, const unsigned char *source, size_t sourceLen, int level ){ struct deflate_compressor *comp=deflate_alloc_compressor(level); size_t siz=deflate_compress(comp,source,sourceLen,dest,*destLen); deflate_free_compressor(comp); if(!siz)return !Z_OK; *destLen=siz; return Z_OK; }
int tmain(int argc, tchar *argv[]) { struct options options; int opt_char; int i; int ret; program_invocation_name = get_filename(argv[0]); options.to_stdout = false; options.decompress = is_gunzip(); options.force = false; options.keep = false; options.compression_level = 6; options.suffix = T("gz"); while ((opt_char = tgetopt(argc, argv, optstring)) != -1) { switch (opt_char) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': options.compression_level = parse_compression_level(opt_char, toptarg); if (options.compression_level == 0) return -1; break; case 'c': options.to_stdout = true; break; case 'd': options.decompress = true; break; case 'f': options.force = true; break; case 'h': show_usage(stdout); return 0; case 'k': options.keep = true; break; case 'S': options.suffix = toptarg; break; case 'V': show_version(); return 0; default: show_usage(stderr); return 1; } } argv += toptind; argc -= toptind; if (argc == 0) { show_usage(stderr); return 1; } for (i = 0; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] == '\0') { msg("This implementation of gzip does not yet " "support reading from standard input."); return 1; } } ret = 0; if (options.decompress) { struct deflate_decompressor *d; d = alloc_decompressor(); if (d == NULL) return 1; for (i = 0; i < argc; i++) ret |= -decompress_file(d, argv[i], &options); deflate_free_decompressor(d); } else { struct deflate_compressor *c; c = alloc_compressor(options.compression_level); if (c == NULL) return 1; for (i = 0; i < argc; i++) ret |= -compress_file(c, argv[i], &options); deflate_free_compressor(c); } /* * If ret=0, there were no warnings or errors. Exit with status 0. * If ret=2, there was at least one warning. Exit with status 2. * Else, there was at least one error. Exit with status 1. */ if (ret != 0 && ret != 2) ret = 1; return ret; }