rewrite FIO_createFilename_fromOutDir()
This commit is contained in:
parent
caf40d0ae4
commit
ad86a5d0bc
@ -686,56 +686,50 @@ int FIO_checkFilenameCollisions(const char** filenameTable, unsigned nbFiles) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char*
|
||||||
|
extractFilename(const char* path, char separator)
|
||||||
|
{
|
||||||
|
const char* search = strrchr(path, separator);
|
||||||
|
if (search == NULL) return path;
|
||||||
|
return search+1;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIO_createFilename_fromOutDir() :
|
/* FIO_createFilename_fromOutDir() :
|
||||||
* Takes a source file name and specified output directory, and
|
* Takes a source file name and specified output directory, and
|
||||||
* allocates memory for and returns a pointer to final path.
|
* allocates memory for and returns a pointer to final path.
|
||||||
* This function never returns an error (it may abort() in case of pb)
|
* This function never returns an error (it may abort() in case of pb)
|
||||||
*/
|
*/
|
||||||
static char*
|
static char*
|
||||||
FIO_createFilename_fromOutDir(const char* srcFilename, const char* outDirName, const size_t suffixLen)
|
FIO_createFilename_fromOutDir(const char* path, const char* outDirName, const size_t suffixLen)
|
||||||
{
|
{
|
||||||
const char* c, *filenameBegin;
|
const char* filenameStart;
|
||||||
char* filename, *result;
|
char separator;
|
||||||
size_t finalPathLen;
|
char* result;
|
||||||
|
|
||||||
#if defined(_MSC_VER) || defined(__MINGW32__) || defined (__MSVCRT__) /* windows support */
|
#if defined(_MSC_VER) || defined(__MINGW32__) || defined (__MSVCRT__) /* windows support */
|
||||||
c = "\\";
|
separator = '\\';
|
||||||
#else
|
#else
|
||||||
c = "/";
|
separator = '/';
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
finalPathLen = strlen(outDirName);
|
filenameStart = extractFilename(path, separator);
|
||||||
filenameBegin = strrchr(srcFilename, c[0]);
|
#if defined(_MSC_VER) || defined(__MINGW32__) || defined (__MSVCRT__) /* windows support */
|
||||||
if (filenameBegin == NULL) {
|
filenameStart = extractFilename(filenameStart, '/'); /* sometimes, '/' separator is also used on Windows (mingw+msys2) */
|
||||||
filename = (char*) malloc((strlen(srcFilename)+1) * sizeof(char));
|
#endif
|
||||||
if (!filename) {
|
|
||||||
EXM_THROW(30, "zstd: %s", strerror(errno));
|
|
||||||
}
|
|
||||||
strcpy(filename, srcFilename);
|
|
||||||
} else {
|
|
||||||
filename = (char*) malloc((strlen(filenameBegin+1)+1) * sizeof(char));
|
|
||||||
if (!filename) {
|
|
||||||
EXM_THROW(30, "zstd: %s", strerror(errno));
|
|
||||||
}
|
|
||||||
strcpy(filename, filenameBegin+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
finalPathLen += strlen(filename);
|
result = (char*) calloc(1, strlen(outDirName) + 1 + strlen(filenameStart) + suffixLen + 1);
|
||||||
result = (char*) malloc((finalPathLen+suffixLen+30) * sizeof(char));
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
free(filename);
|
EXM_THROW(30, "zstd: FIO_createFilename_fromOutDir: %s", strerror(errno));
|
||||||
EXM_THROW(30, "zstd: %s", strerror(errno));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(result, outDirName);
|
memcpy(result, outDirName, strlen(outDirName));
|
||||||
if (outDirName[strlen(outDirName)-1] == c[0]) {
|
if (outDirName[strlen(outDirName)-1] == separator) {
|
||||||
strcat(result, filename);
|
memcpy(result + strlen(outDirName), filenameStart, strlen(filenameStart));
|
||||||
} else {
|
} else {
|
||||||
strcat(result, c);
|
memcpy(result + strlen(outDirName), &separator, 1);
|
||||||
strcat(result, filename);
|
memcpy(result + strlen(outDirName) + 1, filenameStart, strlen(filenameStart));
|
||||||
}
|
}
|
||||||
|
|
||||||
free(filename);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +250,8 @@ clean:
|
|||||||
$(MAKE) -C $(ZSTDDIR) clean
|
$(MAKE) -C $(ZSTDDIR) clean
|
||||||
$(MAKE) -C $(PRGDIR) clean
|
$(MAKE) -C $(PRGDIR) clean
|
||||||
@$(RM) -fR $(TESTARTEFACT)
|
@$(RM) -fR $(TESTARTEFACT)
|
||||||
@$(RM) -f core *.o tmp* *.tmp result* *.gcda dictionary *.zst \
|
@$(RM) -rf tmp* # some test directories are named tmp*
|
||||||
|
@$(RM) core *.o *.tmp result* *.gcda dictionary *.zst \
|
||||||
$(PRGDIR)/zstd$(EXT) $(PRGDIR)/zstd32$(EXT) \
|
$(PRGDIR)/zstd$(EXT) $(PRGDIR)/zstd32$(EXT) \
|
||||||
fullbench$(EXT) fullbench32$(EXT) \
|
fullbench$(EXT) fullbench32$(EXT) \
|
||||||
fullbench-lib$(EXT) fullbench-dll$(EXT) \
|
fullbench-lib$(EXT) fullbench-dll$(EXT) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user