dial: freeaddrinfo on failure on reconnect - irc - IRC client based on c9x.me/irc client
 (HTM) git clone git://git.codemadness.org/irc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3f3d05fe79f64a4312664e8607d5bd71b3e73b52
 (DIR) parent 2f85ad5b356490f957cd52d81f55624eff08bdd7
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon, 31 Jul 2017 18:28:05 +0200
       
       dial: freeaddrinfo on failure on reconnect
       
       Diffstat:
         M irc.c                               |      28 +++++++++++++++++++---------
       
       1 file changed, 19 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/irc.c b/irc.c
       @@ -234,6 +234,7 @@ static char *
        dial(const char *host, const char *service)
        {
                struct addrinfo hints, *res = NULL, *rp;
       +        char *err = 0;
                int fd = -1, e;
        
                memset(&hints, 0, sizeof(hints));
       @@ -251,19 +252,28 @@ dial(const char *host, const char *service)
                        }
                        break;
                }
       -        if (fd == -1)
       -                return "Cannot connect to host.";
       +        if (fd == -1) {
       +                err = "Cannot connect to host.";
       +                goto fail;
       +        }
                srv.fd = fd;
                if (ssl) {
       -                if (tls_init() < 0)
       -                        return "Could not initialize TLS.";
       -                if (!(srv.tls = tls_client()))
       -                        return "Could not initialize TLS context.";
       -                if (tls_connect_socket(srv.tls, srv.fd, host) < 0)
       -                        return "Could not connect with ssl.";
       +                if (tls_init() < 0) {
       +                        err = "Could not initialize TLS.";
       +                        goto fail;
       +                }
       +                if (!(srv.tls = tls_client())) {
       +                        err = "Could not initialize TLS context.";
       +                        goto fail;
       +                }
       +                if (tls_connect_socket(srv.tls, srv.fd, host) < 0) {
       +                        err = "Could not connect with ssl.";
       +                        goto fail;
       +                }
                }
       +fail:
                freeaddrinfo(res);
       -        return 0;
       +        return err;
        }
        
        static void