Skip to content

Commit

Permalink
Merge branch 'rs/misc-cppcheck-fixes'
Browse files Browse the repository at this point in the history
Various small fixes.

* rs/misc-cppcheck-fixes:
  server-info: avoid calling fclose(3) twice in update_info_file()
  files_for_each_reflog_ent_reverse(): close stream and free strbuf on error
  am: close stream on error, but not stdin
  • Loading branch information
gitster committed Apr 24, 2017
2 parents a507115 + fa1912c commit f9096db
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 13 deletions.
8 changes: 6 additions & 2 deletions builtin/am.c
Original file line number Diff line number Diff line change
Expand Up @@ -762,14 +762,18 @@ static int split_mail_conv(mail_conv_fn fn, struct am_state *state,
mail = mkpath("%s/%0*d", state->dir, state->prec, i + 1);

out = fopen(mail, "w");
if (!out)
if (!out) {
if (in != stdin)
fclose(in);
return error_errno(_("could not open '%s' for writing"),
mail);
}

ret = fn(out, in, keep_cr);

fclose(out);
fclose(in);
if (in != stdin)
fclose(in);

if (ret)
return error(_("could not parse patch '%s'"), *paths);
Expand Down
20 changes: 12 additions & 8 deletions refs/files-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -3294,8 +3294,8 @@ static int files_for_each_reflog_ent_reverse(struct ref_store *ref_store,

/* Jump to the end */
if (fseek(logfp, 0, SEEK_END) < 0)
return error("cannot seek back reflog for %s: %s",
refname, strerror(errno));
ret = error("cannot seek back reflog for %s: %s",
refname, strerror(errno));
pos = ftell(logfp);
while (!ret && 0 < pos) {
int cnt;
Expand All @@ -3305,13 +3305,17 @@ static int files_for_each_reflog_ent_reverse(struct ref_store *ref_store,

/* Fill next block from the end */
cnt = (sizeof(buf) < pos) ? sizeof(buf) : pos;
if (fseek(logfp, pos - cnt, SEEK_SET))
return error("cannot seek back reflog for %s: %s",
refname, strerror(errno));
if (fseek(logfp, pos - cnt, SEEK_SET)) {
ret = error("cannot seek back reflog for %s: %s",
refname, strerror(errno));
break;
}
nread = fread(buf, cnt, 1, logfp);
if (nread != 1)
return error("cannot read %d bytes from reflog for %s: %s",
cnt, refname, strerror(errno));
if (nread != 1) {
ret = error("cannot read %d bytes from reflog for %s: %s",
cnt, refname, strerror(errno));
break;
}
pos -= cnt;

scanp = endp = buf + cnt;
Expand Down
8 changes: 5 additions & 3 deletions server-info.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit f9096db

Please sign in to comment.