From: Erik Faye-Lund <kusmabite@gmail.com>
To: git@vger.kernel.org
Cc: msysgit@googlegroups.com, j6t@kdbg.org, avarab@gmail.com,
sunshine@sunshineco.com, jrnieder@gmail.com,
schwab@linux-m68k.org, patthoyts@gmail.com,
"Martin Storsjö" <martin@martin.st>
Subject: [PATCH 09/15] Improve the mingw getaddrinfo stub to handle more use cases
Date: Fri, 22 Oct 2010 02:05:38 +0200 [thread overview]
Message-ID: <1287705944-5668-9-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <1287705944-5668-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
next prev parent reply other threads:[~2010-10-22 0:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-22 0:05 [PATCH 01/15] mingw: implement syslog Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 02/15] compat: add inet_pton and inet_ntop prototypes Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 03/15] inet_ntop: fix a couple of old-style decls Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 04/15] mingw: use real pid Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 05/15] mingw: support waitpid with pid > 0 and WNOHANG Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 06/15] mingw: add kill emulation Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 07/15] daemon: use run-command api for async serving Erik Faye-Lund
2010-10-22 0:10 ` Jonathan Nieder
2010-10-22 0:20 ` Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 08/15] daemon: use full buffered mode for stderr Erik Faye-Lund
2010-10-22 0:05 ` Erik Faye-Lund [this message]
2010-10-22 0:05 ` [PATCH 10/15] daemon: get remote host address from root-process Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 11/15] mingw: import poll-emulation from gnulib Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 12/15] mingw: use " Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 13/15] daemon: use socklen_t Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 14/15] daemon: make --inetd and --detcach incompatible Erik Faye-Lund
2010-10-22 0:05 ` [PATCH 15/15] daemon: opt-out on features that require posix Erik Faye-Lund
2010-10-22 0:13 ` [PATCH 01/15] mingw: implement syslog Erik Faye-Lund
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=1287705944-5668-9-git-send-email-kusmabite@gmail.com \
--to=kusmabite@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=jrnieder@gmail.com \
--cc=martin@martin.st \
--cc=msysgit@googlegroups.com \
--cc=patthoyts@gmail.com \
--cc=schwab@linux-m68k.org \
--cc=sunshine@sunshineco.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).