1 /* 2 LZ4io.h - LZ4 File/Stream Interface 3 Copyright (C) Yann Collet 2011-2020 4 GPL v2 License 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License along 17 with this program; if not, write to the Free Software Foundation, Inc., 18 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 20 You can contact the author at : 21 - LZ4 source repository : https://github.com/lz4/lz4 22 - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c 23 */ 24 /* 25 Note : this is stand-alone program. 26 It is not part of LZ4 compression library, it is a user code of the LZ4 library. 27 - The license of LZ4 library is BSD. 28 - The license of xxHash library is BSD. 29 - The license of this source file is GPLv2. 30 */ 31 32 #ifndef LZ4IO_H_237902873 33 #define LZ4IO_H_237902873 34 35 /*--- Dependency ---*/ 36 #include <stddef.h> /* size_t */ 37 38 39 /* ************************************************** */ 40 /* Special input/output values */ 41 /* ************************************************** */ 42 #define stdinmark "stdin" 43 #define stdoutmark "stdout" 44 #define NULL_OUTPUT "null" 45 #ifdef _WIN32 46 #define nulmark "nul" 47 #else 48 #define nulmark "/dev/null" 49 #endif 50 51 /* ************************************************** */ 52 /* ****************** Type Definitions ************** */ 53 /* ************************************************** */ 54 55 typedef struct LZ4IO_prefs_s LZ4IO_prefs_t; 56 57 LZ4IO_prefs_t* LZ4IO_defaultPreferences(void); 58 void LZ4IO_freePreferences(LZ4IO_prefs_t* prefs); 59 60 /* Size in bytes of a legacy block header in little-endian format */ 61 #define LZIO_LEGACY_BLOCK_HEADER_SIZE 4 62 63 /* ************************************************** */ 64 /* ****************** Functions ********************* */ 65 /* ************************************************** */ 66 67 /* if output_filename == stdoutmark, writes to stdout */ 68 int LZ4IO_compressFilename(const char* input_filename, const char* output_filename, int compressionlevel, const LZ4IO_prefs_t* prefs); 69 int LZ4IO_decompressFilename(const char* input_filename, const char* output_filename, const LZ4IO_prefs_t* prefs); 70 71 /* if suffix == stdoutmark, writes to stdout */ 72 int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, int compressionlevel, const LZ4IO_prefs_t* prefs); 73 int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, const LZ4IO_prefs_t* prefs); 74 75 76 /* ************************************************** */ 77 /* ****************** Parameters ******************** */ 78 /* ************************************************** */ 79 80 int LZ4IO_setDictionaryFilename(LZ4IO_prefs_t* const prefs, const char* dictionaryFilename); 81 82 /* Default setting : passThrough = 0; 83 return : passThrough mode (0/1) */ 84 int LZ4IO_setPassThrough(LZ4IO_prefs_t* const prefs, int yes); 85 86 /* Default setting : overwrite = 1; 87 return : overwrite mode (0/1) */ 88 int LZ4IO_setOverwrite(LZ4IO_prefs_t* const prefs, int yes); 89 90 /* Default setting : testMode = 0; 91 return : testMode (0/1) */ 92 int LZ4IO_setTestMode(LZ4IO_prefs_t* const prefs, int yes); 93 94 /* blockSizeID : valid values : 4-5-6-7 95 return : 0 if error, blockSize if OK */ 96 size_t LZ4IO_setBlockSizeID(LZ4IO_prefs_t* const prefs, unsigned blockSizeID); 97 98 /* blockSize : valid values : 32 -> 4MB 99 return : 0 if error, actual blocksize if OK */ 100 size_t LZ4IO_setBlockSize(LZ4IO_prefs_t* const prefs, size_t blockSize); 101 102 /* Default setting : independent blocks */ 103 typedef enum { LZ4IO_blockLinked=0, LZ4IO_blockIndependent} LZ4IO_blockMode_t; 104 int LZ4IO_setBlockMode(LZ4IO_prefs_t* const prefs, LZ4IO_blockMode_t blockMode); 105 106 /* Default setting : no block checksum */ 107 int LZ4IO_setBlockChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 108 109 /* Default setting : stream checksum enabled */ 110 int LZ4IO_setStreamChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 111 112 /* Default setting : 0 (no notification) */ 113 int LZ4IO_setNotificationLevel(int level); 114 115 /* Default setting : 0 (disabled) */ 116 int LZ4IO_setSparseFile(LZ4IO_prefs_t* const prefs, int enable); 117 118 /* Default setting : 0 == no content size present in frame header */ 119 int LZ4IO_setContentSize(LZ4IO_prefs_t* const prefs, int enable); 120 121 /* Default setting : 0 == src file preserved */ 122 void LZ4IO_setRemoveSrcFile(LZ4IO_prefs_t* const prefs, unsigned flag); 123 124 /* Default setting : 0 == favor compression ratio 125 * Note : 1 only works for high compression levels (10+) */ 126 void LZ4IO_favorDecSpeed(LZ4IO_prefs_t* const prefs, int favor); 127 128 129 /* implement --list 130 * @return 0 on success, 1 on error */ 131 int LZ4IO_displayCompressedFilesInfo(const char** inFileNames, size_t ifnIdx); 132 133 134 #endif /* LZ4IO_H_237902873 */ 135