On Wed, Jul 13, 2011 at 10:58 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 49 quoted lines
> Erik Faye-Lund <kusmabite@gmail.com> writes:
>
>> Uhm, this will still fail to report errors for the very last entry,
>> no? When socket returns -1 in the last iteration (and errno gets
>> saved), there's no code that reports it...
>
> I guess the fix should look something like this.
>
> By the way, is anybody interested in fixing the other side of the ifdef
> that is compiled on IPv4-only installations?
>
> connect.c | 15 ++++++---------
> 1 files changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/connect.c b/connect.c
> index 8eb9f44..844107e 100644
> --- a/connect.c
> +++ b/connect.c
> @@ -193,7 +193,7 @@ static const char *ai_name(const struct addrinfo *ai)
> static int git_tcp_connect_sock(char *host, int flags)
> {
> struct strbuf error_message = STRBUF_INIT;
> - int sockfd = -1, saved_errno = 0;
> + int sockfd = -1;
> const char *port = STR(DEFAULT_GIT_PORT);
> struct addrinfo hints, *ai0, *ai;
> int gai;
> @@ -220,15 +220,12 @@ static int git_tcp_connect_sock(char *host, int flags)
> for (ai0 = ai; ai; ai = ai->ai_next) {
> sockfd = socket(ai->ai_family,
> ai->ai_socktype, ai->ai_protocol);
> - if (sockfd < 0) {
> - saved_errno = errno;
> - continue;
> - }
> - if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
> - saved_errno = errno;
> + if ((sockfd < 0) ||
> + (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0)) {
> strbuf_addf(&error_message, "%s[%d: %s]: errno=%s\n",
> - host, cnt, ai_name(ai), strerror(saved_errno));
> - close(sockfd);
> + host, cnt, ai_name(ai), strerror(errno));
> + if (0 <= sockfd)
> + close(sockfd);
> sockfd = -1;
> continue;
> }
>