#include <sys/uio.h>
#include <sys/queue.h>
-#include "xtio.h"
#include "sysio.h"
+#include "xtio.h"
#include "file.h"
#include "inode.h"
/*
* Check that it was opened with flags supporting the operation.
*/
- if (!(wr
- ? (fil->f_flags & (O_RDWR | O_WRONLY))
- : !(fil->f_flags & O_WRONLY)))
+ if (!F_CHKRW(fil, wr ? 'w' : 'r'))
return -EBADF;
ino = fil->f_ino;
cc =
_sysio_validx(xtv, xtv_count,
iov, iov_count,
-#if _LARGEFILE64_SOURCE && defined(O_LARGEFILE)
+#if defined(_LARGEFILE64_SOURCE) && defined(O_LARGEFILE)
(fil->f_flags & O_LARGEFILE) == 0
? LONG_MAX
:
SYSIO_INTERFACE_RETURN(ioctx, 0);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef ipread64v
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(ipreadv)),
SYSIO_INTERFACE_NAME(ipread64v))
static ssize_t
PREPEND(_, SYSIO_INTERFACE_NAME(preadv))(int fd,
const struct iovec *iov,
- size_t count,
+ _SYSIO_PREADV_T count,
_SYSIO_OFF_T offset)
{
struct file *fil;
SYSIO_INTERFACE_RETURN(err ? -1 : cc, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef pread64v
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(preadv)),
SYSIO_INTERFACE_NAME(pread64v))
ssize_t
SYSIO_INTERFACE_NAME(preadv)(int fd,
const struct iovec *iov,
- size_t count,
+ _SYSIO_PREADV_T count,
off_t offset)
{
SYSIO_INTERFACE_RETURN(ioctx, 0);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef ipread64
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(ipread)),
SYSIO_INTERFACE_NAME(ipread64))
SYSIO_INTERFACE_RETURN(err ? -1 : cc, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef pread64
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(pread)),
SYSIO_INTERFACE_NAME(pread64))
SYSIO_INTERFACE_ENTER;
fil = _sysio_fd_find(fd);
- if (!(fil && xtv_count))
+ if (!fil)
SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF);
+ /* Perform a check on the iov_count and xtv_count */
+ if ((iov_count == 0) || (xtv_count == 0))
+ SYSIO_INTERFACE_RETURN(IOID_FAIL, -EINVAL);
+
err =
_sysio_iiox(IIOXOP_READ(fil->f_ino),
fil,
SYSIO_INTERFACE_RETURN(err ? IOID_FAIL : ioctx, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef iread64x
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(ireadx)),
SYSIO_INTERFACE_NAME(iread64x))
#endif
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
ioid_t
SYSIO_INTERFACE_NAME(ireadx)(int fd,
const struct iovec *iov, size_t iov_count,
SYSIO_INTERFACE_ENTER;
fil = _sysio_fd_find(fd);
- if (!(fil && xtv_count))
+ if (!fil)
SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF);
+
+ /* Perform a check on the iov_count and xtv_count */
+ if ((iov_count == 0) || (xtv_count == 0))
+ SYSIO_INTERFACE_RETURN(IOID_FAIL, -EINVAL);
+
ixtv = ixtvent = malloc(xtv_count * sizeof(struct intnl_xtvec));
if (!ixtv)
SYSIO_INTERFACE_RETURN(IOID_FAIL, -ENOMEM);
xtv,
xtv_count)) == IOID_FAIL)
return -1;
- return iowait(ioid);
+ return SYSIO_INTERFACE_NAME(iowait)(ioid);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef iread64x
ssize_t
SYSIO_INTERFACE_NAME(read64x)(int fd,
xtv,
xtv_count)) == IOID_FAIL)
return -1;
- return iowait(ioid);
+ return SYSIO_INTERFACE_NAME(iowait)(ioid);
}
#endif
}
ssize_t
-SYSIO_INTERFACE_NAME(writev)(int fd, const struct iovec *iov, int count)
+SYSIO_INTERFACE_NAME(writev)(int fd, const struct iovec *iov,
+ int count)
{
struct file *fil;
struct intnl_xtvec xtvector;
SYSIO_INTERFACE_RETURN(ioctx, 0);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef ipwrite64v
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(ipwritev)),
SYSIO_INTERFACE_NAME(ipwrite64v))
static ssize_t
PREPEND(_, SYSIO_INTERFACE_NAME(pwritev))(int fd,
const struct iovec *iov,
- size_t count,
+ _SYSIO_PREADV_T count,
_SYSIO_OFF_T offset)
{
struct file *fil;
SYSIO_INTERFACE_RETURN(err ? -1 : cc, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef pwrite64v
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(pwritev)),
SYSIO_INTERFACE_NAME(pwrite64v))
ssize_t
SYSIO_INTERFACE_NAME(pwritev)(int fd,
const struct iovec *iov,
- size_t count,
+ _SYSIO_PREADV_T count,
off_t offset)
{
SYSIO_INTERFACE_RETURN(ioctx, 0);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef ipwrite64
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(ipwrite)),
SYSIO_INTERFACE_NAME(ipwrite64))
SYSIO_INTERFACE_RETURN(err ? -1 : cc, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef pwrite64
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(pwrite)),
SYSIO_INTERFACE_NAME(pwrite64))
SYSIO_INTERFACE_RETURN(err ? IOID_FAIL : ioctx, err);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef iwrite64x
sysio_sym_weak_alias(PREPEND(_, SYSIO_INTERFACE_NAME(iwritex)),
SYSIO_INTERFACE_NAME(iwrite64x))
#endif
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
ioid_t
SYSIO_INTERFACE_NAME(iwritex)(int fd,
const struct iovec *iov, size_t iov_count,
SYSIO_INTERFACE_ENTER;
fil = _sysio_fd_find(fd);
- if (!(fil && xtv_count))
+ if (!fil)
SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF);
+ /* Perform a check on the iov_count and xtv_count */
+ if ((iov_count == 0) || (xtv_count == 0))
+ SYSIO_INTERFACE_RETURN(IOID_FAIL, -EINVAL);
+
ixtv = ixtvent = malloc(xtv_count * sizeof(struct intnl_xtvec));
if (!ixtv)
SYSIO_INTERFACE_RETURN(IOID_FAIL, -ENOMEM);
xtv,
xtv_count)) == IOID_FAIL)
return -1;
- return iowait(ioid);
+ return SYSIO_INTERFACE_NAME(iowait)(ioid);
}
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#undef write64x
ssize_t
SYSIO_INTERFACE_NAME(write64x)(int fd,
xtv,
xtv_count)) == IOID_FAIL)
return -1;
- return iowait(ioid);
+ return SYSIO_INTERFACE_NAME(iowait)(ioid);
}
#endif