[PATCH 12/13] mghttpd: Use gethostbyname instead of getaddrinfo.

Christian Mauderer christian.mauderer at embedded-brains.de
Thu Apr 21 08:49:52 UTC 2016


From: Christian Mauderer <Christian.Mauderer at embedded-brains.de>

RTEMS does not have a getaddrinfo() so use gethostbyname() instead. This
reintroduces a not thread save function into the code but it seems that
we have no better replacement at the moment.
---
 cpukit/mghttpd/civetweb.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/cpukit/mghttpd/civetweb.c b/cpukit/mghttpd/civetweb.c
index 41c3eed..520a6b6 100644
--- a/cpukit/mghttpd/civetweb.c
+++ b/cpukit/mghttpd/civetweb.c
@@ -5801,6 +5801,33 @@ is_valid_port(unsigned long port)
 static int
 mg_inet_pton(int af, const char *src, void *dst, size_t dstlen)
 {
+
+#if defined(__rtems__) && !defined(USE_IPV6)
+	int ret = 0;
+	struct sockaddr_in *sin_dst = dst;
+	struct hostent *he;
+
+	if (af != AF_INET || dstlen != sizeof(struct sockaddr_in)) {
+		/* only IPv4 is supported */
+		return 0;
+	}
+
+	memset(sin_dst, '0', dstlen);
+
+	/* FIXME: gethostbyname is NOT thread-save! */
+	he = gethostbyname(src);
+	if(he != NULL) {
+		sin_dst->sin_family = af;
+		memcpy(&sin_dst->sin_addr, he->h_addr_list[0], he->h_length);
+		ret = 1;
+	}
+
+	return ret;
+
+#else /* !defined(__rtems) || defined(USE_IPV6) */
+#if defined(__rtems__)
+#warning This does not work with the integrated (old) RTEMS network stack
+#endif
 	struct addrinfo hints, *res, *ressave;
 	int ret = 0;
 
@@ -5824,6 +5851,7 @@ mg_inet_pton(int af, const char *src, void *dst, size_t dstlen)
 
 	freeaddrinfo(ressave);
 	return ret;
+#endif /* defined(__rtems) && !defined(USE_IPV6) */
 }
 
 
-- 
1.8.4.5




More information about the devel mailing list