Changeset 0913210 in rtems-libbsd


Ignore:
Timestamp:
Jul 28, 2017, 6:36:33 AM (2 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
fd86c091b97759106da7355ce1dd81ebe030e285, f020f08430150c1656a0ad0a1de13699db9b980b
Children:
17ab62c
Parents:
b43517b
git-author:
Sebastian Huber <sebastian.huber@…> (07/28/17 06:36:33)
git-committer:
Sebastian Huber <sebastian.huber@…> (07/28/17 06:46:18)
Message:

SOCKET(2): Add missing file handler

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/kern/sys_socket.c

    rb43517b r0913210  
    172172        }
    173173}
     174
     175static ssize_t
     176rtems_bsd_soo_readv(rtems_libio_t *iop, const struct iovec *iov,
     177    int iovcnt, ssize_t total)
     178{
     179        struct thread *td = rtems_bsd_get_curthread_or_null();
     180        struct file *fp = rtems_bsd_iop_to_fp(iop);
     181        struct uio auio = {
     182                .uio_iov = __DECONST(struct iovec *, iov),
     183                .uio_iovcnt = iovcnt,
     184                .uio_offset = 0,
     185                .uio_resid = total,
     186                .uio_segflg = UIO_USERSPACE,
     187                .uio_rw = UIO_READ,
     188                .uio_td = td
     189        };
     190        int error;
     191
     192        if (td != NULL) {
     193                error = soo_read(fp, &auio, NULL, 0, NULL);
     194        } else {
     195                error = ENOMEM;
     196        }
     197
     198        if (error == 0) {
     199                return (total - auio.uio_resid);
     200        } else {
     201                rtems_set_errno_and_return_minus_one(error);
     202        }
     203}
    174204#endif /* __rtems__ */
    175205
     
    231261        if (error == 0) {
    232262                return (count - auio.uio_resid);
     263        } else {
     264                rtems_set_errno_and_return_minus_one(error);
     265        }
     266}
     267
     268static ssize_t
     269rtems_bsd_soo_writev(rtems_libio_t *iop, const struct iovec *iov,
     270    int iovcnt, ssize_t total)
     271{
     272        struct thread *td = rtems_bsd_get_curthread_or_null();
     273        struct file *fp = rtems_bsd_iop_to_fp(iop);
     274        struct uio auio = {
     275                .uio_iov = __DECONST(struct iovec *, iov),
     276                .uio_iovcnt = iovcnt,
     277                .uio_offset = 0,
     278                .uio_resid = total,
     279                .uio_segflg = UIO_USERSPACE,
     280                .uio_rw = UIO_WRITE,
     281                .uio_td = td
     282        };
     283        int error;
     284
     285        if (td != NULL) {
     286                error = soo_write(fp, &auio, NULL, 0, NULL);
     287        } else {
     288                error = ENOMEM;
     289        }
     290
     291        if (error == 0) {
     292                return (total - auio.uio_resid);
    233293        } else {
    234294                rtems_set_errno_and_return_minus_one(error);
     
    10191079        .fcntl_h = rtems_bsd_soo_fcntl,
    10201080        .poll_h = rtems_bsd_soo_poll,
    1021         .kqfilter_h = rtems_bsd_soo_kqfilter
     1081        .kqfilter_h = rtems_bsd_soo_kqfilter,
     1082        .readv_h = rtems_bsd_soo_readv,
     1083        .writev_h = rtems_bsd_soo_writev,
     1084        .mmap_h = rtems_filesystem_default_mmap
    10221085};
    10231086#endif /* __rtems__ */
Note: See TracChangeset for help on using the changeset viewer.