зеркало из https://github.com/microsoft/git.git
Merge branch 'rs/misc-cppcheck-fixes'
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
This commit is contained in:
Коммит
f9096db54b
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче