git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 10/16] Improve the mingw getaddrinfo stub to handle more use cases

From
Erik Faye-Lund <kusmabite@gmail.com>
Date
Oct 22, 2010, 00:35 UTC
Message-ID
<1287707727-5780-11-git-send-email-kusmabite@gmail.com>
In-Reply-To
<1287707727-5780-1-git-send-email-kusmabite@gmail.com>
From: Martin Storsjö <martin@martin.st>

Allow the node parameter to be null, which is used for getting the default bind address.

Also allow the hints parameter to be null, to improve standard conformance of the stub implementation a little.

Signed-off-by: Martin Storsjo <martin@martin.st>
---
 compat/mingw.c |   28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index 21d1c2c..d88c0d0 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1035,19 +1035,22 @@ static int WSAAPI getaddrinfo_stub(const char *node, const char *service,
 				   const struct addrinfo *hints,
 				   struct addrinfo **res)
 {
-	struct hostent *h = gethostbyname(node);
+	struct hostent *h = NULL;
 	struct addrinfo *ai;
 	struct sockaddr_in *sin;
 
-	if (!h)
-		return WSAGetLastError();
+	if (node) {
+		h = gethostbyname(node);
+		if (!h)
+			return WSAGetLastError();
+	}
 
 	ai = xmalloc(sizeof(struct addrinfo));
 	*res = ai;
 	ai->ai_flags = 0;
 	ai->ai_family = AF_INET;
-	ai->ai_socktype = hints->ai_socktype;
-	switch (hints->ai_socktype) {
+	ai->ai_socktype = hints ? hints->ai_socktype : 0;
+	switch (ai->ai_socktype) {
 	case SOCK_STREAM:
 		ai->ai_protocol = IPPROTO_TCP;
 		break;
@@ -1059,14 +1062,25 @@ static int WSAAPI getaddrinfo_stub(const char *node, const char *service,
 		break;
 	}
 	ai->ai_addrlen = sizeof(struct sockaddr_in);
-	ai->ai_canonname = strdup(h->h_name);
+	if (hints && (hints->ai_flags & AI_CANONNAME))
+		ai->ai_canonname = h ? strdup(h->h_name) : NULL;
+	else
+		ai->ai_canonname = NULL;
 
 	sin = xmalloc(ai->ai_addrlen);
 	memset(sin, 0, ai->ai_addrlen);
 	sin->sin_family = AF_INET;
+	/* Note: getaddrinfo is supposed to allow service to be a string,
+	 * which should be looked up using getservbyname. This is
+	 * currently not implemented */
 	if (service)
 		sin->sin_port = htons(atoi(service));
-	sin->sin_addr = *(struct in_addr *)h->h_addr;
+	if (h)
+		sin->sin_addr = *(struct in_addr *)h->h_addr;
+	else if (hints && (hints->ai_flags & AI_PASSIVE))
+		sin->sin_addr.s_addr = INADDR_ANY;
+	else
+		sin->sin_addr.s_addr = INADDR_LOOPBACK;
 	ai->ai_addr = (struct sockaddr *)sin;
 	ai->ai_next = 0;
 	return 0;
-- 
1.7.3.1.199.g72340
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 11 of 17 in “daemon-win32”
  1. 00/16 daemon-win32Erik Faye-Lund, Oct 22, 2010
  2. 01/16 mingw: add network-wrappers for daemonErik Faye-Lund, Oct 22, 2010
  3. 02/16 mingw: implement syslogErik Faye-Lund, Oct 22, 2010
  4. 03/16 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Oct 22, 2010
  5. 04/16 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Oct 22, 2010
  6. 05/16 mingw: use real pidErik Faye-Lund, Oct 22, 2010
  7. 06/16 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Oct 22, 2010
  8. 07/16 mingw: add kill emulationErik Faye-Lund, Oct 22, 2010
  9. 08/16 daemon: use run-command api for async servingErik Faye-Lund, Oct 22, 2010
  10. 09/16 daemon: use full buffered mode for stderrErik Faye-Lund, Oct 22, 2010
  11. 10/16 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Oct 22, 2010
  12. 11/16 daemon: get remote host address from root-processErik Faye-Lund, Oct 22, 2010
  13. 12/16 mingw: import poll-emulation from gnulibErik Faye-Lund, Oct 22, 2010
  14. 13/16 mingw: use poll-emulation from gnulibErik Faye-Lund, Oct 22, 2010
  15. 14/16 daemon: use socklen_tErik Faye-Lund, Oct 22, 2010
  16. 15/16 daemon: make --inetd and --detcach incompatibleErik Faye-Lund, Oct 22, 2010
  17. 16/16 daemon: opt-out on features that require posixErik Faye-Lund, Oct 22, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.