10c16b537SWarner Losh /* 20c16b537SWarner Losh * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. 30c16b537SWarner Losh * All rights reserved. 40c16b537SWarner Losh * 50c16b537SWarner Losh * This source code is licensed under both the BSD-style license (found in the 60c16b537SWarner Losh * LICENSE file in the root directory of this source tree) and the GPLv2 (found 70c16b537SWarner Losh * in the COPYING file in the root directory of this source tree). 80c16b537SWarner Losh * You may select, at your option, one of the above-listed licenses. 90c16b537SWarner Losh */ 100c16b537SWarner Losh 110c16b537SWarner Losh 120c16b537SWarner Losh #ifndef FILEIO_H_23981798732 130c16b537SWarner Losh #define FILEIO_H_23981798732 140c16b537SWarner Losh 150c16b537SWarner Losh #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressionParameters */ 160c16b537SWarner Losh #include "zstd.h" /* ZSTD_* */ 170c16b537SWarner Losh 180c16b537SWarner Losh #if defined (__cplusplus) 190c16b537SWarner Losh extern "C" { 200c16b537SWarner Losh #endif 210c16b537SWarner Losh 220c16b537SWarner Losh 230c16b537SWarner Losh /* ************************************* 240c16b537SWarner Losh * Special i/o constants 250c16b537SWarner Losh **************************************/ 260c16b537SWarner Losh #define stdinmark "/*stdin*\\" 270c16b537SWarner Losh #define stdoutmark "/*stdout*\\" 280c16b537SWarner Losh #ifdef _WIN32 290c16b537SWarner Losh # define nulmark "nul" 300c16b537SWarner Losh #else 310c16b537SWarner Losh # define nulmark "/dev/null" 320c16b537SWarner Losh #endif 330c16b537SWarner Losh #define LZMA_EXTENSION ".lzma" 340c16b537SWarner Losh #define XZ_EXTENSION ".xz" 350c16b537SWarner Losh #define GZ_EXTENSION ".gz" 360c16b537SWarner Losh #define ZSTD_EXTENSION ".zst" 370c16b537SWarner Losh #define LZ4_EXTENSION ".lz4" 380c16b537SWarner Losh 390c16b537SWarner Losh 400c16b537SWarner Losh /*-************************************* 410c16b537SWarner Losh * Types 420c16b537SWarner Losh ***************************************/ 430c16b537SWarner Losh typedef enum { FIO_zstdCompression, FIO_gzipCompression, FIO_xzCompression, FIO_lzmaCompression, FIO_lz4Compression } FIO_compressionType_t; 440c16b537SWarner Losh 45*2b9c00cbSConrad Meyer typedef struct FIO_prefs_s FIO_prefs_t; 46*2b9c00cbSConrad Meyer 47*2b9c00cbSConrad Meyer FIO_prefs_t* FIO_createPreferences(void); 48*2b9c00cbSConrad Meyer void FIO_freePreferences(FIO_prefs_t* const prefs); 49*2b9c00cbSConrad Meyer 50*2b9c00cbSConrad Meyer typedef struct FIO_display_prefs_s FIO_display_prefs_t; 510c16b537SWarner Losh 520c16b537SWarner Losh /*-************************************* 530c16b537SWarner Losh * Parameters 540c16b537SWarner Losh ***************************************/ 55*2b9c00cbSConrad Meyer void FIO_setCompressionType(FIO_prefs_t* const prefs, FIO_compressionType_t compressionType); 56*2b9c00cbSConrad Meyer void FIO_overwriteMode(FIO_prefs_t* const prefs); 57*2b9c00cbSConrad Meyer void FIO_setAdaptiveMode(FIO_prefs_t* const prefs, unsigned adapt); 58*2b9c00cbSConrad Meyer void FIO_setAdaptMin(FIO_prefs_t* const prefs, int minCLevel); 59*2b9c00cbSConrad Meyer void FIO_setAdaptMax(FIO_prefs_t* const prefs, int maxCLevel); 60*2b9c00cbSConrad Meyer void FIO_setBlockSize(FIO_prefs_t* const prefs, int blockSize); 61*2b9c00cbSConrad Meyer void FIO_setChecksumFlag(FIO_prefs_t* const prefs, int checksumFlag); 62*2b9c00cbSConrad Meyer void FIO_setDictIDFlag(FIO_prefs_t* const prefs, int dictIDFlag); 63*2b9c00cbSConrad Meyer void FIO_setLdmBucketSizeLog(FIO_prefs_t* const prefs, int ldmBucketSizeLog); 64*2b9c00cbSConrad Meyer void FIO_setLdmFlag(FIO_prefs_t* const prefs, unsigned ldmFlag); 65*2b9c00cbSConrad Meyer void FIO_setLdmHashRateLog(FIO_prefs_t* const prefs, int ldmHashRateLog); 66*2b9c00cbSConrad Meyer void FIO_setLdmHashLog(FIO_prefs_t* const prefs, int ldmHashLog); 67*2b9c00cbSConrad Meyer void FIO_setLdmMinMatch(FIO_prefs_t* const prefs, int ldmMinMatch); 68*2b9c00cbSConrad Meyer void FIO_setMemLimit(FIO_prefs_t* const prefs, unsigned memLimit); 69*2b9c00cbSConrad Meyer void FIO_setNbWorkers(FIO_prefs_t* const prefs, int nbWorkers); 70*2b9c00cbSConrad Meyer void FIO_setOverlapLog(FIO_prefs_t* const prefs, int overlapLog); 71*2b9c00cbSConrad Meyer void FIO_setRemoveSrcFile(FIO_prefs_t* const prefs, unsigned flag); 72*2b9c00cbSConrad Meyer void FIO_setSparseWrite(FIO_prefs_t* const prefs, unsigned sparse); /**< 0: no sparse; 1: disable on stdout; 2: always enabled */ 73*2b9c00cbSConrad Meyer void FIO_setRsyncable(FIO_prefs_t* const prefs, int rsyncable); 74*2b9c00cbSConrad Meyer void FIO_setLiteralCompressionMode( 75*2b9c00cbSConrad Meyer FIO_prefs_t* const prefs, 76*2b9c00cbSConrad Meyer ZSTD_literalCompressionMode_e mode); 770c16b537SWarner Losh 78*2b9c00cbSConrad Meyer void FIO_setNoProgress(unsigned noProgress); 79*2b9c00cbSConrad Meyer void FIO_setNotificationLevel(int level); 800c16b537SWarner Losh 810c16b537SWarner Losh /*-************************************* 820c16b537SWarner Losh * Single File functions 830c16b537SWarner Losh ***************************************/ 840c16b537SWarner Losh /** FIO_compressFilename() : 850c16b537SWarner Losh @return : 0 == ok; 1 == pb with src file. */ 86*2b9c00cbSConrad Meyer int FIO_compressFilename (FIO_prefs_t* const prefs, 87*2b9c00cbSConrad Meyer const char* outfilename, const char* infilename, const char* dictFileName, 880f743729SConrad Meyer int compressionLevel, ZSTD_compressionParameters comprParams); 890c16b537SWarner Losh 900c16b537SWarner Losh /** FIO_decompressFilename() : 910c16b537SWarner Losh @return : 0 == ok; 1 == pb with src file. */ 92*2b9c00cbSConrad Meyer int FIO_decompressFilename (FIO_prefs_t* const prefs, 93*2b9c00cbSConrad Meyer const char* outfilename, const char* infilename, const char* dictFileName); 940c16b537SWarner Losh 950c16b537SWarner Losh int FIO_listMultipleFiles(unsigned numFiles, const char** filenameTable, int displayLevel); 960c16b537SWarner Losh 970f743729SConrad Meyer 980c16b537SWarner Losh /*-************************************* 990c16b537SWarner Losh * Multiple File functions 1000c16b537SWarner Losh ***************************************/ 1010c16b537SWarner Losh /** FIO_compressMultipleFilenames() : 1020c16b537SWarner Losh @return : nb of missing files */ 103*2b9c00cbSConrad Meyer int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs, 104*2b9c00cbSConrad Meyer const char** srcNamesTable, unsigned nbFiles, 105052d3c12SConrad Meyer const char* outFileName, const char* suffix, 1060c16b537SWarner Losh const char* dictFileName, int compressionLevel, 1070f743729SConrad Meyer ZSTD_compressionParameters comprParams); 1080c16b537SWarner Losh 1090c16b537SWarner Losh /** FIO_decompressMultipleFilenames() : 1100c16b537SWarner Losh @return : nb of missing or skipped files */ 111*2b9c00cbSConrad Meyer int FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs, 112*2b9c00cbSConrad Meyer const char** srcNamesTable, unsigned nbFiles, 113052d3c12SConrad Meyer const char* outFileName, 1140c16b537SWarner Losh const char* dictFileName); 1150c16b537SWarner Losh 1160c16b537SWarner Losh 1170f743729SConrad Meyer /*-************************************* 1180f743729SConrad Meyer * Advanced stuff (should actually be hosted elsewhere) 1190f743729SConrad Meyer ***************************************/ 1200f743729SConrad Meyer 1210f743729SConrad Meyer /* custom crash signal handler */ 1220f743729SConrad Meyer void FIO_addAbortHandler(void); 1230f743729SConrad Meyer 1240f743729SConrad Meyer 1250f743729SConrad Meyer 1260c16b537SWarner Losh #if defined (__cplusplus) 1270c16b537SWarner Losh } 1280c16b537SWarner Losh #endif 1290c16b537SWarner Losh 1300c16b537SWarner Losh #endif /* FILEIO_H_23981798732 */ 131