summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle J Harper <KyleJHarper@gmail.com>2015-04-12 22:28:13 (GMT)
committerKyle J Harper <KyleJHarper@gmail.com>2015-04-12 22:33:40 (GMT)
commit0169502b49dfa5eb8878f5c85be3270012266fc3 (patch)
tree1145efbd28cb78f319e296582f2f9eb8c580f210
parent160661c7a4cbf805f4af74d2e3932a17a66e6ce7 (diff)
downloadlz4-0169502b49dfa5eb8878f5c85be3270012266fc3.zip
lz4-0169502b49dfa5eb8878f5c85be3270012266fc3.tar.gz
lz4-0169502b49dfa5eb8878f5c85be3270012266fc3.tar.bz2
Added new LZ4IO_decompressMultipleFilenames to allow decompression of multiple files with the -m switch added in r128 (ref: google code issue 151). Limitation: will only process files matching LZ4_EXTENSION macro, which for now seems reasonable.
-rw-r--r--programs/lz4cli.c32
-rw-r--r--programs/lz4io.c28
-rw-r--r--programs/lz4io.h3
3 files changed, 49 insertions, 14 deletions
diff --git a/programs/lz4cli.c b/programs/lz4cli.c
index da5da71..f7cf27e 100644
--- a/programs/lz4cli.c
+++ b/programs/lz4cli.c
@@ -515,22 +515,28 @@ int main(int argc, char** argv)
/* IO Stream/File */
LZ4IO_setNotificationLevel(displayLevel);
- if (decode) DEFAULT_DECOMPRESSOR(input_filename, output_filename);
+ if (decode)
+ {
+ if (multiple_inputs)
+ LZ4IO_decompressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION);
+ else
+ DEFAULT_DECOMPRESSOR(input_filename, output_filename);
+ }
else
{
- /* compression is default action */
- if (legacy_format)
- {
- DISPLAYLEVEL(3, "! Generating compressed LZ4 using Legacy format (deprecated) ! \n");
- LZ4IO_compressFilename_Legacy(input_filename, output_filename, cLevel);
- }
+ /* compression is default action */
+ if (legacy_format)
+ {
+ DISPLAYLEVEL(3, "! Generating compressed LZ4 using Legacy format (deprecated) ! \n");
+ LZ4IO_compressFilename_Legacy(input_filename, output_filename, cLevel);
+ }
+ else
+ {
+ if (multiple_inputs)
+ LZ4IO_compressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION, cLevel);
else
- {
- if (multiple_inputs)
- LZ4IO_compressMultipleFilenames(inFileNames, ifnIdx, LZ4_EXTENSION, cLevel);
- else
- DEFAULT_COMPRESSOR(input_filename, output_filename, cLevel);
- }
+ DEFAULT_COMPRESSOR(input_filename, output_filename, cLevel);
+ }
}
if (main_pause) waitEnter();
diff --git a/programs/lz4io.c b/programs/lz4io.c
index 02e03c8..16a588c 100644
--- a/programs/lz4io.c
+++ b/programs/lz4io.c
@@ -517,6 +517,34 @@ int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize,
return 0;
}
+int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix)
+{
+ int i;
+ int skipped_files = 0;
+ char* outFileName = (char*)malloc(FNSPACE);
+ size_t ofnSize = FNSPACE;
+ size_t suffixSize = strlen(suffix);
+ char* ifnSuffix = (char*)malloc(suffixSize + 1);
+
+ for (i=0; i<ifntSize; i++)
+ {
+ 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;
+ continue;
+ }
+ memcpy(outFileName, inFileNamesTable[i], ifnSize - suffixSize);
+ outFileName[ifnSize-suffixSize] = '\0';
+ LZ4IO_decompressFilename(inFileNamesTable[i], outFileName);
+ }
+ free(outFileName);
+ if (skipped_files) return 1;
+ return 0;
+}
/* ********************************************************************* */
/* ********************** LZ4 file-stream Decompression **************** */
diff --git a/programs/lz4io.h b/programs/lz4io.h
index 75a36e1..11c8fdb 100644
--- a/programs/lz4io.h
+++ b/programs/lz4io.h
@@ -51,8 +51,9 @@ static char const nulmark[] = "/dev/null";
int LZ4IO_compressFilename (const char* input_filename, const char* output_filename, int compressionlevel);
int LZ4IO_decompressFilename(const char* input_filename, const char* output_filename);
-int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, int compressionlevel);
+int LZ4IO_compressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix, int compressionlevel);
+int LZ4IO_decompressMultipleFilenames(const char** inFileNamesTable, int ifntSize, const char* suffix);
/* ************************************************** */
/* ****************** Parameters ******************** */