Changeset facf9dc in rtems-libbsd


Ignore:
Timestamp:
Oct 23, 2013, 2:10:26 PM (6 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, afaeccc05a556f6aa25ba044a7e49d6aa634a59e, freebsd-9.3, master
Children:
87fdc14
Parents:
0967858
git-author:
Sebastian Huber <sebastian.huber@…> (10/23/13 14:10:26)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:18:50)
Message:

Use select() from FreeBSD

Files:
4 edited

Legend:

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

    r0967858 rfacf9dc  
    9595static int      selscan(struct thread *, fd_mask **, fd_mask **, int);
    9696static int      selrescan(struct thread *, fd_mask **, fd_mask **);
    97 #ifndef __rtems__
    9897static void     selfdalloc(struct thread *, void *);
    99 #endif /* __rtems__ */
    10098static void     selfdfree(struct seltd *, struct selfd *);
    10199#ifndef __rtems__
     
    852850    fd_set *fd_ex, struct timeval *tvp, int abi_nfdbits)
    853851{
    854 #ifndef __rtems__
    855852        struct filedesc *fdp;
    856 #endif /* __rtems__ */
    857853        /*
    858854         * The magic 2048 here is chosen to be just enough for FD_SETSIZE
     
    867863        u_int nbufbytes, ncpbytes, ncpubytes, nfdbits;
    868864
    869 #ifdef __rtems__
    870         if (td == NULL)
    871                 return (ENOMEM);
    872 #endif /* __rtems__ */
    873865        if (nd < 0)
    874866                return (EINVAL);
     
    878870                nd = fdp->fd_lastfile + 1;
    879871#else /* __rtems__ */
     872        (void) fdp;
    880873        if (nd > rtems_libio_number_iops)
    881874                nd = rtems_libio_number_iops;
     
    10201013#ifdef __rtems__
    10211014int
    1022 select(int nfds, fd_set *restrict readfds, fd_set *__restrict writefds, fd_set
    1023     *__restrict errorfds, struct timeval *__restrict timeout)
     1015select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds,
     1016    struct timeval *timeout)
    10241017{
    10251018        struct thread *td = rtems_bsd_get_curthread_or_null();
    1026         int error = kern_select(td, nfds, readfds, writefds, errorfds, timeout,
    1027             NFDBITS);
     1019        int error;
     1020
     1021        if (td != NULL) {
     1022                error = kern_select(td, nfds, readfds, writefds, errorfds,
     1023                    timeout, NFDBITS);
     1024        } else {
     1025                error = ENOMEM;
     1026        }
    10281027
    10291028        if (error == 0) {
     
    10341033}
    10351034#endif /* __rtems__ */
    1036 #ifndef __rtems__
     1035
    10371036/*
    10381037 * Convert a select bit set to poll flags.
     
    11001099        return (n);
    11011100}
    1102 #endif /* __rtems__ */
    11031101
    11041102/*
     
    11091107selrescan(struct thread *td, fd_mask **ibits, fd_mask **obits)
    11101108{
    1111 #ifndef __rtems__
    11121109        struct filedesc *fdp;
    11131110        struct selinfo *si;
     
    11191116        int fd, ev, n, idx;
    11201117
     1118#ifndef __rtems__
    11211119        fdp = td->td_proc->p_fd;
     1120#else /* __rtems__ */
     1121        fdp = NULL;
     1122#endif /* __rtems__ */
    11221123        stp = td->td_sel;
    11231124        n = 0;
     
    11411142        td->td_retval[0] = n;
    11421143        return (0);
    1143 #else /* __rtems__ */
    1144         return (ENOMEM);
    1145 #endif /* __rtems__ */
    11461144}
    11471145
     
    11561154        int nfd;
    11571155{
    1158 #ifndef __rtems__
    11591156        struct filedesc *fdp;
    11601157        struct file *fp;
     
    11631160        int n, idx;
    11641161
     1162#ifndef __rtems__
    11651163        fdp = td->td_proc->p_fd;
     1164#else /* __rtems__ */
     1165        fdp = NULL;
     1166#endif /* __rtems__ */
    11661167        n = 0;
    11671168        for (idx = 0, fd = 0; fd < nfd; idx++) {
     
    11841185        td->td_retval[0] = n;
    11851186        return (0);
    1186 #else /* __rtems__ */
    1187         return (ENOMEM);
    1188 #endif /* __rtems__ */
    11891187}
    11901188
     
    14671465        return (error);
    14681466}
     1467#endif /* __rtems__ */
    14691468
    14701469/*
     
    14871486        stp->st_free2->sf_cookie = cookie;
    14881487}
    1489 #endif /* __rtems__ */
    14901488
    14911489static void
  • freebsd/sys/kern/sys_socket.c

    r0967858 rfacf9dc  
    326326#endif /* __rtems__ */
    327327
    328 #ifndef __rtems__
     328#ifdef __rtems__
     329static
     330#endif /* __rtems__ */
    329331int
    330332soo_poll(struct file *fp, int events, struct ucred *active_cred,
     
    339341                return (error);
    340342#endif
     343#ifndef __rtems__
    341344        return (sopoll(so, events, fp->f_cred, td));
     345#else /* __rtems__ */
     346        return (sopoll(so, events, NULL, td));
     347#endif /* __rtems__ */
     348}
     349#ifdef __rtems__
     350static int
     351rtems_bsd_soo_poll(rtems_libio_t *iop, int events)
     352{
     353        struct thread *td = rtems_bsd_get_curthread_or_null();
     354        struct file *fp = rtems_bsd_iop_to_fp(iop);
     355        int error;
     356
     357        if (td != NULL) {
     358                error = soo_poll(fp, events, NULL, td);
     359        } else {
     360                error = ENOMEM;
     361        }
     362
     363        return error;
    342364}
    343365#endif /* __rtems__ */
     
    452474        .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
    453475        .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
    454         .fcntl_h = rtems_filesystem_default_fcntl
     476        .fcntl_h = rtems_filesystem_default_fcntl,
     477        .poll_h = rtems_bsd_soo_poll
    455478};
    456479#endif /* __rtems__ */
  • freebsd/sys/sys/file.h

    r0967858 rfacf9dc  
    409409}
    410410
    411 #ifndef __rtems__
    412411static __inline int
    413412fo_poll(fp, events, active_cred, td)
     
    418417{
    419418
     419#ifndef __rtems__
    420420        return ((*fp->f_ops->fo_poll)(fp, events, active_cred, td));
    421 }
    422 
     421#else /* __rtems__ */
     422        (void) active_cred;
     423        (void) td;
     424
     425        return ((*fp->f_io.pathinfo.handlers->poll_h)(&fp->f_io, events));
     426#endif /* __rtems__ */
     427}
     428
     429#ifndef __rtems__
    423430static __inline int
    424431fo_stat(fp, sb, active_cred, td)
  • testsuite/syscalls01/test_main.c

    r0967858 rfacf9dc  
    3333#include <sys/types.h>
    3434#include <sys/stat.h>
     35#include <sys/select.h>
    3536#include <sys/socket.h>
    3637#include <sys/filio.h>
     
    12071208}
    12081209
     1210static void
     1211no_mem_socket_select(int fd)
     1212{
     1213        struct fd_set set;
     1214        int nfds;
     1215        int rv;
     1216
     1217        FD_ZERO(&set);
     1218        FD_SET(fd, &set);
     1219        nfds = fd + 1;
     1220
     1221        errno = 0;
     1222        rv = select(nfds, &set, NULL, NULL, NULL);
     1223        assert(rv == -1);
     1224        assert(errno == ENOMEM);
     1225}
     1226
     1227static void
     1228test_socket_select(void)
     1229{
     1230        rtems_resource_snapshot snapshot;
     1231        struct fd_set set;
     1232        int nfds;
     1233        int sd;
     1234        int rv;
     1235
     1236        puts("test socket select");
     1237
     1238        sd = socket(PF_INET, SOCK_DGRAM, 0);
     1239        assert(sd >= 0);
     1240
     1241        rv = close(sd);
     1242        assert(rv == 0);
     1243
     1244        FD_ZERO(&set);
     1245        FD_SET(sd, &set);
     1246        nfds = sd + 1;
     1247
     1248        errno = 0;
     1249        rv = select(nfds, &set, NULL, NULL, NULL);
     1250        assert(rv == -1);
     1251        assert(errno == EBADF);
     1252
     1253        rtems_resource_snapshot_take(&snapshot);
     1254
     1255        sd = socket(PF_INET, SOCK_DGRAM, 0);
     1256        assert(sd >= 0);
     1257
     1258        do_no_mem_test(no_mem_socket_select, sd);
     1259
     1260        FD_ZERO(&set);
     1261        nfds = -1;
     1262
     1263        errno = 0;
     1264        rv = select(nfds, &set, NULL, NULL, NULL);
     1265        assert(rv == -1);
     1266        assert(errno == EINVAL);
     1267
     1268        rv = close(sd);
     1269        assert(rv == 0);
     1270
     1271        FD_ZERO(&set);
     1272        FD_SET(sd, &set);
     1273        nfds = sd + 1;
     1274
     1275        errno = 0;
     1276        rv = select(nfds, &set, NULL, NULL, NULL);
     1277        assert(rv == -1);
     1278        assert(errno == EBADF);
     1279
     1280        assert(rtems_resource_snapshot_check(&snapshot));
     1281}
     1282
    12091283static const char prog_name[] = "prog";
    12101284
     
    14131487        test_socket_send_and_sendto_and_sendmsg();
    14141488        test_socket_recv_and_recvfrom_and_recvmsg();
     1489        test_socket_select();
    14151490
    14161491        test_bsd_program();
Note: See TracChangeset for help on using the changeset viewer.