summaryrefslogtreecommitdiffstats
path: root/c/src/libnetworking/rtems/rtems_syscall.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/libnetworking/rtems/rtems_syscall.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/c/src/libnetworking/rtems/rtems_syscall.c b/c/src/libnetworking/rtems/rtems_syscall.c
index 794b8d3d8e..a526eb2254 100644
--- a/c/src/libnetworking/rtems/rtems_syscall.c
+++ b/c/src/libnetworking/rtems/rtems_syscall.c
@@ -617,8 +617,8 @@ getsockopt (int s, int level, int name, void *aval, int *avalsize)
return 0;
}
-int
-getpeername (int s, struct sockaddr *name, int *namelen)
+static int
+getpeersockname (int s, struct sockaddr *name, int *namelen, int pflag)
{
struct socket *so;
struct mbuf *m;
@@ -636,7 +636,10 @@ getpeername (int s, struct sockaddr *name, int *namelen)
rtems_bsdnet_semaphore_release ();
return -1;
}
- error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, m);
+ if (pflag)
+ error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, m);
+ else
+ error = (*so->so_proto->pr_usrreqs->pru_sockaddr)(so, m);
if (error) {
errno = error;
rtems_bsdnet_semaphore_release ();
@@ -652,6 +655,17 @@ getpeername (int s, struct sockaddr *name, int *namelen)
return 0;
}
+int
+getpeername (int s, struct sockaddr *name, int *namelen)
+{
+ return getpeersockname (s, name, namelen, 1);
+}
+int
+getsockname (int s, struct sockaddr *name, int *namelen)
+{
+ return getpeersockname (s, name, namelen, 0);
+}
+
/*
************************************************************************
* RTEMS EXTERNAL I/O HANDLER ROUTINES *