1/* 2** Copyright 2004, Axel D��rfler, axeld@pinc-software.de. All rights reserved. 3** Distributed under the terms of the Haiku License. 4*/ 5 6 7#include <syscalls.h> 8 9#include <sys/uio.h> 10#include <errno.h> 11 12#include <errno_private.h> 13 14 15#define RETURN_AND_SET_ERRNO(err) \ 16 if (err < 0) { \ 17 __set_errno(err); \ 18 return -1; \ 19 } \ 20 return err; 21 22 23ssize_t 24readv(int fd, const struct iovec *vecs, size_t count) 25{ 26 ssize_t bytes = _kern_readv(fd, -1, vecs, count); 27 28 RETURN_AND_SET_ERRNO(bytes); 29} 30 31 32ssize_t 33readv_pos(int fd, off_t pos, const struct iovec *vecs, size_t count) 34{ 35 ssize_t bytes; 36 if (pos < 0) { 37 __set_errno(B_BAD_VALUE); 38 return -1; 39 } 40 bytes = _kern_readv(fd, pos, vecs, count); 41 42 RETURN_AND_SET_ERRNO(bytes); 43} 44 45 46ssize_t 47writev(int fd, const struct iovec *vecs, size_t count) 48{ 49 ssize_t bytes = _kern_writev(fd, -1, vecs, count); 50 51 RETURN_AND_SET_ERRNO(bytes); 52} 53 54 55ssize_t 56writev_pos(int fd, off_t pos, const struct iovec *vecs, size_t count) 57{ 58 ssize_t bytes; 59 if (pos < 0) { 60 __set_errno(B_BAD_VALUE); 61 return -1; 62 } 63 bytes = _kern_writev(fd, pos, vecs, count); 64 65 RETURN_AND_SET_ERRNO(bytes); 66} 67 68