summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/net.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-06-17 20:01:59 +0000
committerCorinna Vinschen <corinna@vinschen.de>2005-06-17 20:01:59 +0000
commitb3ba5059dab9a7687d79ed591fc84591b315b1b3 (patch)
treed1db2042a65b352695d4d07b3d5fae552e754cdd /winsup/cygwin/net.cc
parent2778b3e2b6de5c6930f7e4edc0e73bc4d1f93bd5 (diff)
downloadcygnal-b3ba5059dab9a7687d79ed591fc84591b315b1b3.tar.gz
cygnal-b3ba5059dab9a7687d79ed591fc84591b315b1b3.tar.bz2
cygnal-b3ba5059dab9a7687d79ed591fc84591b315b1b3.zip
* cygwin.din (inet_pton): Export.
(inet_ntop): Export. * net.cc (cygwin_inet_pton): Implement inet_pton for AF_INET for now. (cygwin_inet_ntop): Implement inet_ntop for AF_INET for now. * include/arpa/inet.h (inet_pton): Declare. (inet_ntop): Declare. * include/cygwin/version.h: Bump API minor number.
Diffstat (limited to 'winsup/cygwin/net.cc')
-rw-r--r--winsup/cygwin/net.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 00951a49d..23989dd10 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -2259,3 +2259,49 @@ cygwin_sendmsg (int fd, const struct msghdr *msg, int flags)
syscall_printf ("%d = sendmsg (%d, %p, %x)", res, fd, msg, flags);
return res;
}
+
+/* See "UNIX Network Programming, Networing APIs: Sockets and XTI",
+ W. Richard Stevens, Prentice Hall PTR, 1998. */
+extern "C" int
+cygwin_inet_pton (int family, const char *strptr, void *addrptr)
+{
+ if (family == AF_INET)
+ {
+ struct in_addr in_val;
+
+ if (cygwin_inet_aton (strptr, &in_val))
+ {
+ memcpy (addrptr, &in_val, sizeof (struct in_addr));
+ return 1;
+ }
+ return 0;
+ }
+ set_errno (EAFNOSUPPORT);
+ return -1;
+}
+
+/* See "UNIX Network Programming, Networing APIs: Sockets and XTI",
+ W. Richard Stevens, Prentice Hall PTR, 1998. */
+extern "C" const char *
+cygwin_inet_ntop (int family, const void *addrptr, char *strptr, size_t len)
+{
+ const u_char *p = (const u_char *) addrptr;
+
+ if (__check_null_invalid_struct_errno (strptr, len))
+ return NULL;
+ if (family == AF_INET)
+ {
+ char temp[64]; /* Big enough for 4 ints ... */
+
+ __small_sprintf (temp, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+ if (strlen (temp) >= len)
+ {
+ set_errno (ENOSPC);
+ return NULL;
+ }
+ strcpy (strptr, temp);
+ return strptr;
+ }
+ set_errno (EAFNOSUPPORT);
+ return NULL;
+}