1 /* 2 LZ4io.h - LZ4 File/Stream Interface 3 Copyright (C) Yann Collet 2011-2023 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 /* ****************** Processing ********************* */ 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_setNbWorkers(LZ4IO_prefs_t* const prefs, int nbWorkers); 79 int LZ4IO_defaultNbWorkers(void); 80 81 int LZ4IO_setDictionaryFilename(LZ4IO_prefs_t* const prefs, const char* dictionaryFilename); 82 83 /* Default setting : passThrough = 0; 84 return : passThrough mode (0/1) */ 85 int LZ4IO_setPassThrough(LZ4IO_prefs_t* const prefs, int yes); 86 87 /* Default setting : overwrite = 1; 88 return : overwrite mode (0/1) */ 89 int LZ4IO_setOverwrite(LZ4IO_prefs_t* const prefs, int yes); 90 91 /* Default setting : testMode = 0; 92 return : testMode (0/1) */ 93 int LZ4IO_setTestMode(LZ4IO_prefs_t* const prefs, int yes); 94 95 /* blockSizeID : valid values : 4-5-6-7 96 return : 0 if error, blockSize if OK */ 97 size_t LZ4IO_setBlockSizeID(LZ4IO_prefs_t* const prefs, unsigned blockSizeID); 98 99 /* blockSize : valid values : 32 -> 4MB 100 return : 0 if error, actual blocksize if OK */ 101 size_t LZ4IO_setBlockSize(LZ4IO_prefs_t* const prefs, size_t blockSize); 102 103 /* Default setting : independent blocks */ 104 typedef enum { LZ4IO_blockLinked=0, LZ4IO_blockIndependent} LZ4IO_blockMode_t; 105 int LZ4IO_setBlockMode(LZ4IO_prefs_t* const prefs, LZ4IO_blockMode_t blockMode); 106 107 /* Default setting : no block checksum */ 108 int LZ4IO_setBlockChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 109 110 /* Default setting : stream checksum enabled */ 111 int LZ4IO_setStreamChecksumMode(LZ4IO_prefs_t* const prefs, int xxhash); 112 113 /* Default setting : 0 (no notification) */ 114 int LZ4IO_setNotificationLevel(int level); 115 116 /* Default setting : 0 (disabled) */ 117 int LZ4IO_setSparseFile(LZ4IO_prefs_t* const prefs, int enable); 118 119 /* Default setting : 0 == no content size present in frame header */ 120 int LZ4IO_setContentSize(LZ4IO_prefs_t* const prefs, int enable); 121 122 /* Default setting : 0 == src file preserved */ 123 void LZ4IO_setRemoveSrcFile(LZ4IO_prefs_t* const prefs, unsigned flag); 124 125 /* Default setting : 0 == favor compression ratio 126 * Note : 1 only works for high compression levels (10+) */ 127 void LZ4IO_favorDecSpeed(LZ4IO_prefs_t* const prefs, int favor); 128 129 130 /* implement --list 131 * @return 0 on success, 1 on error */ 132 int LZ4IO_displayCompressedFilesInfo(const char** inFileNames, size_t ifnIdx); 133 134 135 #endif /* LZ4IO_H_237902873 */ 136