use new wrapper write_file() for simple file writing

This fixes common problems in these code about error handling,
forgetting to close the file handle after fprintf() fails, or not
printing out the error string..

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2014-11-30 15:24:46 +07:00 committed by Junio C Hamano
parent 316e53e68c
commit 91aacda85a
5 changed files with 8 additions and 31 deletions

View File

@ -764,7 +764,6 @@ static const char edit_description[] = "BRANCH_DESCRIPTION";
static int edit_branch_description(const char *branch_name) static int edit_branch_description(const char *branch_name)
{ {
FILE *fp;
int status; int status;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct strbuf name = STRBUF_INIT; struct strbuf name = STRBUF_INIT;
@ -777,8 +776,7 @@ static int edit_branch_description(const char *branch_name)
" %s\n" " %s\n"
"Lines starting with '%c' will be stripped.\n", "Lines starting with '%c' will be stripped.\n",
branch_name, comment_line_char); branch_name, comment_line_char);
fp = fopen(git_path(edit_description), "w"); if (write_file(git_path(edit_description), 0, "%s", buf.buf)) {
if ((fwrite(buf.buf, 1, buf.len, fp) < buf.len) || fclose(fp)) {
strbuf_release(&buf); strbuf_release(&buf);
return error(_("could not write branch description template: %s"), return error(_("could not write branch description template: %s"),
strerror(errno)); strerror(errno));

View File

@ -342,7 +342,6 @@ int set_git_dir_init(const char *git_dir, const char *real_git_dir,
static void separate_git_dir(const char *git_dir) static void separate_git_dir(const char *git_dir)
{ {
struct stat st; struct stat st;
FILE *fp;
if (!stat(git_link, &st)) { if (!stat(git_link, &st)) {
const char *src; const char *src;
@ -358,11 +357,7 @@ static void separate_git_dir(const char *git_dir)
die_errno(_("unable to move %s to %s"), src, git_dir); die_errno(_("unable to move %s to %s"), src, git_dir);
} }
fp = fopen(git_link, "w"); write_file(git_link, 1, "gitdir: %s\n", git_dir);
if (!fp)
die(_("Could not create git link %s"), git_link);
fprintf(fp, "gitdir: %s\n", git_dir);
fclose(fp);
} }
int init_db(const char *template_dir, unsigned int flags) int init_db(const char *template_dir, unsigned int flags)

View File

@ -1070,15 +1070,6 @@ static struct credentials *prepare_credentials(const char *user_name,
} }
#endif #endif
static void store_pid(const char *path)
{
FILE *f = fopen(path, "w");
if (!f)
die_errno("cannot open pid file '%s'", path);
if (fprintf(f, "%"PRIuMAX"\n", (uintmax_t) getpid()) < 0 || fclose(f) != 0)
die_errno("failed to write pid file '%s'", path);
}
static int serve(struct string_list *listen_addr, int listen_port, static int serve(struct string_list *listen_addr, int listen_port,
struct credentials *cred) struct credentials *cred)
{ {
@ -1289,7 +1280,7 @@ int main(int argc, char **argv)
sanitize_stdfds(); sanitize_stdfds();
if (pid_file) if (pid_file)
store_pid(pid_file); write_file(pid_file, 1, "%"PRIuMAX"\n", (uintmax_t) getpid());
/* prepare argv for serving-processes */ /* prepare argv for serving-processes */
cld_argv = xmalloc(sizeof (char *) * (argc + 2)); cld_argv = xmalloc(sizeof (char *) * (argc + 2));

View File

@ -1102,16 +1102,11 @@ void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir)
struct strbuf file_name = STRBUF_INIT; struct strbuf file_name = STRBUF_INIT;
struct strbuf rel_path = STRBUF_INIT; struct strbuf rel_path = STRBUF_INIT;
const char *real_work_tree = xstrdup(real_path(work_tree)); const char *real_work_tree = xstrdup(real_path(work_tree));
FILE *fp;
/* Update gitfile */ /* Update gitfile */
strbuf_addf(&file_name, "%s/.git", work_tree); strbuf_addf(&file_name, "%s/.git", work_tree);
fp = fopen(file_name.buf, "w"); write_file(file_name.buf, 1, "gitdir: %s\n",
if (!fp) relative_path(git_dir, real_work_tree, &rel_path));
die(_("Could not create git link %s"), file_name.buf);
fprintf(fp, "gitdir: %s\n", relative_path(git_dir, real_work_tree,
&rel_path));
fclose(fp);
/* Update core.worktree setting */ /* Update core.worktree setting */
strbuf_reset(&file_name); strbuf_reset(&file_name);

View File

@ -283,7 +283,6 @@ static int write_one_ref(const char *name, const unsigned char *sha1,
{ {
struct strbuf *buf = data; struct strbuf *buf = data;
int len = buf->len; int len = buf->len;
FILE *f;
/* when called via for_each_ref(), flags is non-zero */ /* when called via for_each_ref(), flags is non-zero */
if (flags && !starts_with(name, "refs/heads/") && if (flags && !starts_with(name, "refs/heads/") &&
@ -292,10 +291,9 @@ static int write_one_ref(const char *name, const unsigned char *sha1,
strbuf_addstr(buf, name); strbuf_addstr(buf, name);
if (safe_create_leading_directories(buf->buf) || if (safe_create_leading_directories(buf->buf) ||
!(f = fopen(buf->buf, "w")) || write_file(buf->buf, 0, "%s\n", sha1_to_hex(sha1)))
fprintf(f, "%s\n", sha1_to_hex(sha1)) < 0 || return error("problems writing temporary file %s: %s",
fclose(f)) buf->buf, strerror(errno));
return error("problems writing temporary file %s", buf->buf);
strbuf_setlen(buf, len); strbuf_setlen(buf, len);
return 0; return 0;
} }