Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'http-walker.c')
-rw-r--r--http-walker.c45
1 files changed, 23 insertions, 22 deletions
diff --git a/http-walker.c b/http-walker.c
index bbc3023e40..d6cc622e96 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -371,7 +371,8 @@ static void prefetch(struct walker *walker, unsigned char *sha1)
static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned char *sha1)
{
- char *hex = sha1_to_hex(sha1);
+ int ret = 0;
+ char *hex = xstrdup(sha1_to_hex(sha1));
char *filename;
char *url;
char tmpfile[PATH_MAX];
@@ -394,18 +395,18 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- return error("Unable to verify pack %s is available",
+ ret = error("Unable to verify pack %s is available",
hex);
+ goto cleanup_pack;
}
} else {
- free(url);
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_pack;
}
if (has_pack_index(sha1)) {
- free(url);
- return 0;
+ ret = 0;
+ goto cleanup_pack;
}
if (walker->get_verbosely)
@@ -417,9 +418,9 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
indexfile = fopen(tmpfile, "a");
if (!indexfile) {
- free(url);
- return error("Unable to open local file %s for pack index",
- tmpfile);
+ ret = error("Unable to open local file %s for pack index",
+ tmpfile);
+ goto cleanup_pack;
}
slot = get_active_slot();
@@ -450,24 +451,24 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to get pack index %s\n%s", url,
- curl_errorstr);
+ ret = error("Unable to get pack index %s\n%s", url,
+ curl_errorstr);
+ goto cleanup_index;
}
} else {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_index;
}
- free(url);
+ ret = move_temp_to_file(tmpfile, filename);
+
+cleanup_index:
fclose(indexfile);
slot->local = NULL;
-
- return move_temp_to_file(tmpfile, filename);
+cleanup_pack:
+ free(url);
+ free(hex);
+ return ret;
}
static int setup_index(struct walker *walker, struct alt_base *repo, unsigned char *sha1)