FIO_determineCompressedName() : * create a destination filename for compressed srcFileName. * @return a pointer to it. * This function never returns an error (it may abort() in case of pb) */
| 1732 | * This function never returns an error (it may abort() in case of pb) |
| 1733 | */ |
| 1734 | static const char* |
| 1735 | FIO_determineCompressedName(const char* srcFileName, const char* outDirName, const char* suffix) |
| 1736 | { |
| 1737 | static size_t dfnbCapacity = 0; |
| 1738 | static char* dstFileNameBuffer = NULL; /* using static allocation : this function cannot be multi-threaded */ |
| 1739 | char* outDirFilename = NULL; |
| 1740 | size_t sfnSize = strlen(srcFileName); |
| 1741 | size_t const srcSuffixLen = strlen(suffix); |
| 1742 | if (outDirName) { |
| 1743 | outDirFilename = FIO_createFilename_fromOutDir(srcFileName, outDirName, srcSuffixLen); |
| 1744 | sfnSize = strlen(outDirFilename); |
| 1745 | assert(outDirFilename != NULL); |
| 1746 | } |
| 1747 | |
| 1748 | if (dfnbCapacity <= sfnSize+srcSuffixLen+1) { |
| 1749 | /* resize buffer for dstName */ |
| 1750 | free(dstFileNameBuffer); |
| 1751 | dfnbCapacity = sfnSize + srcSuffixLen + 30; |
| 1752 | dstFileNameBuffer = (char*)malloc(dfnbCapacity); |
| 1753 | if (!dstFileNameBuffer) { |
| 1754 | EXM_THROW(30, "zstd: %s", strerror(errno)); |
| 1755 | } |
| 1756 | } |
| 1757 | assert(dstFileNameBuffer != NULL); |
| 1758 | |
| 1759 | if (outDirFilename) { |
| 1760 | memcpy(dstFileNameBuffer, outDirFilename, sfnSize); |
| 1761 | free(outDirFilename); |
| 1762 | } else { |
| 1763 | memcpy(dstFileNameBuffer, srcFileName, sfnSize); |
| 1764 | } |
| 1765 | memcpy(dstFileNameBuffer+sfnSize, suffix, srcSuffixLen+1 /* Include terminating null */); |
| 1766 | return dstFileNameBuffer; |
| 1767 | } |
| 1768 | |
| 1769 | static unsigned long long FIO_getLargestFileSize(const char** inFileNames, unsigned nbFiles) |
| 1770 | { |
no test coverage detected