]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
First pass at refactoring and creating new FIO_ctx_t */
authorsenhuang42 <senhuang96@fb.com>
Fri, 28 Aug 2020 15:01:04 +0000 (11:01 -0400)
committersenhuang42 <senhuang96@fb.com>
Fri, 28 Aug 2020 15:01:04 +0000 (11:01 -0400)
programs/fileio.c
programs/fileio.h
programs/zstdcli.c

index 72f716f387444435be6c041a929b20d274d70518..1ace731ebaa33045adc42355b829dc0b4a9e4aab 100644 (file)
@@ -319,8 +319,20 @@ struct FIO_prefs_s {
     int excludeCompressedFiles;
     int patchFromMode;
     int contentSize;
+};
+
+/*-*************************************
+*  Parameters: FIO_prefs_t
+***************************************/
+
+/* typedef'd to FIO_ctx_t within fileio.h */
+struct FIO_ctx_s {
+
+    /* multiple file processing info */
     int currFileIdx;
     int nbFiles;
+    size_t totalBytesInput;
+    size_t totalBytesOutput;
 };
 
 
@@ -362,8 +374,18 @@ FIO_prefs_t* FIO_createPreferences(void)
     ret->testMode = 0;
     ret->literalCompressionMode = ZSTD_lcm_auto;
     ret->excludeCompressedFiles = 0;
-    ret->nbFiles = 1;
+    return ret;
+}
+
+FIO_ctx_t* FIO_createContext(void)
+{
+    FIO_ctx_t* const ret = (FIO_ctx_t*)malloc(sizeof(FIO_ctx_t));
+    if (!ret) EXM_THROW(21, "Allocation error : not enough memory");
+
     ret->currFileIdx = 0;
+    ret->nbFiles = 1;
+    ret->totalBytesInput = 0;
+    ret->totalBytesOutput = 0;
     return ret;
 }
 
@@ -372,6 +394,11 @@ void FIO_freePreferences(FIO_prefs_t* const prefs)
     free(prefs);
 }
 
+void FIO_freeContext(FIO_ctx_t* const fCtx)
+{
+    free(fCtx);
+}
+
 
 /*-*************************************
 *  Parameters: Display Options
@@ -386,6 +413,8 @@ void FIO_setNoProgress(unsigned noProgress) { g_display_prefs.noProgress = noPro
 *  Parameters: Setters
 ***************************************/
 
+/* FIO_prefs_t functions */
+
 void FIO_setCompressionType(FIO_prefs_t* const prefs, FIO_compressionType_t compressionType) { prefs->compressionType = compressionType; }
 
 void FIO_overwriteMode(FIO_prefs_t* const prefs) { prefs->overwrite = 1; }
@@ -499,14 +528,26 @@ void FIO_setContentSize(FIO_prefs_t* const prefs, int value)
     prefs->contentSize = value != 0;
 }
 
-void FIO_setNbFiles(FIO_prefs_t* const prefs, int value)
+/* FIO_ctx_t functions */
+
+void FIO_setNbFiles(FIO_ctx_t* const fCtx, int value)
+{
+    fCtx->nbFiles = value;
+}
+
+void FIO_setCurrFileIdx(FIO_ctx_t* const fCtx, int value)
+{
+    fCtx->currFileIdx = value;
+}
+
+void FIO_setTotalBytesInput(FIO_ctx_t* const fCtx, size_t value)
 {
-    prefs->nbFiles = value;
+    fCtx->totalBytesInput = value;
 }
 
-void FIO_setCurrFileIdx(FIO_prefs_t* const prefs, int value)
+void FIO_setTotalBytesOutput(FIO_ctx_t* const fCtx, size_t value)
 {
-    prefs->currFileIdx = value;
+    fCtx->totalBytesOutput = value;
 }
 
 /*-*************************************
@@ -1685,6 +1726,7 @@ static unsigned long long FIO_getLargestFileSize(const char** inFileNames, unsig
  * or into a destination folder (specified with -O)
  */
 int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs,
+                                  FIO_ctx_t* const fCtx,
                                   const char** inFileNamesTable,
                                   const char* outMirroredRootDirName,
                                   const char* outDirName,
