#include "db_config.h"
#include "db_int.h"
int
__qnx_fsync(fhp)
DB_FH *fhp;
{
int ret;
int fd, unset, flags;
fd = fhp->fd;
unset = 1;
ret = flags = 0;
if (F_ISSET(fhp, DB_FH_REGION))
{
RETRY_CHK(fcntl(fd, F_GETFL), ret);
if (ret == -1)
goto err;
if (ret & O_DSYNC != 0)
unset = 0;
else {
ret |= O_DSYNC;
flags = ret;
RETRY_CHK(fcntl(fd, F_SETFL, flags), ret);
if (ret == -1)
goto err;
}
RETRY_CHK(write(fd, "", 0), ret);
if (ret == -1)
goto err;
if (unset) {
RETRY_CHK(fcntl(fd, F_GETFL), ret);
if (ret == -1)
goto err;
ret &= ~O_DSYNC;
flags = ret;
RETRY_CHK(fcntl(fd, F_SETFL, flags), ret);
if (ret == -1)
goto err;
}
} else
RETRY_CHK(fdatasync(fd), ret);
err: return (ret);
}