mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-07-23 12:10:26 +08:00
SOCKET(2): Add missing file handler
This commit is contained in:
parent
b43517be37
commit
091321081a
@ -171,6 +171,36 @@ rtems_bsd_soo_read(rtems_libio_t *iop, void *buffer, size_t count)
|
||||
rtems_set_errno_and_return_minus_one(error);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
rtems_bsd_soo_readv(rtems_libio_t *iop, const struct iovec *iov,
|
||||
int iovcnt, ssize_t total)
|
||||
{
|
||||
struct thread *td = rtems_bsd_get_curthread_or_null();
|
||||
struct file *fp = rtems_bsd_iop_to_fp(iop);
|
||||
struct uio auio = {
|
||||
.uio_iov = __DECONST(struct iovec *, iov),
|
||||
.uio_iovcnt = iovcnt,
|
||||
.uio_offset = 0,
|
||||
.uio_resid = total,
|
||||
.uio_segflg = UIO_USERSPACE,
|
||||
.uio_rw = UIO_READ,
|
||||
.uio_td = td
|
||||
};
|
||||
int error;
|
||||
|
||||
if (td != NULL) {
|
||||
error = soo_read(fp, &auio, NULL, 0, NULL);
|
||||
} else {
|
||||
error = ENOMEM;
|
||||
}
|
||||
|
||||
if (error == 0) {
|
||||
return (total - auio.uio_resid);
|
||||
} else {
|
||||
rtems_set_errno_and_return_minus_one(error);
|
||||
}
|
||||
}
|
||||
#endif /* __rtems__ */
|
||||
|
||||
#ifdef __rtems__
|
||||
@ -234,6 +264,36 @@ rtems_bsd_soo_write(rtems_libio_t *iop, const void *buffer, size_t count)
|
||||
rtems_set_errno_and_return_minus_one(error);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
rtems_bsd_soo_writev(rtems_libio_t *iop, const struct iovec *iov,
|
||||
int iovcnt, ssize_t total)
|
||||
{
|
||||
struct thread *td = rtems_bsd_get_curthread_or_null();
|
||||
struct file *fp = rtems_bsd_iop_to_fp(iop);
|
||||
struct uio auio = {
|
||||
.uio_iov = __DECONST(struct iovec *, iov),
|
||||
.uio_iovcnt = iovcnt,
|
||||
.uio_offset = 0,
|
||||
.uio_resid = total,
|
||||
.uio_segflg = UIO_USERSPACE,
|
||||
.uio_rw = UIO_WRITE,
|
||||
.uio_td = td
|
||||
};
|
||||
int error;
|
||||
|
||||
if (td != NULL) {
|
||||
error = soo_write(fp, &auio, NULL, 0, NULL);
|
||||
} else {
|
||||
error = ENOMEM;
|
||||
}
|
||||
|
||||
if (error == 0) {
|
||||
return (total - auio.uio_resid);
|
||||
} else {
|
||||
rtems_set_errno_and_return_minus_one(error);
|
||||
}
|
||||
}
|
||||
#endif /* __rtems__ */
|
||||
|
||||
#ifdef __rtems__
|
||||
@ -1018,6 +1078,9 @@ const rtems_filesystem_file_handlers_r socketops = {
|
||||
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
|
||||
.fcntl_h = rtems_bsd_soo_fcntl,
|
||||
.poll_h = rtems_bsd_soo_poll,
|
||||
.kqfilter_h = rtems_bsd_soo_kqfilter
|
||||
.kqfilter_h = rtems_bsd_soo_kqfilter,
|
||||
.readv_h = rtems_bsd_soo_readv,
|
||||
.writev_h = rtems_bsd_soo_writev,
|
||||
.mmap_h = rtems_filesystem_default_mmap
|
||||
};
|
||||
#endif /* __rtems__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user