git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Erik Faye-Lund <kusmabite@gmail.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com
Subject: [PATCH v6 10/16] Improve the mingw getaddrinfo stub to handle more use cases
Date: Wed,  3 Nov 2010 17:31:28 +0100	[thread overview]
Message-ID: <1288801894-1168-11-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <1288801894-1168-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.2.161.gd6e00

  parent reply	other threads:[~2010-11-03 16:32 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-03 16:31 [PATCH v6 00/16] daemon-win32 Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 01/16] mingw: add network-wrappers for daemon Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 02/16] mingw: implement syslog Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 03/16] compat: add inet_pton and inet_ntop prototypes Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 04/16] inet_ntop: fix a couple of old-style decls Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 05/16] mingw: use real pid Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 06/16] mingw: support waitpid with pid > 0 and WNOHANG Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 07/16] mingw: add kill emulation Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 08/16] daemon: use run-command api for async serving Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 09/16] daemon: use full buffered mode for stderr Erik Faye-Lund
2010-11-03 16:31 ` Erik Faye-Lund [this message]
2010-11-03 16:31 ` [PATCH v6 11/16] daemon: get remote host address from root-process Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 12/16] mingw: import poll-emulation from gnulib Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 13/16] mingw: use " Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 14/16] daemon: use socklen_t Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 15/16] daemon: make --inetd and --detach incompatible Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 16/16] daemon: opt-out on features that require posix Erik Faye-Lund
2010-11-03 21:11 ` [PATCH v6 00/16] daemon-win32 Pat Thoyts
2010-11-03 22:18   ` Erik Faye-Lund
2010-11-03 22:39     ` Erik Faye-Lund
2010-11-04  0:28       ` Pat Thoyts
2010-11-04  0:53         ` Erik Faye-Lund
2010-11-04  1:04           ` Pat Thoyts
2010-11-03 22:58     ` Erik Faye-Lund
2010-11-04  0:06       ` Erik Faye-Lund
2010-11-04  0:28         ` Erik Faye-Lund
2010-11-04  8:58           ` Martin Storsjö
2010-11-04  9:15             ` Erik Faye-Lund
2010-11-04  9:35               ` Martin Storsjö
2010-11-04 10:15                 ` Erik Faye-Lund
2010-11-04  8:52       ` Martin Storsjö

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1288801894-1168-11-git-send-email-kusmabite@gmail.com \
    --to=kusmabite@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).