X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fnetworking-posix.c;h=6a82e68b5a60add404b2d2c00599862fee10d01a;hb=1c3ad5e78c23913341c3b0e221b5f19e92cf96e6;hp=ad4a623eda77cd5faaaa7c25ed8fe0bc668e6234;hpb=fde24d3d17afee83e267800a604d5ec09b82346d;p=mono.git diff --git a/mono/utils/networking-posix.c b/mono/utils/networking-posix.c index ad4a623eda7..6a82e68b5a6 100644 --- a/mono/utils/networking-posix.c +++ b/mono/utils/networking-posix.c @@ -7,7 +7,7 @@ * (C) 2015 Xamarin */ -#include +#include #include #ifdef HAVE_NETDB_H @@ -26,6 +26,9 @@ #include #endif +#include +#include + static void* get_address_from_sockaddr (struct sockaddr *sa) { @@ -47,6 +50,7 @@ mono_get_address_info (const char *hostname, int port, int flags, MonoAddressInf struct addrinfo hints, *res = NULL, *info; MonoAddressEntry *cur = NULL, *prev = NULL; MonoAddressInfo *addr_info; + int ret; memset (&hints, 0, sizeof (struct addrinfo)); *result = NULL; @@ -68,7 +72,12 @@ mono_get_address_info (const char *hostname, int port, int flags, MonoAddressInf hints.ai_flags = AI_ADDRCONFIG; #endif sprintf (service_name, "%d", port); - if (getaddrinfo (hostname, service_name, &hints, &info)) + + MONO_PREPARE_BLOCKING; + ret = getaddrinfo (hostname, service_name, &hints, &info); + MONO_FINISH_BLOCKING; + + if (ret) return 1; /* FIXME propagate the error */ res = info; @@ -182,7 +191,7 @@ mono_get_local_interfaces (int family, int *interface_count) memset (&ifc, 0, sizeof (ifc)); ifc.ifc_len = IFCONF_BUFF_SIZE; - ifc.ifc_buf = g_malloc (IFCONF_BUFF_SIZE); /* We can't have such huge buffers on the stack. */ + ifc.ifc_buf = (char *)g_malloc (IFCONF_BUFF_SIZE); /* We can't have such huge buffers on the stack. */ if (ioctl (fd, SIOCGIFCONF, &ifc) < 0) goto done; @@ -219,7 +228,8 @@ mono_get_local_interfaces (int family, int *interface_count) ++if_count; } - result_ptr = result = g_malloc (if_count * mono_address_size_for_family (family)); + result = (char *)g_malloc (if_count * mono_address_size_for_family (family)); + result_ptr = (char *)result; FOREACH_IFR (ifr, ifc) { if (ifr->ifr_name [0] == '\0') continue;