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

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

From
Erik Faye-Lund <kusmabite@gmail.com>
Date
Nov 4, 2010, 01:35 UTC
Message-ID
<1288834524-2400-11-git-send-email-kusmabite@gmail.com>
In-Reply-To
<1288834524-2400-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 146a6ed..a6c1ee7 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1039,19 +1039,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;
@@ -1063,14 +1066,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.2.162.g09d37
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 14 of 21 in “daemon-win32”
  1. 00/16 daemon-win32Erik Faye-Lund, Nov 4, 2010
  2. 01/16 mingw: add network-wrappers for daemonErik Faye-Lund, Nov 4, 2010
  3. 02/16 mingw: implement syslogErik Faye-Lund, Nov 4, 2010
  4. 03/16 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Nov 4, 2010
  5. 04/16 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Nov 4, 2010
  6. 05/16 mingw: use real pidErik Faye-Lund, Nov 4, 2010
  7. 06/16 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Nov 4, 2010
  8. 07/16 mingw: add kill emulationErik Faye-Lund, Nov 4, 2010
  9. 08/16 daemon: use run-command api for async servingErik Faye-Lund, Nov 4, 2010
  10. daemon: support <directory> arguments againJonathan Nieder, Jan 4, 2011
  11. Erik Faye-LundJan 4, 2011
  12. Junio C HamanoJan 4, 2011
  13. 09/16 daemon: use full buffered mode for stderrErik Faye-Lund, Nov 4, 2010
  14. 10/16 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Nov 4, 2010
  15. 11/16 daemon: get remote host address from root-processErik Faye-Lund, Nov 4, 2010
  16. 12/16 mingw: import poll-emulation from gnulibErik Faye-Lund, Nov 4, 2010
  17. Erik Faye-LundJul 6, 2011
  18. 13/16 mingw: use poll-emulation from gnulibErik Faye-Lund, Nov 4, 2010
  19. 14/16 daemon: use socklen_tErik Faye-Lund, Nov 4, 2010
  20. 15/16 daemon: make --inetd and --detach incompatibleErik Faye-Lund, Nov 4, 2010
  21. 16/16 daemon: opt-out on features that require posixErik Faye-Lund, Nov 4, 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.