setup.c: convert is_git_directory() to use strbuf

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2014-11-30 15:24:40 +07:00 committed by Junio C Hamano
parent 337959b491
commit 1d186b6f35

37
setup.c
View file

@ -238,31 +238,36 @@ void verify_non_filename(const char *prefix, const char *arg)
*/
int is_git_directory(const char *suspect)
{
char path[PATH_MAX];
size_t len = strlen(suspect);
struct strbuf path = STRBUF_INIT;
int ret = 0;
size_t len;
if (PATH_MAX <= len + strlen("/objects"))
die("Too long path: %.*s", 60, suspect);
strcpy(path, suspect);
strbuf_addstr(&path, suspect);
len = path.len;
if (getenv(DB_ENVIRONMENT)) {
if (access(getenv(DB_ENVIRONMENT), X_OK))
return 0;
goto done;
}
else {
strcpy(path + len, "/objects");
if (access(path, X_OK))
return 0;
strbuf_addstr(&path, "/objects");
if (access(path.buf, X_OK))
goto done;
}
strcpy(path + len, "/refs");
if (access(path, X_OK))
return 0;
strbuf_setlen(&path, len);
strbuf_addstr(&path, "/refs");
if (access(path.buf, X_OK))
goto done;
strcpy(path + len, "/HEAD");
if (validate_headref(path))
return 0;
strbuf_setlen(&path, len);
strbuf_addstr(&path, "/HEAD");
if (validate_headref(path.buf))
goto done;
return 1;
ret = 1;
done:
strbuf_release(&path);
return ret;
}
int is_inside_git_dir(void)