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