const char* suffix, const char* dictFileName,
int compressionLevel, ZSTD_compressionParameters comprParams)
{
- printf("compressing multiple...\n");
int error = 0;
cRess_t ress = FIO_createCResources(prefs, dictFileName, compressionLevel, comprParams);
} }
FIO_freeCResources(ress);
- UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);
+ /*UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);*/
return error;
}
int
FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
- const char* srcNamesTable[], unsigned nbFiles,
+ const char** srcNamesTable, unsigned nbFiles,
+ const char* outDirName, char** dstFileNamesTable,
const char* outFileName,
const char* dictFileName)
{
int error = 0;
dRess_t ress = FIO_createDResources(prefs, dictFileName);
- if (outFileName) {
+ if (outDirName != NULL) { /* output into a particular folder */
+ unsigned u;
+ for (u = 0; u < nbFiles; ++u) {
+ const char* const srcFileName = srcNamesTable[u];
+ const char* const dstFileName = FIO_determineDstName(dstFileNamesTable[u]);
+ if (dstFileName == NULL) { error=1; continue; }
+
+ error |= FIO_decompressSrcFile(prefs, ress, dstFileName, srcFileName);
+ }
+ } else if (outFileName) {
unsigned u;
ress.dstFile = FIO_openDstFile(prefs, NULL, outFileName);
if (ress.dstFile == 0) EXM_THROW(71, "cannot open %s", outFileName);
}
FIO_freeDResources(ress);
+ /* UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles); */
return error;
}
+void FIO_processMultipleFilenameDestinationDir(char** dstFilenameTable,
+ const char** filenameTable, unsigned filenameIdx,
+ const char* outFileName, const char* outDirName) {
+ int dirResult;
+ dirResult = UTIL_createDir(outDirName);
+ if (dirResult)
+ DISPLAY("Directory creation unsuccessful \n");
+ UTIL_createDestinationDirTable(filenameTable, filenameIdx, outDirName, dstFilenameTable);
+ if (outFileName) {
+ outFileName = dstFilenameTable[0]; /* in case -O is called with single file */
+ }
+}
/* **************************************************************************
* .zst file info (--list command)
@return : nb of missing or skipped files */
int FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
const char** srcNamesTable, unsigned nbFiles,
+ const char* outDirName, char** dstFilenameTable,
const char* outFileName,
const char* dictFileName);
+void FIO_processMultipleFilenameDestinationDir(char** dstFilenameTable,
+ const char** filenameTable, unsigned filenameIdx,
+ const char* outFileName, const char* outDirName);
+
/*-*************************************
* Advanced stuff (should actually be hosted elsewhere)
unsigned u;
char c;
c = '/';
+ printf("NBFILE: %u\n", nbFiles);
/* duplicate source file table */
for (u = 0; u < nbFiles; ++u) {
dstFilenameTable[u] = (char*) malloc(finalPathLen * sizeof(char) + 1);
strcpy(dstFilenameTable[u], outDirName);
strcat(dstFilenameTable[u], filename);
+ printf("%s %s\n", filenameTable[u], dstFilenameTable[u]);
}
}
void UTIL_freeDestinationFilenameTable(char** dstDirTable, unsigned nbFiles) {
unsigned u;
- for (u = 0; u < nbFiles; ++u)
- free(dstDirTable[u]);
- free((void*)dstDirTable);
+ for (u = 0; u < nbFiles; ++u) {
+ if (dstDirTable[u] != NULL)
+ free(dstDirTable[u]);
+ }
+ if (dstDirTable != NULL) free((void*)dstDirTable);
}
int UTIL_isSameFile(const char* file1, const char* file2)
if (adaptMin > cLevel) cLevel = adaptMin;
if (adaptMax < cLevel) cLevel = adaptMax;
- if (outDirName) {
- int dirResult;
- dirResult = UTIL_createDir(outDirName);
- if (dirResult) DISPLAY("Directory creation unsuccessful \n");
-
- UTIL_createDestinationDirTable(filenameTable, filenameIdx, outDirName, dstFilenameTable);
- if (outFileName) {
- outFileName = dstFilenameTable[0]; /* in case -O is called with single file */
- }
- }
+ if (outDirName)
+ FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
+
if ((filenameIdx==1) && outFileName)
operationResult = FIO_compressFilename(prefs, outFileName, filenameTable[0], dictFileName, cLevel, compressionParams);
else
}
}
FIO_setMemLimit(prefs, memLimit);
+
+ if (outDirName)
+ FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
+
if (filenameIdx==1 && outFileName)
operationResult = FIO_decompressFilename(prefs, outFileName, filenameTable[0], dictFileName);
else
- operationResult = FIO_decompressMultipleFilenames(prefs, filenameTable, filenameIdx, outFileName, dictFileName);
+ operationResult = FIO_decompressMultipleFilenames(prefs, filenameTable, filenameIdx, outDirName, dstFilenameTable, outFileName, dictFileName);
#else
DISPLAY("Decompression not supported \n");
#endif