/* ISC license. */ #include #include #include #include #include #include #include size_t openwritevnclose_at (int dirfd, char const *file, struct iovec const *v, unsigned int n) { size_t r ; int fd = open_truncatb(dirfd, file) ; if (fd < 0) return 0 ; r = allwritev(fd, v, n) ; if (r < siovec_len(v, n) || fsync(fd) < 0) { int e = errno ; fd_close(fd) ; errno = e ; return r ; } fd_close(fd) ; return r ; }