Change configure compile probes to fail on implicit declarations. This
(correctly) stops us from enabling fdatasync on OSX which was
problematic because we were actually calling a syscall stub with
arguments different to what was declared in its prototype (see
https://github.com/gbrault/picoc/issues/145#issuecomment-
89734655 and
https://gitlab.freedesktop.org/xdg/shared-mime-info/issues/7 ).
Fixes: https://github.com/axboe/fio/issues/834 ("Drop macOS support for
fdatasync")
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
.. option:: fdatasync=int
Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and
- not metadata blocks. In Windows, FreeBSD, and DragonFlyBSD there is no
+ not metadata blocks. In Windows, FreeBSD, DragonFlyBSD or OSX there is no
:manpage:`fdatasync(2)` so this falls back to using :manpage:`fsync(2)`.
Defaults to 0, which means fio does not periodically issue and wait for a
data-only sync to complete.
}
compile_object() {
- do_cc $CFLAGS -c -o $TMPO $TMPC
+ do_cc $CFLAGS -Werror-implicit-function-declaration -c -o $TMPO $TMPC
}
compile_prog() {
local_cflags="$1"
local_ldflags="$2 $LIBS"
echo "Compiling test case $3" >> config.log
- do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
+ do_cc $CFLAGS -Werror-implicit-function-declaration $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
}
feature_not_found() {
.TP
.BI fdatasync \fR=\fPint
Like \fBfsync\fR but uses \fBfdatasync\fR\|(2) to only sync data and
-not metadata blocks. In Windows, FreeBSD, and DragonFlyBSD there is no
+not metadata blocks. In Windows, FreeBSD, DragonFlyBSD or OSX there is no
\fBfdatasync\fR\|(2) so this falls back to using \fBfsync\fR\|(2).
Defaults to 0, which means fio does not periodically issue and wait for a
data\-only sync to complete.
}
#endif
-/*
- * For some reason, there's no header definition for fdatasync(), even
- * if it exists.
- */
-extern int fdatasync(int fd);
-
static inline bool fio_fallocate(struct fio_file *f, uint64_t offset, uint64_t len)
{
fstore_t store = {F_ALLOCATEALL, F_PEOFPOSMODE, offset, len};