commit - ff6cf34bf28b5e0205ea1abcf3b6fc9354c854b0
commit + 4e600d3006d5b24f7bc35354d5d81cea5f52c6ff
blob - c4e2f245d76c9d74a2b1dcab970600484d4a8d02
blob + 06623a3dc018b8d1b8c139c665425201a478f306
--- gemini.c
+++ gemini.c
static void query_done(struct asr_result*, void*);
static void async_conn_towards(struct req*);
#else
-static char *xasprintf(const char*, ...);
-static int blocking_conn_towards(struct url*, char**);
+static void blocking_conn_towards(struct req*);
#endif
static void close_with_err(struct req*, const char*);
req->asrev = event_asr_run(q, query_done, req);
}
#else
-static char *
-xasprintf(const char *fmt, ...)
+static void
+blocking_conn_towards(struct req *req)
{
- va_list ap;
- char *s;
-
- va_start(ap, fmt);
- if (vasprintf(&s, fmt, ap) == -1)
- s = NULL;
- va_end(ap);
-
- return s;
-}
-
-static int
-blocking_conn_towards(struct url *url, char **err)
-{
struct addrinfo hints, *servinfo, *p;
+ struct url *url = &req->url;
int status, sock;
const char *proto = "1965";
- *err = NULL;
-
if (*url->port != '\0')
proto = url->port;
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(url->host, proto, &hints, &servinfo))) {
- *err = xasprintf("failed to resolve %s: %s",
+ close_with_errf(req, "failed to resolve %s: %s",
url->host, gai_strerror(status));
- return -1;
+ return;
}
sock = -1;
break;
close(sock);
}
+ freeaddrinfo(servinfo);
- if (sock == -1)
- *err = xasprintf("couldn't connect to %s", url->host);
- else
- mark_nonblock(sock);
+ if (sock == -1) {
+ close_with_errf(req, "couldn't connect to %s", url->host);
+ return;
+ }
- freeaddrinfo(servinfo);
- return sock;
+ req->fd = sock;
+ mark_nonblock(req->fd);
+ setup_tls(req);
}
#endif
#if HAVE_ASR_RUN
async_conn_towards(req);
#else
- {
- char *err = NULL;
-
- if ((req->fd = blocking_conn_towards(&req->url, &err)) == -1) {
- close_with_err(req, err);
- free(err);
- return;
- }
- setup_tls(req);
- }
+ blocking_conn_towards(req);
#endif
}