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 61 /* ************************************************** */ 62 /* ****************** Functions ********************* */ 63 /* ************************************************** */ 64 65 /* if output_filename == stdoutmark, writes to stdout */ 66 int LZ4IO_compressFilename(const char* input_filename, const char* output_filename, int compressionlevel, const LZ4IO_prefs_t* prefs); 67 int LZ4IO_decompressFilename(const char* input_filename, const char* output_filename, const LZ4IO_prefs_t* prefs); 68 69 /* if suffix == stdoutmark, writes to stdout */ 70 int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, int compressionlevel, const LZ4IO_prefs_t* prefs); 71 int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, const LZ4IO_prefs_t* prefs); 72 73 74 /* ************************************************** */ 75 /* ****************** Parameters ******************** */ 76 /* ************************************************** */ 77 78 int LZ4IO_setDictionaryFilename(LZ4IO_prefs_t* const prefs, const char* dictionaryFilename); 79 80 /* Default setting : passThrough = 0; 81 return : passThrough mode (0/1) */ 82 int LZ4IO_setPassThrough(LZ4IO_prefs_t* const prefs, int yes); 83 84 /* Default setting : overwrite = 1; 85 return : overwrite mode (0/1) */ 86 int LZ4IO_setOverwrite(LZ4IO_prefs_t* const prefs, int yes); 87 88 /* Default setting : testMode = 0; 89 return : testMode (0/1) */ 90 int LZ4IO_setTestMode(LZ4IO_prefs_t* const prefs, int yes); 91 92 /* blockSizeID : valid values : 4-5-6-7 93 return : 0 if error, blockSize if OK */ 94 size_t LZ4IO_setBlockSizeID(LZ4IO_prefs_t* const prefs, unsigned blockSizeID); 95 96 /* blockSize : valid values : 32 -> 4MB 97 return : 0 if error, actual blocksize if OK */ 98 size_t LZ4IO_setBlockSize(LZ4IO_prefs_t* const prefs, size_t blockSize); 99 100 /* Default setting : independent blocks */ 101 typedef enum { LZ4IO_blockLinked=0, LZ4IO_blockIndependent} LZ4IO_blockMode_t; 102 int LZ4IO_setBlockMode(LZ4IO_prefs_t* const prefs, LZ4IO_blockMode_t blockMode); 103 104 /* Default setting : no block checksum */ 105 int LZ4IO_setBlockChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 106 107 /* Default setting : stream checksum enabled */ 108 int LZ4IO_setStreamChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 109 110 /* Default setting : 0 (no notification) */ 111 int LZ4IO_setNotificationLevel(int level); 112 113 /* Default setting : 0 (disabled) */ 114 int LZ4IO_setSparseFile(LZ4IO_prefs_t* const prefs, int enable); 115 116 /* Default setting : 0 == no content size present in frame header */ 117 int LZ4IO_setContentSize(LZ4IO_prefs_t* const prefs, int enable); 118 119 /* Default setting : 0 == src file preserved */ 120 void LZ4IO_setRemoveSrcFile(LZ4IO_prefs_t* const prefs, unsigned flag); 121 122 /* Default setting : 0 == favor compression ratio 123 * Note : 1 only works for high compression levels (10+) */ 124 void LZ4IO_favorDecSpeed(LZ4IO_prefs_t* const prefs, int favor); 125 126 127 /* implement --list 128 * @return 0 on success, 1 on error */ 129 int LZ4IO_displayCompressedFilesInfo(const char** inFileNames, size_t ifnIdx); 130 131 132 #endif /* LZ4IO_H_237902873 */ 133