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