diff options
Diffstat (limited to 'server-info.c')
-rw-r--r-- | server-info.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/server-info.c b/server-info.c index 34b0253177..5ec5b1d827 100644 --- a/server-info.c +++ b/server-info.c @@ -14,19 +14,21 @@ static int update_info_file(char *path, int (*generate)(FILE *)) char *tmp = mkpathdup("%s_XXXXXX", path); int ret = -1; int fd = -1; - FILE *fp = NULL; + FILE *fp = NULL, *to_close; safe_create_leading_directories(path); fd = git_mkstemp_mode(tmp, 0666); if (fd < 0) goto out; - fp = fdopen(fd, "w"); + to_close = fp = fdopen(fd, "w"); if (!fp) goto out; + fd = -1; ret = generate(fp); if (ret) goto out; - if (fclose(fp)) + fp = NULL; + if (fclose(to_close)) goto out; if (adjust_shared_perm(tmp) < 0) goto out; @@ -36,7 +38,7 @@ static int update_info_file(char *path, int (*generate)(FILE *)) out: if (ret) { - error("unable to update %s: %s", path, strerror(errno)); + error_errno("unable to update %s", path); if (fp) fclose(fp); else if (fd >= 0) @@ -47,21 +49,22 @@ out: return ret; } -static int add_info_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data) +static int add_info_ref(const char *path, const struct object_id *oid, + int flag, void *cb_data) { FILE *fp = cb_data; - struct object *o = parse_object(sha1); + struct object *o = parse_object(oid); if (!o) return -1; - if (fprintf(fp, "%s %s\n", sha1_to_hex(sha1), path) < 0) + if (fprintf(fp, "%s %s\n", oid_to_hex(oid), path) < 0) return -1; if (o->type == OBJ_TAG) { o = deref_tag(o, path, 0); if (o) if (fprintf(fp, "%s %s^{}\n", - sha1_to_hex(o->sha1), path) < 0) + oid_to_hex(&o->oid), path) < 0) return -1; } return 0; @@ -130,7 +133,7 @@ static int read_pack_info_file(const char *infofile) char line[1000]; int old_cnt = 0; - fp = fopen(infofile, "r"); + fp = fopen_or_warn(infofile, "r"); if (!fp) return 1; /* nonexistent is not an error. */ @@ -228,7 +231,7 @@ static void init_pack_info(const char *infofile, int force) } /* renumber them */ - qsort(info, num_pack, sizeof(info[0]), compare_info); + QSORT(info, num_pack, compare_info); for (i = 0; i < num_pack; i++) info[i]->new_num = i; } |