xref: /dflybsd-src/contrib/zstd/programs/fileio.h (revision a28cd43d19e8b720a6c852a4bbc5ae147a26165a)
1*a28cd43dSSascha Wildner /*
2*a28cd43dSSascha Wildner  * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
3*a28cd43dSSascha Wildner  * All rights reserved.
4*a28cd43dSSascha Wildner  *
5*a28cd43dSSascha Wildner  * This source code is licensed under both the BSD-style license (found in the
6*a28cd43dSSascha Wildner  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*a28cd43dSSascha Wildner  * in the COPYING file in the root directory of this source tree).
8*a28cd43dSSascha Wildner  * You may select, at your option, one of the above-listed licenses.
9*a28cd43dSSascha Wildner  */
10*a28cd43dSSascha Wildner 
11*a28cd43dSSascha Wildner 
12*a28cd43dSSascha Wildner #ifndef FILEIO_H_23981798732
13*a28cd43dSSascha Wildner #define FILEIO_H_23981798732
14*a28cd43dSSascha Wildner 
15*a28cd43dSSascha Wildner #define ZSTD_STATIC_LINKING_ONLY   /* ZSTD_compressionParameters */
16*a28cd43dSSascha Wildner #include "../lib/zstd.h"           /* ZSTD_* */
17*a28cd43dSSascha Wildner 
18*a28cd43dSSascha Wildner #if defined (__cplusplus)
19*a28cd43dSSascha Wildner extern "C" {
20*a28cd43dSSascha Wildner #endif
21*a28cd43dSSascha Wildner 
22*a28cd43dSSascha Wildner 
23*a28cd43dSSascha Wildner /* *************************************
24*a28cd43dSSascha Wildner *  Special i/o constants
25*a28cd43dSSascha Wildner **************************************/
26*a28cd43dSSascha Wildner #define stdinmark  "/*stdin*\\"
27*a28cd43dSSascha Wildner #define stdoutmark "/*stdout*\\"
28*a28cd43dSSascha Wildner #ifdef _WIN32
29*a28cd43dSSascha Wildner #  define nulmark "NUL"
30*a28cd43dSSascha Wildner #else
31*a28cd43dSSascha Wildner #  define nulmark "/dev/null"
32*a28cd43dSSascha Wildner #endif
33*a28cd43dSSascha Wildner 
34*a28cd43dSSascha Wildner /**
35*a28cd43dSSascha Wildner  * We test whether the extension we found starts with 't', and if so, we append
36*a28cd43dSSascha Wildner  * ".tar" to the end of the output name.
37*a28cd43dSSascha Wildner  */
38*a28cd43dSSascha Wildner #define LZMA_EXTENSION  ".lzma"
39*a28cd43dSSascha Wildner #define XZ_EXTENSION    ".xz"
40*a28cd43dSSascha Wildner #define TXZ_EXTENSION   ".txz"
41*a28cd43dSSascha Wildner 
42*a28cd43dSSascha Wildner #define GZ_EXTENSION    ".gz"
43*a28cd43dSSascha Wildner #define TGZ_EXTENSION   ".tgz"
44*a28cd43dSSascha Wildner 
45*a28cd43dSSascha Wildner #define ZSTD_EXTENSION  ".zst"
46*a28cd43dSSascha Wildner #define TZSTD_EXTENSION ".tzst"
47*a28cd43dSSascha Wildner #define ZSTD_ALT_EXTENSION  ".zstd" /* allow decompression of .zstd files */
48*a28cd43dSSascha Wildner 
49*a28cd43dSSascha Wildner #define LZ4_EXTENSION   ".lz4"
50*a28cd43dSSascha Wildner #define TLZ4_EXTENSION  ".tlz4"
51*a28cd43dSSascha Wildner 
52*a28cd43dSSascha Wildner 
53*a28cd43dSSascha Wildner /*-*************************************
54*a28cd43dSSascha Wildner *  Types
55*a28cd43dSSascha Wildner ***************************************/
56*a28cd43dSSascha Wildner typedef enum { FIO_zstdCompression, FIO_gzipCompression, FIO_xzCompression, FIO_lzmaCompression, FIO_lz4Compression } FIO_compressionType_t;
57*a28cd43dSSascha Wildner 
58*a28cd43dSSascha Wildner typedef struct FIO_prefs_s FIO_prefs_t;
59*a28cd43dSSascha Wildner 
60*a28cd43dSSascha Wildner FIO_prefs_t* FIO_createPreferences(void);
61*a28cd43dSSascha Wildner void FIO_freePreferences(FIO_prefs_t* const prefs);
62*a28cd43dSSascha Wildner 
63*a28cd43dSSascha Wildner /* Mutable struct containing relevant context and state regarding (de)compression with respect to file I/O */
64*a28cd43dSSascha Wildner typedef struct FIO_ctx_s FIO_ctx_t;
65*a28cd43dSSascha Wildner 
66*a28cd43dSSascha Wildner FIO_ctx_t* FIO_createContext(void);
67*a28cd43dSSascha Wildner void FIO_freeContext(FIO_ctx_t* const fCtx);
68*a28cd43dSSascha Wildner 
69*a28cd43dSSascha Wildner typedef struct FIO_display_prefs_s FIO_display_prefs_t;
70*a28cd43dSSascha Wildner 
71*a28cd43dSSascha Wildner /*-*************************************
72*a28cd43dSSascha Wildner *  Parameters
73*a28cd43dSSascha Wildner ***************************************/
74*a28cd43dSSascha Wildner /* FIO_prefs_t functions */
75*a28cd43dSSascha Wildner void FIO_setCompressionType(FIO_prefs_t* const prefs, FIO_compressionType_t compressionType);
76*a28cd43dSSascha Wildner void FIO_overwriteMode(FIO_prefs_t* const prefs);
77*a28cd43dSSascha Wildner void FIO_setAdaptiveMode(FIO_prefs_t* const prefs, unsigned adapt);
78*a28cd43dSSascha Wildner void FIO_setAdaptMin(FIO_prefs_t* const prefs, int minCLevel);
79*a28cd43dSSascha Wildner void FIO_setAdaptMax(FIO_prefs_t* const prefs, int maxCLevel);
80*a28cd43dSSascha Wildner void FIO_setBlockSize(FIO_prefs_t* const prefs, int blockSize);
81*a28cd43dSSascha Wildner void FIO_setChecksumFlag(FIO_prefs_t* const prefs, int checksumFlag);
82*a28cd43dSSascha Wildner void FIO_setDictIDFlag(FIO_prefs_t* const prefs, int dictIDFlag);
83*a28cd43dSSascha Wildner void FIO_setLdmBucketSizeLog(FIO_prefs_t* const prefs, int ldmBucketSizeLog);
84*a28cd43dSSascha Wildner void FIO_setLdmFlag(FIO_prefs_t* const prefs, unsigned ldmFlag);
85*a28cd43dSSascha Wildner void FIO_setLdmHashRateLog(FIO_prefs_t* const prefs, int ldmHashRateLog);
86*a28cd43dSSascha Wildner void FIO_setLdmHashLog(FIO_prefs_t* const prefs, int ldmHashLog);
87*a28cd43dSSascha Wildner void FIO_setLdmMinMatch(FIO_prefs_t* const prefs, int ldmMinMatch);
88*a28cd43dSSascha Wildner void FIO_setMemLimit(FIO_prefs_t* const prefs, unsigned memLimit);
89*a28cd43dSSascha Wildner void FIO_setNbWorkers(FIO_prefs_t* const prefs, int nbWorkers);
90*a28cd43dSSascha Wildner void FIO_setOverlapLog(FIO_prefs_t* const prefs, int overlapLog);
91*a28cd43dSSascha Wildner void FIO_setRemoveSrcFile(FIO_prefs_t* const prefs, unsigned flag);
92*a28cd43dSSascha Wildner void FIO_setSparseWrite(FIO_prefs_t* const prefs, unsigned sparse);  /**< 0: no sparse; 1: disable on stdout; 2: always enabled */
93*a28cd43dSSascha Wildner void FIO_setRsyncable(FIO_prefs_t* const prefs, int rsyncable);
94*a28cd43dSSascha Wildner void FIO_setStreamSrcSize(FIO_prefs_t* const prefs, size_t streamSrcSize);
95*a28cd43dSSascha Wildner void FIO_setTargetCBlockSize(FIO_prefs_t* const prefs, size_t targetCBlockSize);
96*a28cd43dSSascha Wildner void FIO_setSrcSizeHint(FIO_prefs_t* const prefs, size_t srcSizeHint);
97*a28cd43dSSascha Wildner void FIO_setTestMode(FIO_prefs_t* const prefs, int testMode);
98*a28cd43dSSascha Wildner void FIO_setLiteralCompressionMode(
99*a28cd43dSSascha Wildner         FIO_prefs_t* const prefs,
100*a28cd43dSSascha Wildner         ZSTD_literalCompressionMode_e mode);
101*a28cd43dSSascha Wildner 
102*a28cd43dSSascha Wildner void FIO_setNoProgress(unsigned noProgress);
103*a28cd43dSSascha Wildner void FIO_setNotificationLevel(int level);
104*a28cd43dSSascha Wildner void FIO_setExcludeCompressedFile(FIO_prefs_t* const prefs, int excludeCompressedFiles);
105*a28cd43dSSascha Wildner void FIO_setPatchFromMode(FIO_prefs_t* const prefs, int value);
106*a28cd43dSSascha Wildner void FIO_setContentSize(FIO_prefs_t* const prefs, int value);
107*a28cd43dSSascha Wildner 
108*a28cd43dSSascha Wildner /* FIO_ctx_t functions */
109*a28cd43dSSascha Wildner void FIO_setNbFilesTotal(FIO_ctx_t* const fCtx, int value);
110*a28cd43dSSascha Wildner void FIO_setHasStdoutOutput(FIO_ctx_t* const fCtx, int value);
111*a28cd43dSSascha Wildner void FIO_determineHasStdinInput(FIO_ctx_t* const fCtx, const FileNamesTable* const filenames);
112*a28cd43dSSascha Wildner 
113*a28cd43dSSascha Wildner /*-*************************************
114*a28cd43dSSascha Wildner *  Single File functions
115*a28cd43dSSascha Wildner ***************************************/
116*a28cd43dSSascha Wildner /** FIO_compressFilename() :
117*a28cd43dSSascha Wildner  * @return : 0 == ok;  1 == pb with src file. */
118*a28cd43dSSascha Wildner int FIO_compressFilename (FIO_ctx_t* const fCtx, FIO_prefs_t* const prefs,
119*a28cd43dSSascha Wildner                           const char* outfilename, const char* infilename,
120*a28cd43dSSascha Wildner                           const char* dictFileName, int compressionLevel,
121*a28cd43dSSascha Wildner                           ZSTD_compressionParameters comprParams);
122*a28cd43dSSascha Wildner 
123*a28cd43dSSascha Wildner /** FIO_decompressFilename() :
124*a28cd43dSSascha Wildner  * @return : 0 == ok;  1 == pb with src file. */
125*a28cd43dSSascha Wildner int FIO_decompressFilename (FIO_ctx_t* const fCtx, FIO_prefs_t* const prefs,
126*a28cd43dSSascha Wildner                             const char* outfilename, const char* infilename, const char* dictFileName);
127*a28cd43dSSascha Wildner 
128*a28cd43dSSascha Wildner int FIO_listMultipleFiles(unsigned numFiles, const char** filenameTable, int displayLevel);
129*a28cd43dSSascha Wildner 
130*a28cd43dSSascha Wildner 
131*a28cd43dSSascha Wildner /*-*************************************
132*a28cd43dSSascha Wildner *  Multiple File functions
133*a28cd43dSSascha Wildner ***************************************/
134*a28cd43dSSascha Wildner /** FIO_compressMultipleFilenames() :
135*a28cd43dSSascha Wildner  * @return : nb of missing files */
136*a28cd43dSSascha Wildner int FIO_compressMultipleFilenames(FIO_ctx_t* const fCtx,
137*a28cd43dSSascha Wildner                                   FIO_prefs_t* const prefs,
138*a28cd43dSSascha Wildner                                   const char** inFileNamesTable,
139*a28cd43dSSascha Wildner                                   const char* outMirroredDirName,
140*a28cd43dSSascha Wildner                                   const char* outDirName,
141*a28cd43dSSascha Wildner                                   const char* outFileName, const char* suffix,
142*a28cd43dSSascha Wildner                                   const char* dictFileName, int compressionLevel,
143*a28cd43dSSascha Wildner                                   ZSTD_compressionParameters comprParams);
144*a28cd43dSSascha Wildner 
145*a28cd43dSSascha Wildner /** FIO_decompressMultipleFilenames() :
146*a28cd43dSSascha Wildner  * @return : nb of missing or skipped files */
147*a28cd43dSSascha Wildner int FIO_decompressMultipleFilenames(FIO_ctx_t* const fCtx,
148*a28cd43dSSascha Wildner                                     FIO_prefs_t* const prefs,
149*a28cd43dSSascha Wildner                                     const char** srcNamesTable,
150*a28cd43dSSascha Wildner                                     const char* outMirroredDirName,
151*a28cd43dSSascha Wildner                                     const char* outDirName,
152*a28cd43dSSascha Wildner                                     const char* outFileName,
153*a28cd43dSSascha Wildner                                     const char* dictFileName);
154*a28cd43dSSascha Wildner 
155*a28cd43dSSascha Wildner /* FIO_checkFilenameCollisions() :
156*a28cd43dSSascha Wildner  * Checks for and warns if there are any files that would have the same output path
157*a28cd43dSSascha Wildner  */
158*a28cd43dSSascha Wildner int FIO_checkFilenameCollisions(const char** filenameTable, unsigned nbFiles);
159*a28cd43dSSascha Wildner 
160*a28cd43dSSascha Wildner 
161*a28cd43dSSascha Wildner 
162*a28cd43dSSascha Wildner /*-*************************************
163*a28cd43dSSascha Wildner *  Advanced stuff (should actually be hosted elsewhere)
164*a28cd43dSSascha Wildner ***************************************/
165*a28cd43dSSascha Wildner 
166*a28cd43dSSascha Wildner /* custom crash signal handler */
167*a28cd43dSSascha Wildner void FIO_addAbortHandler(void);
168*a28cd43dSSascha Wildner 
169*a28cd43dSSascha Wildner 
170*a28cd43dSSascha Wildner 
171*a28cd43dSSascha Wildner #if defined (__cplusplus)
172*a28cd43dSSascha Wildner }
173*a28cd43dSSascha Wildner #endif
174*a28cd43dSSascha Wildner 
175*a28cd43dSSascha Wildner #endif  /* FILEIO_H_23981798732 */
176