Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- setup.c | 35 +++++++++++++++++++---------------- strbuf.h | 4 ++++ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/setup.c b/setup.c index 6c3f85f..999225b 100644 --- a/setup.c +++ b/setup.c @@ -184,31 +184,34 @@ 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_addstr_at(&path, len, "/refs"); + if (access(path.buf, X_OK)) + goto done; - strcpy(path + len, "/HEAD"); - if (validate_headref(path)) - return 0; + strbuf_addstr_at(&path, len, "/HEAD"); + if (validate_headref(path.buf)) + goto done; - return 1; + ret = 1; +done: + strbuf_release(&path); + return ret; } int is_inside_git_dir(void) diff --git a/strbuf.h b/strbuf.h index 73e80ce..aec9fdb 100644 --- a/strbuf.h +++ b/strbuf.h @@ -116,6 +116,10 @@ extern void strbuf_add(struct strbuf *, const void *, size_t); static inline void strbuf_addstr(struct strbuf *sb, const char *s) { strbuf_add(sb, s, strlen(s)); } +static inline void strbuf_addstr_at(struct strbuf *sb, size_t len, const char *s) { + strbuf_setlen(sb, len); + strbuf_add(sb, s, strlen(s)); +} static inline void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2) { strbuf_grow(sb, sb2->len); strbuf_add(sb, sb2->buf, sb2->len); -- 1.8.5.2.240.g8478abd -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html