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