1
0
mirror of https://github.com/facebook/zstd.git synced 2026-01-06 11:21:19 +03:00

Adding --file=FILE feature

This commit is contained in:
Ahmed Abdellah
2019-10-15 07:49:13 +01:00
parent 0e76000dee
commit 779ea72953
3 changed files with 335 additions and 2 deletions

View File

@@ -565,6 +565,7 @@ int main(int argCount, const char* argv[])
nextArgumentIsMaxDict = 0,
nextArgumentIsDictID = 0,
nextArgumentsAreFiles = 0,
isTableBufferBased = 0,
nextEntryIsDictionary = 0,
operationResult = 0,
separateFiles = 0,
@@ -582,7 +583,9 @@ int main(int argCount, const char* argv[])
int cLevelLast = -1000000000;
unsigned recursive = 0;
unsigned memLimit = 0;
const char** filenameTable = (const char**)malloc(argCount * sizeof(const char*)); /* argCount >= 1 */
unsigned filenameTableSize = argCount;
const char** filenameTable = (const char**)malloc(filenameTableSize * sizeof(const char*)); /* argCount >= 1 */
char* tableBuf = NULL;
unsigned filenameIdx = 0;
const char* programName = argv[0];
const char* outFileName = NULL;
@@ -791,6 +794,66 @@ int main(int argCount, const char* argv[])
continue;
}
#endif
if (longCommandWArg(&argument, "--file=")) {
DISPLAYLEVEL(4, "[TRACE] argument catched\n");
const char* fileName = argument;
DISPLAYLEVEL(4, "[TRACE] fileName: %s\n", fileName);
if(!UTIL_fileExist(fileName) || !UTIL_isRegularFile(fileName)){
DISPLAYLEVEL(1, "[ERROR] wrong fileName: %s\n", fileName);
CLEAN_RETURN(badusage(programName));
}
DISPLAYLEVEL(4, "[TRACE] call read function\n");
FileNamesTable* extendedTable = UTIL_createFileNamesTable_fromFileName(fileName);
if(!extendedTable) {
CLEAN_RETURN(badusage(programName));
}
DISPLAYLEVEL(4, "[TRACE] call read function is finished\n");
DISPLAYLEVEL(4, "[TRACE] extendedFileNamesTable:\n");
size_t extendedTableSize = extendedTable->tableSize;
const char ** extendedFileNamesTable = extendedTable->fileNames;
int i = 0;
for(i = 0; i < extendedTableSize; ++i)
printf("%s\n",extendedFileNamesTable[i]);
DISPLAYLEVEL(4, "[TRACE] call concatenation function\n");
DISPLAYLEVEL(4, "[TRACE] filenameidx: %d\n", filenameIdx);
for(i = filenameIdx; i < filenameTableSize ; ++i)
filenameTable[i] = NULL;
FileNamesTable* curTable = (FileNamesTable*) malloc(sizeof(FileNamesTable));
if(!curTable) {
UTIL_freeFileNamesTable(extendedTable);
CLEAN_RETURN(badusage(programName));
}
curTable->fileNames = filenameTable;
curTable->tableSize = filenameTableSize;
curTable->buf = tableBuf;
FileNamesTable* concatenatedTables = UTIL_concatenateTwoTables(curTable, extendedTable);
if(!concatenatedTables) {
UTIL_freeFileNamesTable(curTable);
UTIL_freeFileNamesTable(extendedTable);
CLEAN_RETURN(badusage(programName));
}
filenameTable = concatenatedTables->fileNames;
filenameTableSize = concatenatedTables->tableSize;
tableBuf = concatenatedTables->buf;
filenameIdx += extendedTableSize;
free(concatenatedTables);
isTableBufferBased = 1;
DISPLAYLEVEL(1, "[TRACE] call concatenation function is finished\n");
continue;
}
/* fall-through, will trigger bad_usage() later on */
}
@@ -1193,6 +1256,13 @@ int main(int argCount, const char* argv[])
_end:
FIO_freePreferences(prefs);
if(filenameTable) {
if(isTableBufferBased && tableBuf){
free(tableBuf);
}
}
if (main_pause) waitEnter();
#ifdef UTIL_HAS_CREATEFILELIST
if (extendedFileList)