@@ -1694,7 +1736,7 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs,
 {
     int error = 0;
     cRess_t ress = FIO_createCResources(prefs, dictFileName,
-        FIO_getLargestFileSize(inFileNamesTable, prefs->nbFiles),
+        FIO_getLargestFileSize(inFileNamesTable, fCtx->nbFiles),
         compressionLevel, comprParams);
 
     /* init */
@@ -1704,8 +1746,8 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs,
         if (ress.dstFile == NULL) {  /* could not open outFileName */
             error = 1;
         } else {
-            for (; prefs->currFileIdx < prefs->nbFiles; ++prefs->currFileIdx) {
-                error |= FIO_compressFilename_srcFile(prefs, ress, outFileName, inFileNamesTable[prefs->currFileIdx], compressionLevel);
+            for (; fCtx->currFileIdx < fCtx->nbFiles; ++fCtx->currFileIdx) {
+                error |= FIO_compressFilename_srcFile(prefs, ress, outFileName, inFileNamesTable[fCtx->currFileIdx], compressionLevel);
             }
             if (fclose(ress.dstFile))
                 EXM_THROW(29, "Write error (%s) : cannot properly close %s",
@@ -1714,10 +1756,10 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs,
         }
     } else {
         if (outMirroredRootDirName)
-            UTIL_mirrorSourceFilesDirectories(inFileNamesTable, prefs->nbFiles, outMirroredRootDirName);
+            UTIL_mirrorSourceFilesDirectories(inFileNamesTable, fCtx->nbFiles, outMirroredRootDirName);
 
-        for (; prefs->currFileIdx < prefs->nbFiles; ++prefs->currFileIdx) {
-            const char* const srcFileName = inFileNamesTable[prefs->currFileIdx];
+        for (; fCtx->currFileIdx < fCtx->nbFiles; ++fCtx->currFileIdx) {
+            const char* const srcFileName = inFileNamesTable[fCtx->currFileIdx];
             const char* dstFileName = NULL;
             if (outMirroredRootDirName) {
                 char* validMirroredDirName = UTIL_createMirroredDestDirName(srcFileName, outMirroredRootDirName);
@@ -1736,7 +1778,7 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs,
         }
 
         if (outDirName)
-            FIO_checkFilenameCollisions(inFileNamesTable , prefs->nbFiles);
+            FIO_checkFilenameCollisions(inFileNamesTable , fCtx->nbFiles);
     }
 
     FIO_freeCResources(ress);
index f86ae41784af85db797fb04d36198b38b6d33ff4..8339b3e2a5261d88b0929b988a4af0cb2cbfb3df 100644 (file)
@@ -54,16 +54,24 @@ extern "C" {
 ***************************************/
 typedef enum { FIO_zstdCompression, FIO_gzipCompression, FIO_xzCompression, FIO_lzmaCompression, FIO_lz4Compression } FIO_compressionType_t;
 
+/* Immutable struct containing preferences for file I/O */
 typedef struct FIO_prefs_s FIO_prefs_t;
 
 FIO_prefs_t* FIO_createPreferences(void);
 void FIO_freePreferences(FIO_prefs_t* const prefs);
 
+/* Mutable struct containing relevant context and state of (de)compression with respect to file I/O */
+typedef struct FIO_ctx_s FIO_ctx_t;
+
+FIO_ctx_t* FIO_createContext(void);
+void FIO_freeContext(FIO_ctx_t* const fCtx);
+
 typedef struct FIO_display_prefs_s FIO_display_prefs_t;
 
 /*-*************************************
 *  Parameters
 ***************************************/
+/* FIO_prefs_t functions */
 void FIO_setCompressionType(FIO_prefs_t* const prefs, FIO_compressionType_t compressionType);
 void FIO_overwriteMode(FIO_prefs_t* const prefs);
 void FIO_setAdaptiveMode(FIO_prefs_t* const prefs, unsigned adapt);
@@ -96,8 +104,12 @@ void FIO_setNotificationLevel(int level);
 void FIO_setExcludeCompressedFile(FIO_prefs_t* const prefs, int excludeCompressedFiles);
 void FIO_setPatchFromMode(FIO_prefs_t* const prefs, int value);
 void FIO_setContentSize(FIO_prefs_t* const prefs, int value);
-void FIO_setNbFiles(FIO_prefs_t* const prefs, int value);
-void FIO_setCurrFileIdx(FIO_prefs_t* const prefs, int value);
+
+/* FIO_ctx_t functions */
+void FIO_setNbFiles(FIO_ctx_t* const fCtx, int value);
+void FIO_setCurrFileIdx(FIO_ctx_t* const fCtx, int value);
+void FIO_setTotalBytesInput(FIO_ctx_t* const fCtx, size_t value);
+void FIO_setTotalBytesOutput(FIO_ctx_t* const fCtx, size_t value);
 
 /*-*************************************
 *  Single File functions
index 9dab010ffd623614268cebdceaa1d3744bb9d4f0..6bd869e487c3457862590123ead04fee7ef9192d 100644 (file)
@@ -693,6 +693,7 @@ int main(int const argCount, const char* argv[])
     size_t blockSize = 0;
 
     FIO_prefs_t* const prefs = FIO_createPreferences();
+    FIO_ctx_t* const fCtx = FIO_createContext();
     zstd_operation_mode operation = zom_compress;
     ZSTD_compressionParameters compressionParams;
     int cLevel = init_cLevel();
@@ -1260,7 +1261,7 @@ int main(int const argCount, const char* argv[])
     if (!strcmp(filenames->fileNames[0], stdinmark) && outFileName && !strcmp(outFileName,stdoutmark) && (g_displayLevel==2)) g_displayLevel=1;
 
     /* IO Stream/File */
-    FIO_setNbFiles(prefs, (int)filenames->tableSize); 
+    FIO_setNbFiles(fCtx, (int)filenames->tableSize); 
     FIO_setNotificationLevel(g_displayLevel);
     FIO_setPatchFromMode(prefs, patchFromDictFileName != NULL);
     if (memLimit == 0) {
@@ -1319,9 +1320,9 @@ int main(int const argCount, const char* argv[])
         }
 
         if ((filenames->tableSize==1) && outFileName)
-            operationResult = FIO_compressFilename(prefs, outFileName, filenames->fileNames[0], dictFileName, cLevel, compressionParams);
+            operationResult = FIO_compressFilename(prefs, fCtx, outFileName, filenames->fileNames[0], dictFileName, cLevel, compressionParams);
         else
-            operationResult = FIO_compressMultipleFilenames(prefs, filenames->fileNames, outMirroredDirName, outDirName, outFileName, suffix, dictFileName, cLevel, compressionParams);
+            operationResult = FIO_compressMultipleFilenames(prefs, fCtx, filenames->fileNames, outMirroredDirName, outDirName, outFileName, suffix, dictFileName, cLevel, compressionParams);
 #else
         (void)contentSize; (void)suffix; (void)adapt; (void)rsyncable; (void)ultra; (void)cLevel; (void)ldmFlag; (void)literalCompressionMode; (void)targetCBlockSize; (void)streamSrcSize; (void)srcSizeHint; (void)ZSTD_strategyMap; /* not used when ZSTD_NOCOMPRESS set */
         DISPLAY("Compression not supported \n");