Added support for continuation of file compression and decompression if input files...
authorKyle J Harper <KyleJHarper@gmail.com>
Sun, 12 Apr 2015 23:41:55 +0000 (18:41 -0500)
committerKyle J Harper <KyleJHarper@gmail.com>
Sun, 12 Apr 2015 23:41:55 +0000 (18:41 -0500)
programs/lz4cli.c
programs/lz4io.c

index f7cf27e..f3524b3 100644 (file)
@@ -265,7 +265,8 @@ int main(int argc, char** argv)
         forceStdout=0,
         forceCompress=0,
         main_pause=0,
-        multiple_inputs=0;
+        multiple_inputs=0,
+        multiple_rv=0;
     const char* input_filename=0;
     const char* output_filename=0;
     char* dynNameSpace=0;
@@ -518,7 +519,7 @@ int main(int argc, char** argv)
     if (decode)
     {
       if (multiple_inputs)
-        LZ4IO_decompressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION);
+        multiple_rv = LZ4IO_decompressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION);
       else
         DEFAULT_DECOMPRESSOR(input_filename, output_filename);
     }
@@ -533,7 +534,7 @@ int main(int argc, char** argv)
       else
       {
         if (multiple_inputs)
-          LZ4IO_compressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION, cLevel);
+          multiple_rv = LZ4IO_compressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION, cLevel);
         else
           DEFAULT_COMPRESSOR(input_filename, output_filename, cLevel);
       }
@@ -542,5 +543,6 @@ int main(int argc, char** argv)
     if (main_pause) waitEnter();
     free(dynNameSpace);
     free((void*)inFileNames);
+    if (multiple_rv != 0) return multiple_rv;
     return 0;
 }
index 16a588c..d399c90 100644 (file)
@@ -501,12 +501,21 @@ int LZ4IO_compressFilename(const char* input_filename, const char* output_filena
 int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, int compressionlevel)
 {
     int i;
+    int missing_files = 0;
+    FILE *ifp;
     char* outFileName = (char*)malloc(FNSPACE);
     size_t ofnSize = FNSPACE;
     const size_t suffixSize = strlen(suffix);
 
     for (i=0; i<ifntSize; i++)
     {
+        ifp = fopen(inFileNamesTable[i], "r");
+        if (ifp == NULL) {
+            DISPLAYLEVEL(2, "Unable to access file for processing: %s\n", inFileNamesTable[i]);
+            missing_files++;
+            continue;
+        }
+        fclose(ifp);
         size_t ifnSize = strlen(inFileNamesTable[i]);
         if (ofnSize <= ifnSize+suffixSize+1) { free(outFileName); ofnSize = ifnSize + 20; outFileName = (char*)malloc(ofnSize); }
         strcpy(outFileName, inFileNamesTable[i]);
@@ -514,6 +523,7 @@ int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize,
         LZ4IO_compressFilename(inFileNamesTable[i], outFileName, compressionlevel);
     }
     free(outFileName);
+    if (missing_files > 0) return 1;
     return 0;
 }
 
@@ -521,6 +531,8 @@ int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSiz
 {
     int i;
     int skipped_files = 0;
+    int missing_files = 0;
+    FILE *ifp;
     char* outFileName = (char*)malloc(FNSPACE);
     size_t ofnSize = FNSPACE;
     size_t suffixSize = strlen(suffix);
@@ -528,13 +540,19 @@ int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSiz
 
     for (i=0; i<ifntSize; i++)
     {
+        ifp = fopen(inFileNamesTable[i], "r");
+        if (ifp == NULL) {
+            DISPLAYLEVEL(2, "Unable to access file for processing: %s\n", inFileNamesTable[i]);
+            missing_files++;
+            continue;
+        }
+        fclose(ifp);
         size_t ifnSize = strlen(inFileNamesTable[i]);
         strcpy(ifnSuffix, inFileNamesTable[i] + ifnSize - suffixSize);
-        DISPLAYLEVEL(2, "ifnSuffix is %s\n", ifnSuffix);
         if (ofnSize <= ifnSize-suffixSize+1) { free(outFileName); ofnSize = ifnSize + 20; outFileName = (char*)malloc(ofnSize); }
         if (ifnSize <= suffixSize  ||  strcmp(ifnSuffix, suffix) != 0) {
             DISPLAYLEVEL(2, "File extension doesn't match expected LZ4_EXTENSION (%4s); will not process file: %s\n", suffix, inFileNamesTable[i]);
-            skipped_files = 1;
+            skipped_files++;
             continue;
         }
         memcpy(outFileName, inFileNamesTable[i], ifnSize - suffixSize);
@@ -542,7 +560,8 @@ int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSiz
         LZ4IO_decompressFilename(inFileNamesTable[i], outFileName);
     }
     free(outFileName);
-    if (skipped_files) return 1;
+    if (skipped_files > 0) return 1;
+    if (missing_files > 0) return 1;
     return 0;
 }