mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
Avoid Calling setvbuf()
on Null File Pointer
This commit is contained in:
@ -644,18 +644,24 @@ FIO_openDstFile(FIO_ctx_t* fCtx, FIO_prefs_t* const prefs,
|
||||
#endif
|
||||
if (f == NULL) {
|
||||
DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
|
||||
} else {
|
||||
/* An increased buffer size can provide a significant performance
|
||||
* boost on some platforms. Note that providing a NULL buf with a
|
||||
* 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.
|
||||
* 2. Libc ignores the size when buf is NULL, in which case
|
||||
* 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.
|
||||
* In all cases due execution continues. For now, I believe that
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
/* An increased buffer size can provide a significant performance boost on some platforms.
|
||||
* Note that providing a NULL buf with a 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.
|
||||
* 2. Libc ignores the size when buf is NULL, in which case 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.
|
||||
* In all cases due execution continues. For now, I believe that 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);
|
||||
return f;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user