return total;
}
-ssize_t writev_in_full(int fd, struct iovec *iov, int iovcnt)
-{
- ssize_t total_written = 0;
-
- while (iovcnt) {
- ssize_t bytes_written = writev(fd, iov, iovcnt);
- if (bytes_written < 0) {
- if (errno == EINTR || errno == EAGAIN)
- continue;
- return -1;
- }
- if (!bytes_written) {
- errno = ENOSPC;
- return -1;
- }
-
- total_written += bytes_written;
-
- /*
- * We first need to discard any iovec entities that have been
- * fully written.
- */
- while (iovcnt && (size_t)bytes_written >= iov->iov_len) {
- bytes_written -= iov->iov_len;
- iov++;
- iovcnt--;
- }
-
- /*
- * Finally, we need to adjust the last iovec in case we have
- * performed a partial write.
- */
- if (iovcnt && bytes_written) {
- iov->iov_base = (char *) iov->iov_base + bytes_written;
- iov->iov_len -= bytes_written;
- }
- }
-
- return total_written;
-}
-
ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset)
{
char *p = buf;
ssize_t write_in_full(int fd, const void *buf, size_t count);
ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset);
-/*
- * Try to write all iovecs. Returns -1 in case an error occurred with a proper
- * errno set, the number of bytes written otherwise.
- *
- * Note that the iovec will be modified as a result of this call to adjust for
- * partial writes!
- */
-ssize_t writev_in_full(int fd, struct iovec *iov, int iovcnt);
-
static inline ssize_t write_str_in_full(int fd, const char *str)
{
return write_in_full(fd, str, strlen(str));
}
}
-void writev_or_die(int fd, struct iovec *iov, int iovlen)
-{
- if (writev_in_full(fd, iov, iovlen) < 0) {
- check_pipe(errno);
- die_errno("writev error");
- }
-}
-
void fwrite_or_die(FILE *f, const void *buf, size_t count)
{
if (fwrite(buf, 1, count, f) != count)
void fwrite_or_die(FILE *f, const void *buf, size_t count);
void fflush_or_die(FILE *f);
void write_or_die(int fd, const void *buf, size_t count);
-void writev_or_die(int fd, struct iovec *iov, int iovlen);
/*
* These values are used to help identify parts of a repository to fsync.