diff options
Diffstat (limited to 'credential-cache.c')
-rw-r--r-- | credential-cache.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/credential-cache.c b/credential-cache.c index dc98372e59..86e21de49b 100644 --- a/credential-cache.c +++ b/credential-cache.c @@ -32,17 +32,17 @@ static int send_request(const char *socket, const struct strbuf *out) write_or_die(1, in, r); got_data = 1; } + close(fd); return got_data; } static void spawn_daemon(const char *socket) { - struct child_process daemon; + struct child_process daemon = CHILD_PROCESS_INIT; const char *argv[] = { NULL, NULL, NULL }; char buf[128]; int r; - memset(&daemon, 0, sizeof(daemon)); argv[0] = "git-credential-cache--daemon"; argv[1] = socket; daemon.argv = argv; @@ -71,11 +71,14 @@ static void do_cache(const char *socket, const char *action, int timeout, die_errno("unable to relay credential"); } - if (!send_request(socket, &buf)) - return; - if (flags & FLAG_SPAWN) { - spawn_daemon(socket); - send_request(socket, &buf); + if (send_request(socket, &buf) < 0) { + if (errno != ENOENT && errno != ECONNREFUSED) + die_errno("unable to connect to cache daemon"); + if (flags & FLAG_SPAWN) { + spawn_daemon(socket); + if (send_request(socket, &buf) < 0) + die_errno("unable to connect to cache daemon"); + } } strbuf_release(&buf); } @@ -86,7 +89,7 @@ int main(int argc, const char **argv) int timeout = 900; const char *op; const char * const usage[] = { - "git credential-cache [options] <action>", + "git credential-cache [<options>] <action>", NULL }; struct option options[] = { |