summaryrefslogtreecommitdiff
path: root/common/sock_any.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/sock_any.c')
-rw-r--r--common/sock_any.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/common/sock_any.c b/common/sock_any.c
index 7a128f2..acac8ee 100644
--- a/common/sock_any.c
+++ b/common/sock_any.c
@@ -237,3 +237,39 @@ int sock_any_pton(const char* addr, struct sockaddr_any* any, int defport)
return -1;
}
+int sock_any_ntop(struct sockaddr_any* any, char* addr, size_t addrlen)
+{
+ int len = 0;
+
+ switch(any->s.a.sa_family)
+ {
+ case AF_UNIX:
+ len = strlen(any->s.un.sun_path);
+ if(addrlen < len + 1)
+ {
+ errno = ENOSPC;
+ return -1;
+ }
+
+ strcpy(addr, any->s.un.sun_path);
+ break;
+
+ case AF_INET:
+ if(inet_ntop(any->s.a.sa_family, &(any->s.in.sin_addr), addr, addrlen) == NULL)
+ return -1;
+ break;
+
+#ifdef HAVE_INET6
+ case AF_INET6:
+ if(inet_ntop(any->s.a.sa_family, &(any->s.in6.sin6_addr), addr, addrlen) == NULL)
+ return -1;
+ break;
+#endif
+
+ default:
+ errno = EAFNOSUPPORT;
+ return -1;
+ }
+
+ return 0;
+}