diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-14 12:53:43 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-31 13:18:47 +0100 |
commit | ac78dd2440d17142f47163b663d58436f72d3aab (patch) | |
tree | 8fad02035396dade573880a2586715ad1eeca7c9 /freebsd/sys/kern/uipc_syscalls.c | |
parent | Use accept() from FreeBSD (diff) | |
download | rtems-libbsd-ac78dd2440d17142f47163b663d58436f72d3aab.tar.bz2 |
Use getsockopt() and setsockopt() from FreeBSD
Diffstat (limited to 'freebsd/sys/kern/uipc_syscalls.c')
-rw-r--r-- | freebsd/sys/kern/uipc_syscalls.c | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/freebsd/sys/kern/uipc_syscalls.c b/freebsd/sys/kern/uipc_syscalls.c index fbec5462..7377c7f4 100644 --- a/freebsd/sys/kern/uipc_syscalls.c +++ b/freebsd/sys/kern/uipc_syscalls.c @@ -1486,10 +1486,18 @@ shutdown(int socket, int how) } #endif /* __rtems__ */ -#ifndef __rtems__ /* ARGSUSED */ +#ifndef __rtems__ int setsockopt(td, uap) +#else /* __rtems__ */ +static int +kern_setsockopt( struct thread *td, int s, int level, int name, void *val, + enum uio_seg valseg, socklen_t valsize); + +static int +rtems_bsd_setsockopt(td, uap) +#endif /* __rtems__ */ struct thread *td; struct setsockopt_args /* { int s; @@ -1503,6 +1511,30 @@ setsockopt(td, uap) return (kern_setsockopt(td, uap->s, uap->level, uap->name, uap->val, UIO_USERSPACE, uap->valsize)); } +#ifdef __rtems__ +int +setsockopt(int socket, int level, int option_name, const void *option_value, + socklen_t option_len) +{ + struct thread *td = rtems_bsd_get_curthread_or_null(); + struct setsockopt_args ua = { + .s = socket, + .level = level, + .name = option_name, + .val = __DECONST(void *, option_value), + .valsize = option_len + }; + int error; + + if (td != NULL) { + error = rtems_bsd_setsockopt(td, &ua); + } else { + error = ENOMEM; + } + + return rtems_bsd_error_to_status_and_errno(error); +} +#endif /* __rtems__ */ int kern_setsockopt(td, s, level, name, val, valseg, valsize) @@ -1553,8 +1585,17 @@ kern_setsockopt(td, s, level, name, val, valseg, valsize) } /* ARGSUSED */ +#ifndef __rtems__ int getsockopt(td, uap) +#else /* __rtems__ */ +static int +kern_getsockopt( struct thread *td, int s, int level, int name, void *val, + enum uio_seg valseg, socklen_t *valsize); + +static int +rtems_bsd_getsockopt(td, uap) +#endif /* __rtems__ */ struct thread *td; struct getsockopt_args /* { int s; @@ -1580,6 +1621,30 @@ getsockopt(td, uap) error = copyout(&valsize, uap->avalsize, sizeof (valsize)); return (error); } +#ifdef __rtems__ +int +getsockopt(int socket, int level, int option_name, void *__restrict + option_value, socklen_t *__restrict option_len) +{ + struct thread *td = rtems_bsd_get_curthread_or_null(); + struct getsockopt_args ua = { + .s = socket, + .level = level, + .name = option_name, + .val = (caddr_t) option_value, + .avalsize = option_len + }; + int error; + + if (td != NULL) { + error = rtems_bsd_getsockopt(td, &ua); + } else { + error = ENOMEM; + } + + return rtems_bsd_error_to_status_and_errno(error); +} +#endif /* __rtems__ */ /* * Kernel version of getsockopt. @@ -1634,6 +1699,7 @@ kern_getsockopt(td, s, level, name, val, valseg, valsize) return (error); } +#ifndef __rtems__ /* * getsockname1() - Get socket name. */ |