summaryrefslogtreecommitdiff
path: root/credential-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'credential-cache.c')
-rw-r--r--credential-cache.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/credential-cache.c b/credential-cache.c
index 9a03792c7d..3cbd420019 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;
@@ -83,13 +83,26 @@ static void do_cache(const char *socket, const char *action, int timeout,
strbuf_release(&buf);
}
-int main(int argc, const char **argv)
+static char *get_socket_path(void)
+{
+ struct stat sb;
+ char *old_dir, *socket;
+ old_dir = expand_user_path("~/.git-credential-cache");
+ if (old_dir && !stat(old_dir, &sb) && S_ISDIR(sb.st_mode))
+ socket = xstrfmt("%s/socket", old_dir);
+ else
+ socket = xdg_cache_home("credential/socket");
+ free(old_dir);
+ return socket;
+}
+
+int cmd_main(int argc, const char **argv)
{
char *socket_path = NULL;
int timeout = 900;
const char *op;
const char * const usage[] = {
- "git credential-cache [options] <action>",
+ "git credential-cache [<options>] <action>",
NULL
};
struct option options[] = {
@@ -106,7 +119,7 @@ int main(int argc, const char **argv)
op = argv[0];
if (!socket_path)
- socket_path = expand_user_path("~/.git-credential-cache/socket");
+ socket_path = get_socket_path();
if (!socket_path)
die("unable to find a suitable socket path; use --socket");