Changeset d1558f3 in rtems-libbsd


Ignore:
Timestamp:
Nov 16, 2015, 8:51:44 AM (4 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11
Children:
af60212
Parents:
5aa22c6
git-author:
Sebastian Huber <sebastian.huber@…> (11/16/15 08:51:44)
git-committer:
Sebastian Huber <sebastian.huber@…> (11/16/15 08:54:29)
Message:

SOCKETPAIR(2): Port to RTEMS

Files:
4 edited

Legend:

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

    r5aa22c6 rd1558f3  
    816816}
    817817
    818 #ifndef __rtems__
    819818int
    820819kern_socketpair(struct thread *td, int domain, int type, int protocol,
    821820    int *rsv)
    822821{
     822#ifndef __rtems__
    823823        struct filedesc *fdp = td->td_proc->p_fd;
     824#endif /* __rtems__ */
    824825        struct file *fp1, *fp2;
    825826        struct socket *so1, *so2;
     
    830831        oflag = 0;
    831832        fflag = 0;
     833#ifndef __rtems__
    832834        if ((type & SOCK_CLOEXEC) != 0) {
    833835                type &= ~SOCK_CLOEXEC;
    834836                oflag |= O_CLOEXEC;
    835837        }
     838#endif /* __rtems__ */
    836839        if ((type & SOCK_NONBLOCK) != 0) {
    837840                type &= ~SOCK_NONBLOCK;
     
    899902}
    900903
     904#ifdef __rtems__
     905static
     906#endif /* __rtems__ */
    901907int
    902908sys_socketpair(struct thread *td, struct socketpair_args *uap)
    903909{
     910#ifndef __rtems__
    904911        int error, sv[2];
     912#else /* __rtems__ */
     913        int error;
     914        int *sv = uap->rsv;
     915#endif /* __rtems__ */
    905916
    906917        error = kern_socketpair(td, uap->domain, uap->type,
     
    908919        if (error)
    909920                return (error);
     921#ifndef __rtems__
    910922        error = copyout(sv, uap->rsv, 2 * sizeof(int));
    911923        if (error) {
     
    913925                (void)kern_close(td, sv[1]);
    914926        }
    915         return (error);
     927#endif /* __rtems__ */
     928        return (error);
     929}
     930#ifdef __rtems__
     931int
     932socketpair(int domain, int type, int protocol, int *socket_vector)
     933{
     934        struct thread *td = rtems_bsd_get_curthread_or_null();
     935        struct socketpair_args ua = {
     936                .domain = domain,
     937                .type = type,
     938                .protocol = protocol,
     939                .rsv = socket_vector
     940        };
     941        int error;
     942
     943        if (td != NULL) {
     944                error = sys_socketpair(td, &ua);
     945        } else {
     946                error = ENOMEM;
     947        }
     948
     949        return rtems_bsd_error_to_status_and_errno(error);
    916950}
    917951#endif /* __rtems__ */
  • freebsd/sys/sys/sysproto.h

    r5aa22c6 rd1558f3  
    482482        char how_l_[PADL_(int)]; int how; char how_r_[PADR_(int)];
    483483};
    484 #ifndef __rtems__
    485484struct socketpair_args {
    486485        char domain_l_[PADL_(int)]; int domain; char domain_r_[PADR_(int)];
     
    489488        char rsv_l_[PADL_(int *)]; int * rsv; char rsv_r_[PADR_(int *)];
    490489};
     490#ifndef __rtems__
    491491struct mkdir_args {
    492492        char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
  • rtemsbsd/include/machine/rtems-bsd-syscall-api.h

    r5aa22c6 rd1558f3  
    9999int     socket(int, int, int);
    100100
     101int     socketpair(int, int, int, int *);
     102
    101103int     sysctl(const int *, u_int, void *, size_t *, const void *, size_t);
    102104
  • testsuite/syscalls01/test_main.c

    r5aa22c6 rd1558f3  
    13601360        assert(rtems_resource_snapshot_check(&snapshot));
    13611361}
     1362static void
     1363no_mem_socket_pair(int fd)
     1364{
     1365        int sd[2];
     1366        int rv;
     1367
     1368        errno = 0;
     1369        rv = socketpair(PF_UNIX, SOCK_DGRAM, 0, &sd[0]);
     1370        assert(rv == -1);
     1371        assert(errno == ENOMEM);
     1372}
     1373
     1374static void
     1375test_socket_pair(void)
     1376{
     1377        rtems_resource_snapshot snapshot;
     1378        int sd[2];
     1379        int rv;
     1380        char in[] = { 'x' };
     1381        char out[] = { 'o' };
     1382        ssize_t n;
     1383
     1384        puts("test socket pair");
     1385
     1386        rtems_resource_snapshot_take(&snapshot);
     1387
     1388        rv = socketpair(PF_UNIX, SOCK_DGRAM, 0, &sd[0]);
     1389        assert(rv == 0);
     1390
     1391        n = write(sd[0], &out[0], sizeof(out));
     1392        assert(n == (ssize_t)sizeof(out));
     1393
     1394        n = read(sd[1], &in[0], sizeof(in));
     1395        assert(n == (ssize_t)sizeof(in));
     1396
     1397        assert(memcmp(&in[0], &out[0], sizeof(in)) == 0);
     1398
     1399        rv = close(sd[0]);
     1400        assert(rv == 0);
     1401
     1402        rv = close(sd[1]);
     1403        assert(rv == 0);
     1404
     1405        do_no_mem_test(no_mem_socket_pair, -1);
     1406
     1407        assert(rtems_resource_snapshot_check(&snapshot));
     1408}
    13621409
    13631410static void
     
    17551802        test_socket_select();
    17561803        test_socket_poll();
     1804        test_socket_pair();
    17571805
    17581806        test_kqueue_unsupported_ops();
Note: See TracChangeset for help on using the changeset viewer.