MCPcopy Create free account
hub / github.com/F-Stack/f-stack / FIO_compressFilename_dstFile

Function FIO_compressFilename_dstFile

freebsd/contrib/zstd/programs/fileio.c:1586–1641  ·  view source on GitHub ↗

! FIO_compressFilename_dstFile() : * open dstFileName, or pass-through if ress.dstFile != NULL, * then start compression with FIO_compressFilename_internal(). * Manages source removal (--rm) and file permissions transfer. * note : ress.srcFile must be != NULL, * so reach this function through FIO_compressFilename_srcFile(). * @return : 0 : compression completed correctly, *

Source from the content-addressed store, hash-verified

1584 * 1 : pb
1585 */
1586static int FIO_compressFilename_dstFile(FIO_ctx_t* const fCtx,
1587 FIO_prefs_t* const prefs,
1588 cRess_t ress,
1589 const char* dstFileName,
1590 const char* srcFileName,
1591 int compressionLevel)
1592{
1593 int closeDstFile = 0;
1594 int result;
1595 stat_t statbuf;
1596 int transfer_permissions = 0;
1597 assert(ress.srcFile != NULL);
1598 if (ress.dstFile == NULL) {
1599 closeDstFile = 1;
1600 DISPLAYLEVEL(6, "FIO_compressFilename_dstFile: opening dst: %s \n", dstFileName);
1601 ress.dstFile = FIO_openDstFile(fCtx, prefs, srcFileName, dstFileName);
1602 if (ress.dstFile==NULL) return 1; /* could not open dstFileName */
1603 /* Must only be added after FIO_openDstFile() succeeds.
1604 * Otherwise we may delete the destination file if it already exists,
1605 * and the user presses Ctrl-C when asked if they wish to overwrite.
1606 */
1607 addHandler(dstFileName);
1608
1609 if ( strcmp (srcFileName, stdinmark)
1610 && UTIL_stat(srcFileName, &statbuf)
1611 && UTIL_isRegularFileStat(&statbuf) )
1612 transfer_permissions = 1;
1613 }
1614
1615 result = FIO_compressFilename_internal(fCtx, prefs, ress, dstFileName, srcFileName, compressionLevel);
1616
1617 if (closeDstFile) {
1618 FILE* const dstFile = ress.dstFile;
1619 ress.dstFile = NULL;
1620
1621 clearHandler();
1622
1623 DISPLAYLEVEL(6, "FIO_compressFilename_dstFile: closing dst: %s \n", dstFileName);
1624 if (fclose(dstFile)) { /* error closing dstFile */
1625 DISPLAYLEVEL(1, "zstd: %s: %s \n", dstFileName, strerror(errno));
1626 result=1;
1627 }
1628 if ( (result != 0) /* operation failure */
1629 && strcmp(dstFileName, stdoutmark) /* special case : don't remove() stdout */
1630 ) {
1631 FIO_removeFile(dstFileName); /* remove compression artefact; note don't do anything special if remove() fails */
1632 } else if (transfer_permissions) {
1633 DISPLAYLEVEL(6, "FIO_compressFilename_dstFile: transferring permissions into dst: %s \n", dstFileName);
1634 UTIL_setFileStat(dstFileName, &statbuf);
1635 } else {
1636 DISPLAYLEVEL(6, "FIO_compressFilename_dstFile: do not transfer permissions into dst: %s \n", dstFileName);
1637 }
1638 }
1639
1640 return result;
1641}
1642
1643/* List used to compare file extensions (used with --exclude-compressed flag)

Callers 1

Calls 9

FIO_openDstFileFunction · 0.85
addHandlerFunction · 0.85
strcmpFunction · 0.85
UTIL_statFunction · 0.85
UTIL_isRegularFileStatFunction · 0.85
clearHandlerFunction · 0.85
FIO_removeFileFunction · 0.85
UTIL_setFileStatFunction · 0.85

Tested by

no test coverage detected