! FIO_compressFilename_srcFile() : * @return : 0 : compression completed correctly, * 1 : missing or pb opening srcFileName */
| 1661 | * 1 : missing or pb opening srcFileName |
| 1662 | */ |
| 1663 | static int |
| 1664 | FIO_compressFilename_srcFile(FIO_ctx_t* const fCtx, |
| 1665 | FIO_prefs_t* const prefs, |
| 1666 | cRess_t ress, |
| 1667 | const char* dstFileName, |
| 1668 | const char* srcFileName, |
| 1669 | int compressionLevel) |
| 1670 | { |
| 1671 | int result; |
| 1672 | DISPLAYLEVEL(6, "FIO_compressFilename_srcFile: %s \n", srcFileName); |
| 1673 | |
| 1674 | /* ensure src is not a directory */ |
| 1675 | if (UTIL_isDirectory(srcFileName)) { |
| 1676 | DISPLAYLEVEL(1, "zstd: %s is a directory -- ignored \n", srcFileName); |
| 1677 | return 1; |
| 1678 | } |
| 1679 | |
| 1680 | /* ensure src is not the same as dict (if present) */ |
| 1681 | if (ress.dictFileName != NULL && UTIL_isSameFile(srcFileName, ress.dictFileName)) { |
| 1682 | DISPLAYLEVEL(1, "zstd: cannot use %s as an input file and dictionary \n", srcFileName); |
| 1683 | return 1; |
| 1684 | } |
| 1685 | |
| 1686 | /* Check if "srcFile" is compressed. Only done if --exclude-compressed flag is used |
| 1687 | * YES => ZSTD will skip compression of the file and will return 0. |
| 1688 | * NO => ZSTD will resume with compress operation. |
| 1689 | */ |
| 1690 | if (prefs->excludeCompressedFiles == 1 && UTIL_isCompressedFile(srcFileName, compressedFileExtensions)) { |
| 1691 | DISPLAYLEVEL(4, "File is already compressed : %s \n", srcFileName); |
| 1692 | return 0; |
| 1693 | } |
| 1694 | |
| 1695 | ress.srcFile = FIO_openSrcFile(srcFileName); |
| 1696 | if (ress.srcFile == NULL) return 1; /* srcFile could not be opened */ |
| 1697 | |
| 1698 | result = FIO_compressFilename_dstFile(fCtx, prefs, ress, dstFileName, srcFileName, compressionLevel); |
| 1699 | |
| 1700 | fclose(ress.srcFile); |
| 1701 | ress.srcFile = NULL; |
| 1702 | if ( prefs->removeSrcFile /* --rm */ |
| 1703 | && result == 0 /* success */ |
| 1704 | && strcmp(srcFileName, stdinmark) /* exception : don't erase stdin */ |
| 1705 | ) { |
| 1706 | /* We must clear the handler, since after this point calling it would |
| 1707 | * delete both the source and destination files. |
| 1708 | */ |
| 1709 | clearHandler(); |
| 1710 | if (FIO_removeFile(srcFileName)) |
| 1711 | EXM_THROW(1, "zstd: %s: %s", srcFileName, strerror(errno)); |
| 1712 | } |
| 1713 | return result; |
| 1714 | } |
| 1715 | |
| 1716 | int FIO_compressFilename(FIO_ctx_t* const fCtx, FIO_prefs_t* const prefs, const char* dstFileName, |
| 1717 | const char* srcFileName, const char* dictFileName, |
no test coverage detected