mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
stdin multiple file fixes (#3222)
* Fixes for https://github.com/facebook/zstd/issues/3206 - bugs when handling stdin as part of multiple files. * new line at end of multiple-files.sh
This commit is contained in:
@ -1796,6 +1796,11 @@ FIO_determineCompressedName(const char* srcFileName, const char* outDirName, con
|
||||
char* outDirFilename = NULL;
|
||||
size_t sfnSize = strlen(srcFileName);
|
||||
size_t const srcSuffixLen = strlen(suffix);
|
||||
|
||||
if(!strcmp(srcFileName, stdinmark)) {
|
||||
return stdoutmark;
|
||||
}
|
||||
|
||||
if (outDirName) {
|
||||
outDirFilename = FIO_createFilename_fromOutDir(srcFileName, outDirName, srcSuffixLen);
|
||||
sfnSize = strlen(outDirFilename);
|
||||
@ -2579,6 +2584,11 @@ FIO_determineDstName(const char* srcFileName, const char* outDirName)
|
||||
|
||||
size_t srcSuffixLen;
|
||||
const char* const srcSuffix = strrchr(srcFileName, '.');
|
||||
|
||||
if(!strcmp(srcFileName, stdinmark)) {
|
||||
return stdoutmark;
|
||||
}
|
||||
|
||||
if (srcSuffix == NULL) {
|
||||
DISPLAYLEVEL(1,
|
||||
"zstd: %s: unknown suffix (%s expected). "
|
||||
|
@ -509,6 +509,16 @@ FileNamesTable* UTIL_allocateFileNamesTable(size_t tableSize)
|
||||
return fnt;
|
||||
}
|
||||
|
||||
int UTIL_searchFileNamesTable(FileNamesTable* table, char const* name) {
|
||||
size_t i;
|
||||
for(i=0 ;i < table->tableSize; i++) {
|
||||
if(!strcmp(table->fileNames[i], name)) {
|
||||
return (int)i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void UTIL_refFilename(FileNamesTable* fnt, const char* filename)
|
||||
{
|
||||
assert(fnt->tableSize < fnt->tableCapacity);
|
||||
|
@ -269,6 +269,11 @@ UTIL_createFNT_fromROTable(const char** filenames, size_t nbFilenames);
|
||||
*/
|
||||
FileNamesTable* UTIL_allocateFileNamesTable(size_t tableSize);
|
||||
|
||||
/*! UTIL_searchFileNamesTable() :
|
||||
* Searched through entries in FileNamesTable for a specific name.
|
||||
* @return : index of entry if found or -1 if not found
|
||||
*/
|
||||
int UTIL_searchFileNamesTable(FileNamesTable* table, char const* name);
|
||||
|
||||
/*! UTIL_refFilename() :
|
||||
* Add a reference to read-only name into @fnt table.
|
||||
|
@ -1391,19 +1391,19 @@ int main(int argCount, const char* argv[])
|
||||
UTIL_refFilename(filenames, stdinmark);
|
||||
}
|
||||
|
||||
if (!strcmp(filenames->fileNames[0], stdinmark) && !outFileName)
|
||||
if (filenames->tableSize == 1 && !strcmp(filenames->fileNames[0], stdinmark) && !outFileName)
|
||||
outFileName = stdoutmark; /* when input is stdin, default output is stdout */
|
||||
|
||||
/* Check if input/output defined as console; trigger an error in this case */
|
||||
if (!forceStdin
|
||||
&& !strcmp(filenames->fileNames[0], stdinmark)
|
||||
&& (UTIL_searchFileNamesTable(filenames, stdinmark) != -1)
|
||||
&& IS_CONSOLE(stdin) ) {
|
||||
DISPLAYLEVEL(1, "stdin is a console, aborting\n");
|
||||
CLEAN_RETURN(1);
|
||||
}
|
||||
if ( outFileName && !strcmp(outFileName, stdoutmark)
|
||||
if ( (!outFileName || !strcmp(outFileName, stdoutmark))
|
||||
&& IS_CONSOLE(stdout)
|
||||
&& !strcmp(filenames->fileNames[0], stdinmark)
|
||||
&& (UTIL_searchFileNamesTable(filenames, stdinmark) != -1)
|
||||
&& !forceStdout
|
||||
&& operation!=zom_decompress ) {
|
||||
DISPLAYLEVEL(1, "stdout is a console, aborting\n");
|
||||
|
Reference in New Issue
Block a user