Merge branch 'philmd' into 'master'

Remove alloca() call in get_dns_addr_resolv_conf()

See merge request slirp/libslirp!84
diff --git a/src/slirp.c b/src/slirp.c
index ee4ce36..5d60cb5 100644
--- a/src/slirp.c
+++ b/src/slirp.c
@@ -249,9 +249,13 @@
     char buff2[257];
     FILE *f;
     int found = 0;
-    void *tmp_addr = alloca(addrlen);
+    union {
+        struct in_addr dns_addr;
+        struct in6_addr dns6_addr;
+    } tmp_addr;
     unsigned if_index;
 
+    assert(sizeof(tmp_addr) >= addrlen);
     f = fopen("/etc/resolv.conf", "r");
     if (!f)
         return -1;
@@ -267,13 +271,13 @@
                 if_index = 0;
             }
 
-            if (!inet_pton(af, buff2, tmp_addr)) {
+            if (!inet_pton(af, buff2, &tmp_addr)) {
                 continue;
             }
             /* If it's the first one, set it to dns_addr */
             if (!found) {
-                memcpy(pdns_addr, tmp_addr, addrlen);
-                memcpy(cached_addr, tmp_addr, addrlen);
+                memcpy(pdns_addr, &tmp_addr, addrlen);
+                memcpy(cached_addr, &tmp_addr, addrlen);
                 if (scope_id) {
                     *scope_id = if_index;
                 }
@@ -285,7 +289,7 @@
                 break;
             } else if (slirp_debug & DBG_MISC) {
                 char s[INET6_ADDRSTRLEN];
-                const char *res = inet_ntop(af, tmp_addr, s, sizeof(s));
+                const char *res = inet_ntop(af, &tmp_addr, s, sizeof(s));
                 if (!res) {
                     res = "  (string conversion error)";
                 }