if (UTIL_isRegularFile(dstFileName)) {
/* Check if destination file already exists */
- FILE* const fCheck = fopen( dstFileName, "rb" );
#if !defined(_WIN32)
/* this test does not work on Windows :
* `NUL` and `nul` are detected as regular files */
dstFileName);
}
#endif
- if (fCheck != NULL) { /* dst file exists, authorization prompt */
- fclose(fCheck);
- if (!prefs->overwrite) {
- if (g_display_prefs.displayLevel <= 1) {
- /* No interaction possible */
- DISPLAY("zstd: %s already exists; not overwritten \n",
- dstFileName);
- return NULL;
- }
- DISPLAY("zstd: %s already exists; ", dstFileName);
- if (UTIL_requireUserConfirmation("overwrite (y/n) ? ", "Not overwritten \n", "yY", fCtx->hasStdinInput))
- return NULL;
+ if (!prefs->overwrite) {
+ if (g_display_prefs.displayLevel <= 1) {
+ /* No interaction possible */
+ DISPLAY("zstd: %s already exists; not overwritten \n",
+ dstFileName);
+ return NULL;
}
- /* need to unlink */
- FIO_removeFile(dstFileName);
- } }
+ DISPLAY("zstd: %s already exists; ", dstFileName);
+ if (UTIL_requireUserConfirmation("overwrite (y/n) ? ", "Not overwritten \n", "yY", fCtx->hasStdinInput))
+ return NULL;
+ }
+ /* need to unlink */
+ FIO_removeFile(dstFileName);
+ }
{ const int fd = open(dstFileName, O_WRONLY|O_CREAT|O_TRUNC, mode);
FILE* f = NULL;
rm -f tmp1.zst tmp2.zst tmp1.out tmp2.out
+ println "test : check permissions on pre-existing output file in compression "
+ chmod 0600 tmp1
+ touch tmp1.zst
+ chmod 0400 tmp1.zst
+ zstd -f tmp1 -o tmp1.zst
+ assertFilePermissions tmp1.zst 600
+ println "test : check permissions on pre-existing output file in decompression "
+ chmod 0400 tmp1.zst
+ touch tmp1.out
+ chmod 0200 tmp1.out
+ zstd -f -d tmp1.zst -o tmp1.out
+ assertFilePermissions tmp1.out 400
+
+ rm -f tmp1.zst tmp1.out
+
umask 0666
chmod 0666 tmp1 tmp2