static int fetch_index(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];
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",
- hex);
+ 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 (push_verbosely)
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();
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(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];
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)
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();
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)