Changeset 08264c8 in rtems-libbsd for freebsd/sys/kern/sys_generic.c


Ignore:
Timestamp:
Oct 28, 2013, 8:54:33 AM (6 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, afaeccc05a556f6aa25ba044a7e49d6aa634a59e, freebsd-9.3, master
Children:
795c5e6
Parents:
c33de69
git-author:
Sebastian Huber <sebastian.huber@…> (10/28/13 08:54:33)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:18:52)
Message:

Use poll() from FreeBSD

File:
1 edited

Legend:

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

    rc33de69 r08264c8  
    8787#endif /* __rtems__ */
    8888
    89 #ifndef __rtems__
    9089static int      pollout(struct thread *, struct pollfd *, struct pollfd *,
    9190                    u_int);
    9291static int      pollscan(struct thread *, struct pollfd *, u_int);
    9392static int      pollrescan(struct thread *);
    94 #endif /* __rtems__ */
    9593static int      selscan(struct thread *, fd_mask **, fd_mask **, int);
    9694static int      selrescan(struct thread *, fd_mask **, fd_mask **);
     
    11871185}
    11881186
    1189 #ifndef __rtems__
    11901187#ifndef _SYS_SYSPROTO_H_
    11911188struct poll_args {
     
    11951192};
    11961193#endif
     1194#ifndef __rtems__
    11971195int
    11981196poll(td, uap)
     1197#else /* __rtems__ */
     1198static int
     1199rtems_bsd_poll(td, uap)
     1200#endif /* __rtems__ */
    11991201        struct thread *td;
    12001202        struct poll_args *uap;
     
    12081210
    12091211        nfds = uap->nfds;
     1212#ifndef __rtems__
    12101213        if (nfds > maxfilesperproc && nfds > FD_SETSIZE)
     1214#else /* __rtems__ */
     1215        if (nfds > rtems_libio_number_iops)
     1216#endif /* __rtems__ */
    12111217                return (EINVAL);
    12121218        ni = nfds * sizeof(struct pollfd);
     
    12721278        return (error);
    12731279}
     1280#ifdef __rtems__
     1281int
     1282poll(struct pollfd fds[], nfds_t nfds, int timeout)
     1283{
     1284        struct thread *td = rtems_bsd_get_curthread_or_null();
     1285        struct poll_args ua = {
     1286                .fds = &fds[0],
     1287                .nfds = nfds,
     1288                .timeout = timeout
     1289        };
     1290        int error;
     1291
     1292        if (td != NULL) {
     1293                error = rtems_bsd_poll(td, &ua);
     1294        } else {
     1295                error = ENOMEM;
     1296        }
     1297
     1298        if (error == 0) {
     1299                return td->td_retval[0];
     1300        } else {
     1301                rtems_set_errno_and_return_minus_one(error);
     1302        }
     1303}
     1304#endif /* __rtems__ */
    12741305
    12751306static int
     
    12861317
    12871318        n = 0;
     1319#ifndef __rtems__
    12881320        fdp = td->td_proc->p_fd;
     1321#else /* __rtems__ */
     1322        fdp = NULL;
     1323#endif /* __rtems__ */
    12891324        stp = td->td_sel;
    12901325        FILEDESC_SLOCK(fdp);
     
    12961331                if (si != NULL)
    12971332                        continue;
     1333#ifndef __rtems__
    12981334                fp = fdp->fd_ofiles[fd->fd];
     1335#else /* __rtems__ */
     1336                fp = fget_unlocked(fdp, fd->fd);
     1337#endif /* __rtems__ */
    12991338                if (fp == NULL) {
    13001339                        fd->revents = POLLNVAL;
     
    13481387        u_int nfd;
    13491388{
     1389#ifndef __rtems__
    13501390        struct filedesc *fdp = td->td_proc->p_fd;
     1391#else /* __rtems__ */
     1392        struct filedesc *fdp = NULL;
     1393#endif /* __rtems__ */
    13511394        int i;
    13521395        struct file *fp;
     
    13551398        FILEDESC_SLOCK(fdp);
    13561399        for (i = 0; i < nfd; i++, fds++) {
     1400#ifndef __rtems__
    13571401                if (fds->fd >= fdp->fd_nfiles) {
     1402#else /* __rtems__ */
     1403                if (fds->fd >= rtems_libio_number_iops) {
     1404#endif /* __rtems__ */
    13581405                        fds->revents = POLLNVAL;
    13591406                        n++;
     
    13611408                        fds->revents = 0;
    13621409                } else {
     1410#ifndef __rtems__
    13631411                        fp = fdp->fd_ofiles[fds->fd];
     1412#else /* __rtems__ */
     1413                        fp = fget_unlocked(fdp, fds->fd);
     1414#endif /* __rtems__ */
    13641415                        if (fp == NULL) {
    13651416                                fds->revents = POLLNVAL;
     
    13901441}
    13911442
     1443#ifndef __rtems__
    13921444/*
    13931445 * OpenBSD poll system call.
Note: See TracChangeset for help on using the changeset viewer.