diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2005-06-17 20:01:59 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2005-06-17 20:01:59 +0000 |
commit | b3ba5059dab9a7687d79ed591fc84591b315b1b3 (patch) | |
tree | d1db2042a65b352695d4d07b3d5fae552e754cdd /winsup/cygwin/net.cc | |
parent | 2778b3e2b6de5c6930f7e4edc0e73bc4d1f93bd5 (diff) | |
download | cygnal-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.cc | 46 |
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; +} |