Skip to content

Commit

Permalink
use new wrapper write_file() for simple file writing
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nguyễn Thái Ngọc Duy authored and Junio C Hamano committed Dec 1, 2014
1 parent 316e53e commit 91aacda
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 31 deletions.
4 changes: 1 addition & 3 deletions builtin/branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,6 @@ static const char edit_description[] = "BRANCH_DESCRIPTION";

static int edit_branch_description(const char *branch_name)
{
FILE *fp;
int status;
struct strbuf buf = STRBUF_INIT;
struct strbuf name = STRBUF_INIT;
Expand All @@ -777,8 +776,7 @@ static int edit_branch_description(const char *branch_name)
" %s\n"
"Lines starting with '%c' will be stripped.\n",
branch_name, comment_line_char);
fp = fopen(git_path(edit_description), "w");
if ((fwrite(buf.buf, 1, buf.len, fp) < buf.len) || fclose(fp)) {
if (write_file(git_path(edit_description), 0, "%s", buf.buf)) {
strbuf_release(&buf);
return error(_("could not write branch description template: %s"),
strerror(errno));
Expand Down
7 changes: 1 addition & 6 deletions builtin/init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
struct stat st;
FILE *fp;

if (!stat(git_link, &st)) {
const char *src;
Expand All @@ -358,11 +357,7 @@ static void separate_git_dir(const char *git_dir)
die_errno(_("unable to move %s to %s"), src, git_dir);
}

fp = fopen(git_link, "w");
if (!fp)
die(_("Could not create git link %s"), git_link);
fprintf(fp, "gitdir: %s\n", git_dir);
fclose(fp);
write_file(git_link, 1, "gitdir: %s\n", git_dir);
}

int init_db(const char *template_dir, unsigned int flags)
Expand Down
11 changes: 1 addition & 10 deletions daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -1070,15 +1070,6 @@ static struct credentials *prepare_credentials(const char *user_name,
}
#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,
struct credentials *cred)
{
Expand Down Expand Up @@ -1289,7 +1280,7 @@ int main(int argc, char **argv)
sanitize_stdfds();

if (pid_file)
store_pid(pid_file);
write_file(pid_file, 1, "%"PRIuMAX"\n", (uintmax_t) getpid());

/* prepare argv for serving-processes */
cld_argv = xmalloc(sizeof (char *) * (argc + 2));
Expand Down
9 changes: 2 additions & 7 deletions submodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 rel_path = STRBUF_INIT;
const char *real_work_tree = xstrdup(real_path(work_tree));
FILE *fp;

/* Update gitfile */
strbuf_addf(&file_name, "%s/.git", work_tree);
fp = fopen(file_name.buf, "w");
if (!fp)
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);
write_file(file_name.buf, 1, "gitdir: %s\n",
relative_path(git_dir, real_work_tree, &rel_path));

/* Update core.worktree setting */
strbuf_reset(&file_name);
Expand Down
8 changes: 3 additions & 5 deletions transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,6 @@ static int write_one_ref(const char *name, const unsigned char *sha1,
{
struct strbuf *buf = data;
int len = buf->len;
FILE *f;

/* when called via for_each_ref(), flags is non-zero */
if (flags && !starts_with(name, "refs/heads/") &&
Expand All @@ -292,10 +291,9 @@ static int write_one_ref(const char *name, const unsigned char *sha1,

strbuf_addstr(buf, name);
if (safe_create_leading_directories(buf->buf) ||
!(f = fopen(buf->buf, "w")) ||
fprintf(f, "%s\n", sha1_to_hex(sha1)) < 0 ||
fclose(f))
return error("problems writing temporary file %s", buf->buf);
write_file(buf->buf, 0, "%s\n", sha1_to_hex(sha1)))
return error("problems writing temporary file %s: %s",
buf->buf, strerror(errno));
strbuf_setlen(buf, len);
return 0;
}
Expand Down

0 comments on commit 91aacda

Please sign in to comment.