diff options
author | Michael Gielda <mgielda@antmicro.com> | 2014-04-03 14:53:04 +0200 |
---|---|---|
committer | Michael Gielda <mgielda@antmicro.com> | 2014-04-03 14:53:04 +0200 |
commit | ae1e4e08a1005a0c487f03ba189d7536e7fdcba6 (patch) | |
tree | f1c296f8a966a9a39876b0e98e16d9c5da1776dd /ecos/packages/net/tcpip/current/src/lib/recvfrom.c | |
parent | f157da5337118d3c5cd464266796de4262ac9dbd (diff) |
Added the OS files
Diffstat (limited to 'ecos/packages/net/tcpip/current/src/lib/recvfrom.c')
-rw-r--r-- | ecos/packages/net/tcpip/current/src/lib/recvfrom.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ecos/packages/net/tcpip/current/src/lib/recvfrom.c b/ecos/packages/net/tcpip/current/src/lib/recvfrom.c new file mode 100644 index 0000000..63c1b27 --- /dev/null +++ b/ecos/packages/net/tcpip/current/src/lib/recvfrom.c @@ -0,0 +1,56 @@ +//========================================================================== +// +// lib/recvfrom.c +// +// recvfrom() system call +// +//========================================================================== +// ####BSDALTCOPYRIGHTBEGIN#### +// ------------------------------------------- +// Portions of this software may have been derived from OpenBSD +// or other sources, and if so are covered by the appropriate copyright +// and license included herein. +// ------------------------------------------- +// ####BSDALTCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-01-10 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +#include <sys/param.h> +#include <cyg/io/file.h> +#include <sys/socket.h> +#include <sys/socketvar.h> + +#include <sys/syscallargs.h> + +ssize_t +recvfrom(int s, const void *buf, size_t buflen, + int flags, const struct sockaddr *from, socklen_t *fromlen) +{ + struct sys_recvfrom_args args; + int res, error; + SYSCALLARG(args,s) = s; + SYSCALLARG(args,buf) = (void *)buf; + SYSCALLARG(args,len) = buflen; + SYSCALLARG(args,flags) = flags; + SYSCALLARG(args,from) = (struct sockaddr *)from; + SYSCALLARG(args,fromlenaddr) = fromlen; + error = sys_recvfrom(&args, &res); + if (error) { + errno = error; + return -1; + } else { + return res; + } +} |