X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=submodule.c;h=5d286e409ee2a9b12d6b64cb05394eca18fe3e97;hb=f9dae0d3e63455206c1e1e169c76aca55aeb5d90;hp=ca0527fbcbdf4838a50956704148744630b65775;hpb=b62cb17a65b180c0ee6e48ee3f7395c52b2e5ea1;p=git.git diff --git a/submodule.c b/submodule.c index ca0527fbc..5d286e409 100644 --- a/submodule.c +++ b/submodule.c @@ -10,17 +10,19 @@ static int add_submodule_odb(const char *path) { struct strbuf objects_directory = STRBUF_INIT; struct alternate_object_database *alt_odb; + int ret = 0; strbuf_addf(&objects_directory, "%s/.git/objects/", path); - if (!is_directory(objects_directory.buf)) - return -1; - + if (!is_directory(objects_directory.buf)) { + ret = -1; + goto done; + } /* avoid adding it twice */ for (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next) if (alt_odb->name - alt_odb->base == objects_directory.len && !strncmp(alt_odb->base, objects_directory.buf, objects_directory.len)) - return 0; + goto done; alt_odb = xmalloc(objects_directory.len + 42 + sizeof(*alt_odb)); alt_odb->next = alt_odb_list; @@ -31,7 +33,9 @@ static int add_submodule_odb(const char *path) alt_odb->name[41] = '\0'; alt_odb_list = alt_odb; prepare_alt_odb(); - return 0; +done: + strbuf_release(&objects_directory); + return ret; } void show_submodule_summary(FILE *f, const char *path, @@ -119,16 +123,19 @@ void show_submodule_summary(FILE *f, const char *path, int is_submodule_modified(const char *path) { - int len; + int len, i; struct child_process cp; const char *argv[] = { "status", "--porcelain", NULL, }; - char *env[3]; + const char *env[LOCAL_REPO_ENV_SIZE + 3]; struct strbuf buf = STRBUF_INIT; + for (i = 0; i < LOCAL_REPO_ENV_SIZE; i++) + env[i] = local_repo_env[i]; + strbuf_addf(&buf, "%s/.git/", path); if (!is_directory(buf.buf)) { strbuf_release(&buf); @@ -139,14 +146,14 @@ int is_submodule_modified(const char *path) strbuf_reset(&buf); strbuf_addf(&buf, "GIT_WORK_TREE=%s", path); - env[0] = strbuf_detach(&buf, NULL); + env[i++] = strbuf_detach(&buf, NULL); strbuf_addf(&buf, "GIT_DIR=%s/.git", path); - env[1] = strbuf_detach(&buf, NULL); - env[2] = NULL; + env[i++] = strbuf_detach(&buf, NULL); + env[i] = NULL; memset(&cp, 0, sizeof(cp)); cp.argv = argv; - cp.env = (const char *const *)env; + cp.env = env; cp.git_cmd = 1; cp.no_stdin = 1; cp.out = -1; @@ -159,8 +166,8 @@ int is_submodule_modified(const char *path) if (finish_command(&cp)) die("git status --porcelain failed"); - free(env[0]); - free(env[1]); + for (i = LOCAL_REPO_ENV_SIZE; env[i]; i++) + free((char *)env[i]); strbuf_release(&buf); return len != 0; }