1
0
mirror of https://github.com/facebook/zstd.git synced 2025-07-30 22:23:13 +03:00

Avoid Calling setvbuf() on Null File Pointer

This commit is contained in:
W. Felix Handte
2023-03-09 12:47:40 -05:00
parent 50e8f55e7d
commit c4c3e11958

View File

@ -644,18 +644,24 @@ FIO_openDstFile(FIO_ctx_t* fCtx, FIO_prefs_t* const prefs,
#endif #endif
if (f == NULL) { if (f == NULL) {
DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno)); DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
} } else {
/* An increased buffer size can provide a significant performance boost on some platforms. /* An increased buffer size can provide a significant performance
* Note that providing a NULL buf with a size that's not 0 is not defined in ANSI C, but is defined * boost on some platforms. Note that providing a NULL buf with a
* in an extension. There are three possibilities here - * size that's not 0 is not defined in ANSI C, but is defined in an
* extension. There are three possibilities here:
* 1. Libc supports the extended version and everything is good. * 1. Libc supports the extended version and everything is good.
* 2. Libc ignores the size when buf is NULL, in which case everything will continue as if we didn't * 2. Libc ignores the size when buf is NULL, in which case
* call `setvbuf`. * everything will continue as if we didn't call `setvbuf()`.
* 3. We fail the call and execution continues but a warning message might be shown. * 3. We fail the call and execution continues but a warning
* In all cases due execution continues. For now, I believe that this is a more cost-effective * message might be shown.
* solution than managing the buffers allocations ourselves (will require an API change). */ * In all cases due execution continues. For now, I believe that
if(setvbuf(f, NULL, _IOFBF, 1 MB)) * this is a more cost-effective solution than managing the buffers
* allocations ourselves (will require an API change).
*/
if (setvbuf(f, NULL, _IOFBF, 1 MB)) {
DISPLAYLEVEL(2, "Warning: setvbuf failed for %s\n", dstFileName); DISPLAYLEVEL(2, "Warning: setvbuf failed for %s\n", dstFileName);
}
}
return f; return f;
} }
} }