]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
kill memory leaks, cleanup, fix some dumb bugs
authorSen Huang <senhuang96@fb.com>
Fri, 6 Sep 2019 17:17:04 +0000 (10:17 -0700)
committerSen Huang <senhuang96@fb.com>
Fri, 6 Sep 2019 17:17:04 +0000 (10:17 -0700)
programs/fileio.c
programs/util.c
programs/zstdcli.c

index c8a971c274becd6765a35dbfa4d45e135ae2f98a..194ea85c4e7a75c5c697e8009897edd548166c13 100644 (file)
@@ -1390,10 +1390,8 @@ FIO_determineCompressedName(const char* srcFileName, const char* suffix)
 {
     static size_t dfnbCapacity = 0;
     static char* dstFileNameBuffer = NULL;   /* using static allocation : this function cannot be multi-threaded */
-
     size_t const sfnSize = strlen(srcFileName);
     size_t const suffixSize = strlen(suffix);
-
     if (dfnbCapacity <= sfnSize+suffixSize+1) {
         /* resize buffer for dstName */
         free(dstFileNameBuffer);
@@ -1405,7 +1403,6 @@ FIO_determineCompressedName(const char* srcFileName, const char* suffix)
     assert(dstFileNameBuffer != NULL);
     memcpy(dstFileNameBuffer, srcFileName, sfnSize);
     memcpy(dstFileNameBuffer+sfnSize, suffix, suffixSize+1 /* Include terminating null */);
-
     return dstFileNameBuffer;
 }
 
@@ -1456,7 +1453,7 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs, const char** inFileN
     }   }
 
     FIO_freeCResources(ress);
-    /*UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);*/
+    UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);
     return error;
 }
 
@@ -2277,7 +2274,7 @@ FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
     }
 
     FIO_freeDResources(ress);
-    /* UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles); */
+    UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);
     return error;
 }
 
index 448a78899bc609bae06aeb8f26a44165489a672f..3b134f9cd43833aa8ff0b368ffb016a20b6061a9 100644 (file)
@@ -87,11 +87,12 @@ U32 UTIL_isDirectory(const char* infilename)
     return 0;
 }
 
-int UTIL_createDir(const char* outDirName) {
-    if (UTIL_isDirectory(outDirName)) {
-        return 0;   /* no need to create if directory already exists */
-    }
+int UTIL_createDir(const char* outDirName)
+{
     int r;
+    if (UTIL_isDirectory(outDirName))
+        return 0;   /* no need to create if directory already exists */
+
 #if defined(_MSC_VER)
     r = _mkdir(outDirName);
     if (r || !UTIL_isDirectory(outDirName)) return 1;
@@ -108,20 +109,17 @@ void UTIL_createDestinationDirTable(const char** filenameTable, unsigned nbFiles
     unsigned u;
     char c;
     c = '/';
-    printf("NBFILE: %u\n", nbFiles);
 
     /* duplicate source file table */
     for (u = 0; u < nbFiles; ++u) {
         char* filename;
-        char* finalPath;
         size_t finalPathLen;
         finalPathLen = strlen(outDirName);
         filename = strrchr(filenameTable[u], c);    /* filename is the last bit of string after '/' */
         finalPathLen += strlen(filename);
-        dstFilenameTable[u] = (char*) malloc(finalPathLen * sizeof(char) + 1);
+        dstFilenameTable[u] = (char*) malloc((finalPathLen+5) * sizeof(char)); /* extra 1 bit for \0, extra 4 for .zst if compressing*/
         strcpy(dstFilenameTable[u], outDirName);
         strcat(dstFilenameTable[u], filename);
-        printf("%s    %s\n", filenameTable[u], dstFilenameTable[u]);
     } 
 }
 
index 7c00b3d7140495060377d0204c84d36e6f75e80b..9029f6344c08819c09e24dcfe2914d83a61da8e7 100644 (file)
@@ -585,7 +585,7 @@ int main(int argCount, const char* argv[])
     unsigned recursive = 0;
     unsigned memLimit = 0;
     const char** filenameTable = (const char**)malloc(argCount * sizeof(const char*));   /* argCount >= 1 */
-    char** dstFilenameTable = (char**)malloc(argCount * sizeof(char*));
+    char** dstFilenameTable;
     unsigned filenameIdx = 0;
     const char* programName = argv[0];
     const char* outFileName = NULL;
@@ -1177,8 +1177,10 @@ int main(int argCount, const char* argv[])
         if (adaptMin > cLevel) cLevel = adaptMin;
         if (adaptMax < cLevel) cLevel = adaptMax;
 
-        if (outDirName)
+        if (outDirName) {
+            dstFilenameTable = (char**)malloc(filenameIdx * sizeof(char*));
             FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
+        }
 
         if ((filenameIdx==1) && outFileName)
           operationResult = FIO_compressFilename(prefs, outFileName, filenameTable[0], dictFileName, cLevel, compressionParams);
@@ -1199,9 +1201,10 @@ int main(int argCount, const char* argv[])
         }
         FIO_setMemLimit(prefs, memLimit);
 
-        if (outDirName)
+        if (outDirName) {
+            dstFilenameTable = (char**)malloc(filenameIdx * sizeof(char*));
             FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
-
+        }
         if (filenameIdx==1 && outFileName)
             operationResult = FIO_decompressFilename(prefs, outFileName, filenameTable[0], dictFileName);
         else