mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
added decompression support
This commit is contained in:
@ -1422,7 +1422,6 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs, const char** inFileN
|
|||||||
const char* suffix, const char* dictFileName,
|
const char* suffix, const char* dictFileName,
|
||||||
int compressionLevel, ZSTD_compressionParameters comprParams)
|
int compressionLevel, ZSTD_compressionParameters comprParams)
|
||||||
{
|
{
|
||||||
printf("compressing multiple...\n");
|
|
||||||
int error = 0;
|
int error = 0;
|
||||||
cRess_t ress = FIO_createCResources(prefs, dictFileName, compressionLevel, comprParams);
|
cRess_t ress = FIO_createCResources(prefs, dictFileName, compressionLevel, comprParams);
|
||||||
|
|
||||||
@ -1457,7 +1456,7 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs, const char** inFileN
|
|||||||
} }
|
} }
|
||||||
|
|
||||||
FIO_freeCResources(ress);
|
FIO_freeCResources(ress);
|
||||||
UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);
|
/*UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles);*/
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2240,14 +2239,24 @@ FIO_determineDstName(const char* srcFileName)
|
|||||||
|
|
||||||
int
|
int
|
||||||
FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
|
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* outFileName,
|
||||||
const char* dictFileName)
|
const char* dictFileName)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
dRess_t ress = FIO_createDResources(prefs, dictFileName);
|
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;
|
unsigned u;
|
||||||
ress.dstFile = FIO_openDstFile(prefs, NULL, outFileName);
|
ress.dstFile = FIO_openDstFile(prefs, NULL, outFileName);
|
||||||
if (ress.dstFile == 0) EXM_THROW(71, "cannot open %s", outFileName);
|
if (ress.dstFile == 0) EXM_THROW(71, "cannot open %s", outFileName);
|
||||||
@ -2268,10 +2277,23 @@ FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
FIO_freeDResources(ress);
|
FIO_freeDResources(ress);
|
||||||
|
/* UTIL_freeDestinationFilenameTable(dstFileNamesTable, nbFiles); */
|
||||||
return error;
|
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)
|
* .zst file info (--list command)
|
||||||
|
@ -114,9 +114,14 @@ int FIO_compressMultipleFilenames(FIO_prefs_t* const prefs, const char** inFileN
|
|||||||
@return : nb of missing or skipped files */
|
@return : nb of missing or skipped files */
|
||||||
int FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
|
int FIO_decompressMultipleFilenames(FIO_prefs_t* const prefs,
|
||||||
const char** srcNamesTable, unsigned nbFiles,
|
const char** srcNamesTable, unsigned nbFiles,
|
||||||
|
const char* outDirName, char** dstFilenameTable,
|
||||||
const char* outFileName,
|
const char* outFileName,
|
||||||
const char* dictFileName);
|
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)
|
* Advanced stuff (should actually be hosted elsewhere)
|
||||||
|
@ -108,6 +108,7 @@ void UTIL_createDestinationDirTable(const char** filenameTable, unsigned nbFiles
|
|||||||
unsigned u;
|
unsigned u;
|
||||||
char c;
|
char c;
|
||||||
c = '/';
|
c = '/';
|
||||||
|
printf("NBFILE: %u\n", nbFiles);
|
||||||
|
|
||||||
/* duplicate source file table */
|
/* duplicate source file table */
|
||||||
for (u = 0; u < nbFiles; ++u) {
|
for (u = 0; u < nbFiles; ++u) {
|
||||||
@ -120,14 +121,17 @@ void UTIL_createDestinationDirTable(const char** filenameTable, unsigned nbFiles
|
|||||||
dstFilenameTable[u] = (char*) malloc(finalPathLen * sizeof(char) + 1);
|
dstFilenameTable[u] = (char*) malloc(finalPathLen * sizeof(char) + 1);
|
||||||
strcpy(dstFilenameTable[u], outDirName);
|
strcpy(dstFilenameTable[u], outDirName);
|
||||||
strcat(dstFilenameTable[u], filename);
|
strcat(dstFilenameTable[u], filename);
|
||||||
|
printf("%s %s\n", filenameTable[u], dstFilenameTable[u]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UTIL_freeDestinationFilenameTable(char** dstDirTable, unsigned nbFiles) {
|
void UTIL_freeDestinationFilenameTable(char** dstDirTable, unsigned nbFiles) {
|
||||||
unsigned u;
|
unsigned u;
|
||||||
for (u = 0; u < nbFiles; ++u)
|
for (u = 0; u < nbFiles; ++u) {
|
||||||
free(dstDirTable[u]);
|
if (dstDirTable[u] != NULL)
|
||||||
free((void*)dstDirTable);
|
free(dstDirTable[u]);
|
||||||
|
}
|
||||||
|
if (dstDirTable != NULL) free((void*)dstDirTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
int UTIL_isSameFile(const char* file1, const char* file2)
|
int UTIL_isSameFile(const char* file1, const char* file2)
|
||||||
|
@ -1177,16 +1177,9 @@ int main(int argCount, const char* argv[])
|
|||||||
if (adaptMin > cLevel) cLevel = adaptMin;
|
if (adaptMin > cLevel) cLevel = adaptMin;
|
||||||
if (adaptMax < cLevel) cLevel = adaptMax;
|
if (adaptMax < cLevel) cLevel = adaptMax;
|
||||||
|
|
||||||
if (outDirName) {
|
if (outDirName)
|
||||||
int dirResult;
|
FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
|
||||||
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 ((filenameIdx==1) && outFileName)
|
if ((filenameIdx==1) && outFileName)
|
||||||
operationResult = FIO_compressFilename(prefs, outFileName, filenameTable[0], dictFileName, cLevel, compressionParams);
|
operationResult = FIO_compressFilename(prefs, outFileName, filenameTable[0], dictFileName, cLevel, compressionParams);
|
||||||
else
|
else
|
||||||
@ -1205,10 +1198,14 @@ int main(int argCount, const char* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FIO_setMemLimit(prefs, memLimit);
|
FIO_setMemLimit(prefs, memLimit);
|
||||||
|
|
||||||
|
if (outDirName)
|
||||||
|
FIO_processMultipleFilenameDestinationDir(dstFilenameTable, filenameTable, filenameIdx, outFileName, outDirName);
|
||||||
|
|
||||||
if (filenameIdx==1 && outFileName)
|
if (filenameIdx==1 && outFileName)
|
||||||
operationResult = FIO_decompressFilename(prefs, outFileName, filenameTable[0], dictFileName);
|
operationResult = FIO_decompressFilename(prefs, outFileName, filenameTable[0], dictFileName);
|
||||||
else
|
else
|
||||||
operationResult = FIO_decompressMultipleFilenames(prefs, filenameTable, filenameIdx, outFileName, dictFileName);
|
operationResult = FIO_decompressMultipleFilenames(prefs, filenameTable, filenameIdx, outDirName, dstFilenameTable, outFileName, dictFileName);
|
||||||
#else
|
#else
|
||||||
DISPLAY("Decompression not supported \n");
|
DISPLAY("Decompression not supported \n");
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user