{"thread":{"id":"15841","subject":"[RFC PATCH 2/2] Replace calls to strbuf_init(&foo, 0) with static STRBUF_INIT initializer","startedAt":"2008-10-09T19:12:12Z","lastAt":"2008-10-09T21:28:08Z","messageCount":2,"participants":["Brandon Casey","Alex Riesen"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"92695","messageId":"UUi8gSMV6CruoYIkVNOQZ4FNzsbqZcSNu6jdYH8GqIo@cipher.nrlssc.navy.mil","threadId":"15841","inReplyTo":null,"subject":"[RFC PATCH 2/2] Replace calls to strbuf_init(&foo, 0) with static STRBUF_INIT initializer","fromName":"Brandon Casey","fromEmail":"casey@nrlssc.navy.mil","sentAt":"2008-10-09T19:12:12Z","receivedAt":"2008-10-09T19:12:12Z","isPatch":true,"sender":{"key":"drafnel@gmail.com","avatar":"https://avatars.githubusercontent.com/u/921167?v=4"},"body":"Many call sites use strbuf_init(&foo, 0) to initialize local strbuf variable\n\"foo\" which has not been accessed since its declaration. These can be\nreplaced with a static initialization using the STRBUF_INIT macro which is\njust as readable, saves a function call, and takes up fewer lines.\n\nSigned-off-by: Brandon Casey <casey@nrlssc.navy.mil>\n---\n\n\nThis does the same thing for strbuf_init() that the last one did for memset().\n\ncomments?\n\n-brandon\n\n\n archive-tar.c            |    7 ++-----\n archive.c                |    6 ++----\n builtin-apply.c          |   26 ++++++++------------------\n builtin-blame.c          |    3 +--\n builtin-branch.c         |    3 +--\n builtin-cat-file.c       |    3 +--\n builtin-checkout-index.c |    4 +---\n builtin-checkout.c       |   12 ++++--------\n builtin-clean.c          |    6 ++----\n builtin-clone.c          |    9 +++------\n builtin-commit.c         |   15 +++++----------\n builtin-fetch--tool.c    |    3 +--\n builtin-fmt-merge-msg.c  |    4 +---\n builtin-help.c           |    4 +---\n builtin-log.c            |   13 ++++---------\n builtin-merge.c          |   27 +++++++++------------------\n builtin-remote.c         |    8 ++------\n builtin-rev-list.c       |    3 +--\n builtin-rev-parse.c      |    4 +---\n builtin-show-branch.c    |    3 +--\n builtin-stripspace.c     |    3 +--\n builtin-tag.c            |    3 +--\n builtin-update-index.c   |   10 +++-------\n combine-diff.c           |    3 +--\n config.c                 |    6 ++----\n convert.c                |    3 +--\n diff.c                   |   15 +++++----------\n editor.c                 |    3 +--\n exec_cmd.c               |    4 +---\n fsck.c                   |    3 +--\n git.c                    |    3 +--\n graph.c                  |   13 ++++---------\n hash-object.c            |    4 +---\n imap-send.c              |    3 +--\n log-tree.c               |    3 +--\n merge-recursive.c        |    3 +--\n mktag.c                  |    3 +--\n mktree.c                 |    6 ++----\n pretty.c                 |    3 +--\n read-cache.c             |    3 +--\n remote.c                 |    3 +--\n rerere.c                 |    4 +---\n sha1_file.c              |    6 ++----\n walker.c                 |    3 +--\n ws.c                     |    3 +--\n wt-status.c              |   11 +++--------\n xdiff-interface.c        |    3 +--\n 47 files changed, 92 insertions(+), 201 deletions(-)\n\ndiff --git a/archive-tar.c b/archive-tar.c\nindex e3170fb..ca0a12c 100644\n--- a/archive-tar.c\n+++ b/archive-tar.c\n@@ -124,11 +124,9 @@ static int write_tar_entry(struct archiver_args *args,\n \t\tunsigned int mode, void *buffer, unsigned long size)\n {\n \tstruct ustar_header header = { { 0, }, };\n-\tstruct strbuf ext_header;\n+\tstruct strbuf ext_header = STRBUF_INIT;\n \tint err = 0;\n \n-\tstrbuf_init(&ext_header, 0);\n-\n \tif (!sha1) {\n \t\t*header.typeflag = TYPEFLAG_GLOBAL_HEADER;\n \t\tmode = 0100666;\n@@ -210,10 +208,9 @@ static int write_tar_entry(struct archiver_args *args,\n static int write_global_extended_header(struct archiver_args *args)\n {\n \tconst unsigned char *sha1 = args->commit_sha1;\n-\tstruct strbuf ext_header;\n+\tstruct strbuf ext_header = STRBUF_INIT;\n \tint err;\n \n-\tstrbuf_init(&ext_header, 0);\n \tstrbuf_append_ext_header(&ext_header, \"comment\", sha1_to_hex(sha1), 40);\n \terr = write_tar_entry(args, NULL, NULL, 0, 0, ext_header.buf,\n \t\t\text_header.len);\ndiff --git a/archive.c b/archive.c\nindex 44ab008..849eed5 100644\n--- a/archive.c\n+++ b/archive.c\n@@ -29,11 +29,10 @@ static void format_subst(const struct commit *commit,\n                          struct strbuf *buf)\n {\n \tchar *to_free = NULL;\n-\tstruct strbuf fmt;\n+\tstruct strbuf fmt = STRBUF_INIT;\n \n \tif (src == buf->buf)\n \t\tto_free = strbuf_detach(buf, NULL);\n-\tstrbuf_init(&fmt, 0);\n \tfor (;;) {\n \t\tconst char *b, *c;\n \n@@ -65,10 +64,9 @@ static void *sha1_file_to_archive(const char *path, const unsigned char *sha1,\n \n \tbuffer = read_sha1_file(sha1, type, sizep);\n \tif (buffer && S_ISREG(mode)) {\n-\t\tstruct strbuf buf;\n+\t\tstruct strbuf buf = STRBUF_INIT;\n \t\tsize_t size = 0;\n \n-\t\tstrbuf_init(&buf, 0);\n \t\tstrbuf_attach(&buf, buffer, *sizep, *sizep + 1);\n \t\tconvert_to_working_tree(path, buf.buf, buf.len, &buf);\n \t\tif (commit)\ndiff --git a/builtin-apply.c b/builtin-apply.c\nindex 945616e..72da0b0 100644\n--- a/builtin-apply.c\n+++ b/builtin-apply.c\n@@ -321,13 +321,12 @@ static char *find_name(const char *line, char *def, int p_value, int terminate)\n \tconst char *start = line;\n \n \tif (*line == '\"') {\n-\t\tstruct strbuf name;\n+\t\tstruct strbuf name = STRBUF_INIT;\n \n \t\t/*\n \t\t * Proposed \"new-style\" GNU patch/diff format; see\n \t\t * http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2\n \t\t */\n-\t\tstrbuf_init(&name, 0);\n \t\tif (!unquote_c_style(&name, line, NULL)) {\n \t\t\tchar *cp;\n \n@@ -675,11 +674,8 @@ static char *git_header_name(char *line, int llen)\n \n \tif (*line == '\"') {\n \t\tconst char *cp;\n-\t\tstruct strbuf first;\n-\t\tstruct strbuf sp;\n-\n-\t\tstrbuf_init(&first, 0);\n-\t\tstrbuf_init(&sp, 0);\n+\t\tstruct strbuf first = STRBUF_INIT;\n+\t\tstruct strbuf sp = STRBUF_INIT;\n \n \t\tif (unquote_c_style(&first, line, &second))\n \t\t\tgoto free_and_fail1;\n@@ -741,10 +737,9 @@ static char *git_header_name(char *line, int llen)\n \t */\n \tfor (second = name; second < line + llen; second++) {\n \t\tif (*second == '\"') {\n-\t\t\tstruct strbuf sp;\n+\t\t\tstruct strbuf sp = STRBUF_INIT;\n \t\t\tconst char *np;\n \n-\t\t\tstrbuf_init(&sp, 0);\n \t\t\tif (unquote_c_style(&sp, second, NULL))\n \t\t\t\tgoto free_and_fail2;\n \n@@ -1506,11 +1501,10 @@ static const char minuses[]=\n \n static void show_stats(struct patch *patch)\n {\n-\tstruct strbuf qname;\n+\tstruct strbuf qname = STRBUF_INIT;\n \tchar *cp = patch->new_name ? patch->new_name : patch->old_name;\n \tint max, add, del;\n \n-\tstrbuf_init(&qname, 0);\n \tquote_c_style(cp, &qname, NULL, 0);\n \n \t/*\n@@ -2288,14 +2282,12 @@ static void add_to_fn_table(struct patch *patch)\n \n static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tstruct image image;\n \tsize_t len;\n \tchar *img;\n \tstruct patch *tpatch;\n \n-\tstrbuf_init(&buf, 0);\n-\n \tif (!(patch->is_copy || patch->is_rename) &&\n \t    ((tpatch = in_fn_table(patch->old_name)) != NULL)) {\n \t\tif (tpatch == (struct patch *) -1) {\n@@ -2775,7 +2767,7 @@ static void add_index_file(const char *path, unsigned mode, void *buf, unsigned\n static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)\n {\n \tint fd;\n-\tstruct strbuf nbuf;\n+\tstruct strbuf nbuf = STRBUF_INIT;\n \n \tif (S_ISGITLINK(mode)) {\n \t\tstruct stat st;\n@@ -2794,7 +2786,6 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,\n \tif (fd < 0)\n \t\treturn -1;\n \n-\tstrbuf_init(&nbuf, 0);\n \tif (convert_to_working_tree(path, buf, size, &nbuf)) {\n \t\tsize = nbuf.len;\n \t\tbuf  = nbuf.buf;\n@@ -3056,13 +3047,12 @@ static void prefix_patches(struct patch *p)\n static int apply_patch(int fd, const char *filename, int options)\n {\n \tsize_t offset;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tstruct patch *list = NULL, **listp = &list;\n \tint skipped_patch = 0;\n \n \t/* FIXME - memory leak when using multiple patch files as inputs */\n \tmemset(&fn_table, 0, sizeof(struct string_list));\n-\tstrbuf_init(&buf, 0);\n \tpatch_input_file = filename;\n \tread_patch_file(&buf, fd);\n \toffset = 0;\ndiff --git a/builtin-blame.c b/builtin-blame.c\nindex 93d2daf..a94b335 100644\n--- a/builtin-blame.c\n+++ b/builtin-blame.c\n@@ -2060,7 +2060,7 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \tstruct commit *commit;\n \tstruct origin *origin;\n \tunsigned char head_sha1[20];\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tconst char *ident;\n \ttime_t now;\n \tint size, len;\n@@ -2080,7 +2080,6 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \n \torigin = make_origin(commit, path);\n \n-\tstrbuf_init(&buf, 0);\n \tif (!contents_from || strcmp(\"-\", contents_from)) {\n \t\tstruct stat st;\n \t\tconst char *read_from;\ndiff --git a/builtin-branch.c b/builtin-branch.c\nindex 6e2c614..bb49827 100644\n--- a/builtin-branch.c\n+++ b/builtin-branch.c\n@@ -334,11 +334,10 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,\n \t}\n \n \tif (verbose) {\n-\t\tstruct strbuf subject;\n+\t\tstruct strbuf subject = STRBUF_INIT;\n \t\tconst char *sub = \" **** invalid ref ****\";\n \t\tchar stat[128];\n \n-\t\tstrbuf_init(&subject, 0);\n \t\tstat[0] = '\\0';\n \n \t\tcommit = item->commit;\ndiff --git a/builtin-cat-file.c b/builtin-cat-file.c\nindex 3fba6b9..30d00a6 100644\n--- a/builtin-cat-file.c\n+++ b/builtin-cat-file.c\n@@ -189,9 +189,8 @@ static int batch_one_object(const char *obj_name, int print_contents)\n \n static int batch_objects(int print_contents)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \n-\tstrbuf_init(&buf, 0);\n \twhile (strbuf_getline(&buf, stdin, '\\n') != EOF) {\n \t\tint error = batch_one_object(buf.buf, print_contents);\n \t\tif (error)\ndiff --git a/builtin-checkout-index.c b/builtin-checkout-index.c\nindex 55b7aaf..4ba2702 100644\n--- a/builtin-checkout-index.c\n+++ b/builtin-checkout-index.c\n@@ -268,13 +268,11 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)\n \t}\n \n \tif (read_from_stdin) {\n-\t\tstruct strbuf buf, nbuf;\n+\t\tstruct strbuf buf = STRBUF_INIT, nbuf = STRBUF_INIT;\n \n \t\tif (all)\n \t\t\tdie(\"git checkout-index: don't mix '--all' and '--stdin'\");\n \n-\t\tstrbuf_init(&buf, 0);\n-\t\tstrbuf_init(&nbuf, 0);\n \t\twhile (strbuf_getline(&buf, stdin, line_termination) != EOF) {\n \t\t\tconst char *p;\n \t\t\tif (line_termination && buf.buf[0] == '\"') {\ndiff --git a/builtin-checkout.c b/builtin-checkout.c\nindex f167a98..03b9b53 100644\n--- a/builtin-checkout.c\n+++ b/builtin-checkout.c\n@@ -308,8 +308,7 @@ static void show_local_changes(struct object *head)\n \n static void describe_detached_head(char *msg, struct commit *commit)\n {\n-\tstruct strbuf sb;\n-\tstrbuf_init(&sb, 0);\n+\tstruct strbuf sb = STRBUF_INIT;\n \tparse_commit(commit);\n \tpretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, 0, NULL, NULL, 0, 0);\n \tfprintf(stderr, \"%s %s... %s\\n\", msg,\n@@ -357,8 +356,7 @@ struct branch_info {\n \n static void setup_branch_path(struct branch_info *branch)\n {\n-\tstruct strbuf buf;\n-\tstrbuf_init(&buf, 0);\n+\tstruct strbuf buf = STRBUF_INIT;\n \tstrbuf_addstr(&buf, \"refs/heads/\");\n \tstrbuf_addstr(&buf, branch->name);\n \tbranch->path = strbuf_detach(&buf, NULL);\n@@ -480,7 +478,7 @@ static void update_refs_for_switch(struct checkout_opts *opts,\n \t\t\t\t   struct branch_info *old,\n \t\t\t\t   struct branch_info *new)\n {\n-\tstruct strbuf msg;\n+\tstruct strbuf msg = STRBUF_INIT;\n \tconst char *old_desc;\n \tif (opts->new_branch) {\n \t\tcreate_branch(old->name, opts->new_branch, new->name, 0,\n@@ -489,7 +487,6 @@ static void update_refs_for_switch(struct checkout_opts *opts,\n \t\tsetup_branch_path(new);\n \t}\n \n-\tstrbuf_init(&msg, 0);\n \told_desc = old->name;\n \tif (!old_desc)\n \t\told_desc = sha1_to_hex(old->commit->object.sha1);\n@@ -731,8 +728,7 @@ no_reference:\n \t}\n \n \tif (opts.new_branch) {\n-\t\tstruct strbuf buf;\n-\t\tstrbuf_init(&buf, 0);\n+\t\tstruct strbuf buf = STRBUF_INIT;\n \t\tstrbuf_addstr(&buf, \"refs/heads/\");\n \t\tstrbuf_addstr(&buf, opts.new_branch);\n \t\tif (!get_sha1(buf.buf, rev))\ndiff --git a/builtin-clean.c b/builtin-clean.c\nindex 357d398..d998394 100644\n--- a/builtin-clean.c\n+++ b/builtin-clean.c\n@@ -31,11 +31,11 @@ int cmd_clean(int argc, const char **argv, const char *prefix)\n \tint i;\n \tint show_only = 0, remove_directories = 0, quiet = 0, ignored = 0;\n \tint ignored_only = 0, baselen = 0, config_set = 0, errors = 0;\n-\tstruct strbuf directory;\n+\tstruct strbuf directory = STRBUF_INIT;\n \tstruct dir_struct dir = { 0, };\n \tconst char *path, *base;\n \tstatic const char **pathspec;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tconst char *qname;\n \tchar *seen = NULL;\n \tstruct option options[] = {\n@@ -58,7 +58,6 @@ int cmd_clean(int argc, const char **argv, const char *prefix)\n \n \targc = parse_options(argc, argv, options, builtin_clean_usage, 0);\n \n-\tstrbuf_init(&buf, 0);\n \tif (ignored_only)\n \t\tdir.show_ignored = 1;\n \n@@ -87,7 +86,6 @@ int cmd_clean(int argc, const char **argv, const char *prefix)\n \tif (baselen)\n \t\tpath = base = xmemdupz(*pathspec, baselen);\n \tread_directory(&dir, path, base, baselen, pathspec);\n-\tstrbuf_init(&directory, 0);\n \n \tif (pathspec)\n \t\tseen = xmalloc(argc > 0 ? argc : 1);\ndiff --git a/builtin-clone.c b/builtin-clone.c\nindex d1d5fe8..964d40d 100644\n--- a/builtin-clone.c\n+++ b/builtin-clone.c\n@@ -264,10 +264,9 @@ pid_t junk_pid;\n \n static void remove_junk(void)\n {\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \tif (getpid() != junk_pid)\n \t\treturn;\n-\tstrbuf_init(&sb, 0);\n \tif (junk_git_dir) {\n \t\tstrbuf_addstr(&sb, junk_git_dir);\n \t\tremove_dir_recursively(&sb, 0);\n@@ -354,7 +353,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)\n \tchar *path, *dir;\n \tconst struct ref *refs, *head_points_at, *remote_head, *mapped_refs;\n \tchar branch_top[256], key[256], value[256];\n-\tstruct strbuf reflog_msg;\n+\tstruct strbuf reflog_msg = STRBUF_INIT;\n \tstruct transport *transport = NULL;\n \tchar *src_ref_prefix = \"refs/heads/\";\n \n@@ -404,7 +403,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)\n \tif (!stat(dir, &buf))\n \t\tdie(\"destination directory '%s' already exists.\", dir);\n \n-\tstrbuf_init(&reflog_msg, 0);\n \tstrbuf_addf(&reflog_msg, \"clone: from %s\", repo);\n \n \tif (option_bare)\n@@ -526,7 +524,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)\n \t\tcreate_symref(\"HEAD\", head_points_at->name, NULL);\n \n \t\tif (!option_bare) {\n-\t\t\tstruct strbuf head_ref;\n+\t\t\tstruct strbuf head_ref = STRBUF_INIT;\n \t\t\tconst char *head = head_points_at->name;\n \n \t\t\tif (!prefixcmp(head, \"refs/heads/\"))\n@@ -539,7 +537,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)\n \t\t\t\t   head_points_at->old_sha1,\n \t\t\t\t   NULL, 0, DIE_ON_ERR);\n \n-\t\t\tstrbuf_init(&head_ref, 0);\n \t\t\tstrbuf_addstr(&head_ref, branch_top);\n \t\t\tstrbuf_addstr(&head_ref, \"HEAD\");\n \ndiff --git a/builtin-commit.c b/builtin-commit.c\nindex 69d8492..d079293 100644\n--- a/builtin-commit.c\n+++ b/builtin-commit.c\n@@ -445,7 +445,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix)\n {\n \tstruct stat statbuf;\n \tint commitable, saved_color_setting;\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \tchar *buffer;\n \tFILE *fp;\n \tconst char *hook_arg1 = NULL;\n@@ -455,7 +455,6 @@ static int prepare_to_commit(const char *index_file, const char *prefix)\n \tif (!no_verify && run_hook(index_file, \"pre-commit\", NULL))\n \t\treturn 0;\n \n-\tstrbuf_init(&sb, 0);\n \tif (message.len) {\n \t\tstrbuf_addbuf(&sb, &message);\n \t\thook_arg1 = \"message\";\n@@ -508,10 +507,9 @@ static int prepare_to_commit(const char *index_file, const char *prefix)\n \t\tstripspace(&sb, 0);\n \n \tif (signoff) {\n-\t\tstruct strbuf sob;\n+\t\tstruct strbuf sob = STRBUF_INIT;\n \t\tint i;\n \n-\t\tstrbuf_init(&sob, 0);\n \t\tstrbuf_addstr(&sob, sign_off_header);\n \t\tstrbuf_addstr(&sob, fmt_name(getenv(\"GIT_COMMITTER_NAME\"),\n \t\t\t\t\t     getenv(\"GIT_COMMITTER_EMAIL\")));\n@@ -669,7 +667,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix)\n  */\n static int message_is_empty(struct strbuf *sb)\n {\n-\tstruct strbuf tmpl;\n+\tstruct strbuf tmpl = STRBUF_INIT;\n \tconst char *nl;\n \tint eol, i, start = 0;\n \n@@ -677,7 +675,6 @@ static int message_is_empty(struct strbuf *sb)\n \t\treturn 0;\n \n \t/* See if the template is just a prefix of the message. */\n-\tstrbuf_init(&tmpl, 0);\n \tif (template_file && strbuf_read_file(&tmpl, template_file, 0) > 0) {\n \t\tstripspace(&tmpl, cleanup_mode == CLEANUP_ALL);\n \t\tif (start + tmpl.len <= sb->len &&\n@@ -928,7 +925,7 @@ static const char commit_utf8_warn[] =\n \n int cmd_commit(int argc, const char **argv, const char *prefix)\n {\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \tconst char *index_file, *reflog_msg;\n \tchar *nl, *p;\n \tunsigned char commit_sha1[20];\n@@ -963,12 +960,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix)\n \t\tfor (c = commit->parents; c; c = c->next)\n \t\t\tpptr = &commit_list_insert(c->item, pptr)->next;\n \t} else if (in_merge) {\n-\t\tstruct strbuf m;\n+\t\tstruct strbuf m = STRBUF_INIT;\n \t\tFILE *fp;\n \n \t\treflog_msg = \"commit (merge)\";\n \t\tpptr = &commit_list_insert(lookup_commit(head_sha1), pptr)->next;\n-\t\tstrbuf_init(&m, 0);\n \t\tfp = fopen(git_path(\"MERGE_HEAD\"), \"r\");\n \t\tif (fp == NULL)\n \t\t\tdie(\"could not open %s for reading: %s\",\n@@ -988,7 +984,6 @@ int cmd_commit(int argc, const char **argv, const char *prefix)\n \tparents = reduce_heads(parents);\n \n \t/* Finally, get the commit message */\n-\tstrbuf_init(&sb, 0);\n \tif (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {\n \t\trollback_index_files();\n \t\tdie(\"could not read commit message\");\ndiff --git a/builtin-fetch--tool.c b/builtin-fetch--tool.c\nindex 7460ab7..469b07e 100644\n--- a/builtin-fetch--tool.c\n+++ b/builtin-fetch--tool.c\n@@ -5,8 +5,7 @@\n \n static char *get_stdin(void)\n {\n-\tstruct strbuf buf;\n-\tstrbuf_init(&buf, 0);\n+\tstruct strbuf buf = STRBUF_INIT;\n \tif (strbuf_read(&buf, 0, 1024) < 0) {\n \t\tdie(\"error reading standard input: %s\", strerror(errno));\n \t}\ndiff --git a/builtin-fmt-merge-msg.c b/builtin-fmt-merge-msg.c\nindex df02ba7..1f39667 100644\n--- a/builtin-fmt-merge-msg.c\n+++ b/builtin-fmt-merge-msg.c\n@@ -348,7 +348,7 @@ int fmt_merge_msg(int merge_summary, struct strbuf *in, struct strbuf *out) {\n int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)\n {\n \tFILE *in = stdin;\n-\tstruct strbuf input, output;\n+\tstruct strbuf input = STRBUF_INIT, output = STRBUF_INIT;\n \tint ret;\n \n \tgit_config(fmt_merge_msg_config, NULL);\n@@ -379,10 +379,8 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)\n \tif (argc > 1)\n \t\tusage(fmt_merge_msg_usage);\n \n-\tstrbuf_init(&input, 0);\n \tif (strbuf_read(&input, fileno(in), 0) < 0)\n \t\tdie(\"could not read input file %s\", strerror(errno));\n-\tstrbuf_init(&output, 0);\n \n \tret = fmt_merge_msg(merge_summary, &input, &output);\n \tif (ret)\ndiff --git a/builtin-help.c b/builtin-help.c\nindex cb97f52..783f3a8 100644\n--- a/builtin-help.c\n+++ b/builtin-help.c\n@@ -321,11 +321,9 @@ static const char *cmd_to_page(const char *git_cmd)\n \n static void setup_man_path(void)\n {\n-\tstruct strbuf new_path;\n+\tstruct strbuf new_path = STRBUF_INIT;\n \tconst char *old_path = getenv(\"MANPATH\");\n \n-\tstrbuf_init(&new_path, 0);\n-\n \t/* We should always put ':' after our path. If there is no\n \t * old_path, the ':' at the end will let 'man' to try\n \t * system-wide paths after ours to find the manual page. If\ndiff --git a/builtin-log.c b/builtin-log.c\nindex 4f4b15d..a5122f5 100644\n--- a/builtin-log.c\n+++ b/builtin-log.c\n@@ -627,10 +627,9 @@ static void gen_message_id(struct rev_info *info, char *base)\n \tconst char *committer = git_committer_info(IDENT_WARN_ON_NO_NAME);\n \tconst char *email_start = strrchr(committer, '<');\n \tconst char *email_end = strrchr(committer, '>');\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tif (!email_start || !email_end || email_start > email_end - 1)\n \t\tdie(\"Could not extract email from committer identity.\");\n-\tstrbuf_init(&buf, 0);\n \tstrbuf_addf(&buf, \"%s.%lu.git.%.*s\", base,\n \t\t    (unsigned long) time(NULL),\n \t\t    (int)(email_end - email_start - 1), email_start + 1);\n@@ -649,7 +648,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,\n \tconst char *msg;\n \tconst char *extra_headers = rev->extra_headers;\n \tstruct shortlog log;\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \tint i;\n \tconst char *encoding = \"utf-8\";\n \tstruct diff_options opts;\n@@ -670,7 +669,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,\n \tcommitter = git_committer_info(0);\n \n \tmsg = body;\n-\tstrbuf_init(&sb, 0);\n \tpp_user_info(NULL, CMIT_FMT_EMAIL, &sb, committer, DATE_RFC2822,\n \t\t     encoding);\n \tpp_title_line(CMIT_FMT_EMAIL, &msg, &sb, subject_start, extra_headers,\n@@ -752,7 +750,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \tconst char *in_reply_to = NULL;\n \tstruct patch_ids ids;\n \tchar *add_signoff = NULL;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \n \tgit_config(git_format_config, NULL);\n \tinit_revisions(&rev, prefix);\n@@ -860,8 +858,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \t}\n \targc = j;\n \n-\tstrbuf_init(&buf, 0);\n-\n \tfor (i = 0; i < extra_hdr_nr; i++) {\n \t\tstrbuf_addstr(&buf, extra_hdr[i]);\n \t\tstrbuf_addch(&buf, '\\n');\n@@ -1138,8 +1134,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)\n \t\t\tsign = '-';\n \n \t\tif (verbose) {\n-\t\t\tstruct strbuf buf;\n-\t\t\tstrbuf_init(&buf, 0);\n+\t\t\tstruct strbuf buf = STRBUF_INIT;\n \t\t\tpretty_print_commit(CMIT_FMT_ONELINE, commit,\n \t\t\t                    &buf, 0, NULL, NULL, 0, 0);\n \t\t\tprintf(\"%c %s %s\\n\", sign,\ndiff --git a/builtin-merge.c b/builtin-merge.c\nindex ef96078..fec88b7 100644\n--- a/builtin-merge.c\n+++ b/builtin-merge.c\n@@ -224,7 +224,7 @@ static void reset_hard(unsigned const char *sha1, int verbose)\n \n static void restore_state(void)\n {\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \tconst char *args[] = { \"stash\", \"apply\", NULL, NULL };\n \n \tif (is_null_sha1(stash))\n@@ -232,7 +232,6 @@ static void restore_state(void)\n \n \treset_hard(head, 1);\n \n-\tstrbuf_init(&sb, 0);\n \targs[2] = sha1_to_hex(stash);\n \n \t/*\n@@ -256,7 +255,7 @@ static void squash_message(void)\n {\n \tstruct rev_info rev;\n \tstruct commit *commit;\n-\tstruct strbuf out;\n+\tstruct strbuf out = STRBUF_INIT;\n \tstruct commit_list *j;\n \tint fd;\n \n@@ -280,7 +279,6 @@ static void squash_message(void)\n \tif (prepare_revision_walk(&rev))\n \t\tdie(\"revision walk setup failed\");\n \n-\tstrbuf_init(&out, 0);\n \tstrbuf_addstr(&out, \"Squashed commit of the following:\\n\");\n \twhile ((commit = get_revision(&rev)) != NULL) {\n \t\tstrbuf_addch(&out, '\\n');\n@@ -324,9 +322,8 @@ static int run_hook(const char *name)\n \n static void finish(const unsigned char *new_head, const char *msg)\n {\n-\tstruct strbuf reflog_message;\n+\tstruct strbuf reflog_message = STRBUF_INIT;\n \n-\tstrbuf_init(&reflog_message, 0);\n \tif (!msg)\n \t\tstrbuf_addstr(&reflog_message, getenv(\"GIT_REFLOG_ACTION\"));\n \telse {\n@@ -377,7 +374,7 @@ static void merge_name(const char *remote, struct strbuf *msg)\n {\n \tstruct object *remote_head;\n \tunsigned char branch_head[20] = { 0, }, buf_sha[20];\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tconst char *ptr;\n \tint len, early;\n \n@@ -385,7 +382,6 @@ static void merge_name(const char *remote, struct strbuf *msg)\n \tif (!remote_head)\n \t\tdie(\"'%s' does not point to a commit\", remote);\n \n-\tstrbuf_init(&buf, 0);\n \tstrbuf_addstr(&buf, \"refs/heads/\");\n \tstrbuf_addstr(&buf, remote);\n \tresolve_ref(buf.buf, branch_head, 0, 0);\n@@ -440,10 +436,9 @@ static void merge_name(const char *remote, struct strbuf *msg)\n \tif (!strcmp(remote, \"FETCH_HEAD\") &&\n \t\t\t!access(git_path(\"FETCH_HEAD\"), R_OK)) {\n \t\tFILE *fp;\n-\t\tstruct strbuf line;\n+\t\tstruct strbuf line = STRBUF_INIT;\n \t\tchar *ptr;\n \n-\t\tstrbuf_init(&line, 0);\n \t\tfp = fopen(git_path(\"FETCH_HEAD\"), \"r\");\n \t\tif (!fp)\n \t\t\tdie(\"could not open %s for reading: %s\",\n@@ -540,7 +535,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,\n \tconst char **args;\n \tint i = 0, ret;\n \tstruct commit_list *j;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \n \tif (!strcmp(strategy, \"recursive\") || !strcmp(strategy, \"subtree\")) {\n \t\tint clean;\n@@ -577,7 +572,6 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,\n \t} else {\n \t\targs = xmalloc((4 + commit_list_count(common) +\n \t\t\t\t\tcommit_list_count(remoteheads)) * sizeof(char *));\n-\t\tstrbuf_init(&buf, 0);\n \t\tstrbuf_addf(&buf, \"merge-%s\", strategy);\n \t\targs[i++] = buf.buf;\n \t\tfor (j = common; j; j = j->next)\n@@ -827,7 +821,7 @@ static int evaluate_result(void)\n int cmd_merge(int argc, const char **argv, const char *prefix)\n {\n \tunsigned char result_tree[20];\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tconst char *head_arg;\n \tint flag, head_invalid = 0, i;\n \tint best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;\n@@ -876,7 +870,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t * Traditional format never would have \"-m\" so it is an\n \t * additional safety measure to check for it.\n \t */\n-\tstrbuf_init(&buf, 0);\n \n \tif (!have_message && is_old_style_invocation(argc, argv)) {\n \t\tstrbuf_addstr(&merge_msg, argv[0]);\n@@ -906,7 +899,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t\treset_hard(remote_head->sha1, 0);\n \t\treturn 0;\n \t} else {\n-\t\tstruct strbuf msg;\n+\t\tstruct strbuf msg = STRBUF_INIT;\n \n \t\t/* We are invoked directly as the first-class UI. */\n \t\thead_arg = \"HEAD\";\n@@ -919,7 +912,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t\t * codepath so we discard the error in this\n \t\t * loop.\n \t\t */\n-\t\tstrbuf_init(&msg, 0);\n \t\tfor (i = 0; i < argc; i++)\n \t\t\tmerge_name(argv[i], &msg);\n \t\tfmt_merge_msg(option_log, &msg, &merge_msg);\n@@ -994,7 +986,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t\t\t!common->next &&\n \t\t\t!hashcmp(common->item->object.sha1, head)) {\n \t\t/* Again the most common case of merging one remote. */\n-\t\tstruct strbuf msg;\n+\t\tstruct strbuf msg = STRBUF_INIT;\n \t\tstruct object *o;\n \t\tchar hex[41];\n \n@@ -1004,7 +996,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)\n \t\t\thex,\n \t\t\tfind_unique_abbrev(remoteheads->item->object.sha1,\n \t\t\tDEFAULT_ABBREV));\n-\t\tstrbuf_init(&msg, 0);\n \t\tstrbuf_addstr(&msg, \"Fast forward\");\n \t\tif (have_message)\n \t\t\tstrbuf_addstr(&msg,\ndiff --git a/builtin-remote.c b/builtin-remote.c\nindex 883e6d4..a4cc0fa 100644\n--- a/builtin-remote.c\n+++ b/builtin-remote.c\n@@ -54,7 +54,7 @@ static int add(int argc, const char **argv)\n \tstruct string_list track = { NULL, 0, 0 };\n \tconst char *master = NULL;\n \tstruct remote *remote;\n-\tstruct strbuf buf, buf2;\n+\tstruct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT;\n \tconst char *name, *url;\n \tint i;\n \n@@ -81,9 +81,6 @@ static int add(int argc, const char **argv)\n \t\t\tremote->fetch_refspec_nr))\n \t\tdie(\"remote %s already exists.\", name);\n \n-\tstrbuf_init(&buf, 0);\n-\tstrbuf_init(&buf2, 0);\n-\n \tstrbuf_addf(&buf2, \"refs/heads/test:refs/remotes/%s/test\", name);\n \tif (!valid_fetch_refspec(buf2.buf))\n \t\tdie(\"'%s' is not a valid remote name\", name);\n@@ -350,7 +347,7 @@ static int rm(int argc, const char **argv)\n \t\tOPT_END()\n \t};\n \tstruct remote *remote;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tstruct known_remotes known_remotes = { NULL, NULL };\n \tstruct string_list branches = { NULL, 0, 0, 1 };\n \tstruct branches_for_remote cb_data = { NULL, &branches, &known_remotes };\n@@ -366,7 +363,6 @@ static int rm(int argc, const char **argv)\n \tknown_remotes.to_delete = remote;\n \tfor_each_remote(add_known_remote, &known_remotes);\n \n-\tstrbuf_init(&buf, 0);\n \tstrbuf_addf(&buf, \"remote.%s\", remote->name);\n \tif (git_config_rename_section(buf.buf, NULL) < 1)\n \t\treturn error(\"Could not remove config section '%s'\", buf.buf);\ndiff --git a/builtin-rev-list.c b/builtin-rev-list.c\nindex facaff2..06cdeb7 100644\n--- a/builtin-rev-list.c\n+++ b/builtin-rev-list.c\n@@ -107,8 +107,7 @@ static void show_commit(struct commit *commit)\n \t\tputchar('\\n');\n \n \tif (revs.verbose_header && commit->buffer) {\n-\t\tstruct strbuf buf;\n-\t\tstrbuf_init(&buf, 0);\n+\t\tstruct strbuf buf = STRBUF_INIT;\n \t\tpretty_print_commit(revs.commit_format, commit,\n \t\t\t\t    &buf, revs.abbrev, NULL, NULL,\n \t\t\t\t    revs.date_mode, 0);\ndiff --git a/builtin-rev-parse.c b/builtin-rev-parse.c\nindex 9aa049e..81d5a6f 100644\n--- a/builtin-rev-parse.c\n+++ b/builtin-rev-parse.c\n@@ -307,19 +307,17 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n \t\tOPT_END(),\n \t};\n \n-\tstruct strbuf sb, parsed;\n+\tstruct strbuf sb = STRBUF_INIT, parsed = STRBUF_INIT;\n \tconst char **usage = NULL;\n \tstruct option *opts = NULL;\n \tint onb = 0, osz = 0, unb = 0, usz = 0;\n \n-\tstrbuf_init(&parsed, 0);\n \tstrbuf_addstr(&parsed, \"set --\");\n \targc = parse_options(argc, argv, parseopt_opts, parseopt_usage,\n \t                     PARSE_OPT_KEEP_DASHDASH);\n \tif (argc < 1 || strcmp(argv[0], \"--\"))\n \t\tusage_with_options(parseopt_usage, parseopt_opts);\n \n-\tstrbuf_init(&sb, 0);\n \t/* get the usage up to the first line with a -- on it */\n \tfor (;;) {\n \t\tif (strbuf_getline(&sb, stdin, '\\n') == EOF)\ndiff --git a/builtin-show-branch.c b/builtin-show-branch.c\nindex 233eed4..306b850 100644\n--- a/builtin-show-branch.c\n+++ b/builtin-show-branch.c\n@@ -259,11 +259,10 @@ static void join_revs(struct commit_list **list_p,\n \n static void show_one_commit(struct commit *commit, int no_name)\n {\n-\tstruct strbuf pretty;\n+\tstruct strbuf pretty = STRBUF_INIT;\n \tconst char *pretty_str = \"(unavailable)\";\n \tstruct commit_name *name = commit->util;\n \n-\tstrbuf_init(&pretty, 0);\n \tif (commit->object.parsed) {\n \t\tpretty_print_commit(CMIT_FMT_ONELINE, commit,\n \t\t\t\t    &pretty, 0, NULL, NULL, 0, 0);\ndiff --git a/builtin-stripspace.c b/builtin-stripspace.c\nindex c0b2130..d6e3896 100644\n--- a/builtin-stripspace.c\n+++ b/builtin-stripspace.c\n@@ -70,14 +70,13 @@ void stripspace(struct strbuf *sb, int skip_comments)\n \n int cmd_stripspace(int argc, const char **argv, const char *prefix)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tint strip_comments = 0;\n \n \tif (argc > 1 && (!strcmp(argv[1], \"-s\") ||\n \t\t\t\t!strcmp(argv[1], \"--strip-comments\")))\n \t\tstrip_comments = 1;\n \n-\tstrbuf_init(&buf, 0);\n \tif (strbuf_read(&buf, 0, 1024) < 0)\n \t\tdie(\"could not read the input\");\n \ndiff --git a/builtin-tag.c b/builtin-tag.c\nindex 084970b..75f6d65 100644\n--- a/builtin-tag.c\n+++ b/builtin-tag.c\n@@ -337,7 +337,7 @@ static int parse_msg_arg(const struct option *opt, const char *arg, int unset)\n \n int cmd_tag(int argc, const char **argv, const char *prefix)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tunsigned char object[20], prev[20];\n \tchar ref[PATH_MAX];\n \tconst char *object_ref, *tag;\n@@ -387,7 +387,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \tif (verify)\n \t\treturn for_each_tag_name(argv, verify_tag);\n \n-\tstrbuf_init(&buf, 0);\n \tif (msg.given || msgfile) {\n \t\tif (msg.given && msgfile)\n \t\t\tdie(\"only one -F or -m option is allowed.\");\ndiff --git a/builtin-update-index.c b/builtin-update-index.c\nindex 417f972..1270836 100644\n--- a/builtin-update-index.c\n+++ b/builtin-update-index.c\n@@ -297,11 +297,9 @@ static void update_one(const char *path, const char *prefix, int prefix_length)\n \n static void read_index_info(int line_termination)\n {\n-\tstruct strbuf buf;\n-\tstruct strbuf uq;\n+\tstruct strbuf buf = STRBUF_INIT;\n+\tstruct strbuf uq = STRBUF_INIT;\n \n-\tstrbuf_init(&buf, 0);\n-\tstrbuf_init(&uq, 0);\n \twhile (strbuf_getline(&buf, stdin, line_termination) != EOF) {\n \t\tchar *ptr, *tab;\n \t\tchar *path_name;\n@@ -717,10 +715,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \t\t\tfree((char*)p);\n \t}\n \tif (read_from_stdin) {\n-\t\tstruct strbuf buf, nbuf;\n+\t\tstruct strbuf buf = STRBUF_INIT, nbuf = STRBUF_INIT;\n \n-\t\tstrbuf_init(&buf, 0);\n-\t\tstrbuf_init(&nbuf, 0);\n \t\tsetup_work_tree();\n \t\twhile (strbuf_getline(&buf, stdin, line_termination) != EOF) {\n \t\t\tconst char *p;\ndiff --git a/combine-diff.c b/combine-diff.c\nindex 42f28bc..c48ece4 100644\n--- a/combine-diff.c\n+++ b/combine-diff.c\n@@ -740,9 +740,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,\n \n \t\t\t/* If not a fake symlink, apply filters, e.g. autocrlf */\n \t\t\tif (is_file) {\n-\t\t\t\tstruct strbuf buf;\n+\t\t\t\tstruct strbuf buf = STRBUF_INIT;\n \n-\t\t\t\tstrbuf_init(&buf, 0);\n \t\t\t\tif (convert_to_git(elem->path, result, len, &buf, safe_crlf)) {\n \t\t\t\t\tfree(result);\n \t\t\t\t\tresult = strbuf_detach(&buf, &len);\ndiff --git a/config.c b/config.c\nindex 18d305c..b8d289d 100644\n--- a/config.c\n+++ b/config.c\n@@ -753,9 +753,8 @@ static int store_write_section(int fd, const char* key)\n {\n \tconst char *dot;\n \tint i, success;\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \n-\tstrbuf_init(&sb, 0);\n \tdot = memchr(key, '.', store.baselen);\n \tif (dot) {\n \t\tstrbuf_addf(&sb, \"[%.*s \\\"\", (int)(dot - key), key);\n@@ -780,7 +779,7 @@ static int store_write_pair(int fd, const char* key, const char* value)\n \tint i, success;\n \tint length = strlen(key + store.baselen + 1);\n \tconst char *quote = \"\";\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \n \t/*\n \t * Check to see if the value needs to be surrounded with a dq pair.\n@@ -797,7 +796,6 @@ static int store_write_pair(int fd, const char* key, const char* value)\n \tif (i && value[i - 1] == ' ')\n \t\tquote = \"\\\"\";\n \n-\tstrbuf_init(&sb, 0);\n \tstrbuf_addf(&sb, \"\\t%.*s = %s\",\n \t\t    length, key + store.baselen + 1, quote);\n \ndiff --git a/convert.c b/convert.c\nindex a2655bd..00b3a89 100644\n--- a/convert.c\n+++ b/convert.c\n@@ -280,7 +280,7 @@ static int apply_filter(const char *path, const char *src, size_t len,\n \t * (child --> cmd) --> us\n \t */\n \tint ret = 1;\n-\tstruct strbuf nbuf;\n+\tstruct strbuf nbuf = STRBUF_INIT;\n \tstruct async async = { 0, };\n \tstruct filter_params params;\n \n@@ -297,7 +297,6 @@ static int apply_filter(const char *path, const char *src, size_t len,\n \tif (start_async(&async))\n \t\treturn 0;\t/* error was already reported */\n \n-\tstrbuf_init(&nbuf, 0);\n \tif (strbuf_read(&nbuf, async.out, len) < 0) {\n \t\terror(\"read from external filter %s failed\", cmd);\n \t\tret = 0;\ndiff --git a/diff.c b/diff.c\nindex 5b8e64d..321218c 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -217,9 +217,8 @@ static char *quote_two(const char *one, const char *two)\n {\n \tint need_one = quote_c_style(one, NULL, NULL, 1);\n \tint need_two = quote_c_style(two, NULL, NULL, 1);\n-\tstruct strbuf res;\n+\tstruct strbuf res = STRBUF_INIT;\n \n-\tstrbuf_init(&res, 0);\n \tif (need_one + need_two) {\n \t\tstrbuf_addch(&res, '\"');\n \t\tquote_c_style(one, &res, NULL, 1);\n@@ -682,7 +681,7 @@ static char *pprint_rename(const char *a, const char *b)\n {\n \tconst char *old = a;\n \tconst char *new = b;\n-\tstruct strbuf name;\n+\tstruct strbuf name = STRBUF_INIT;\n \tint pfx_length, sfx_length;\n \tint len_a = strlen(a);\n \tint len_b = strlen(b);\n@@ -690,7 +689,6 @@ static char *pprint_rename(const char *a, const char *b)\n \tint qlen_a = quote_c_style(a, NULL, NULL, 0);\n \tint qlen_b = quote_c_style(b, NULL, NULL, 0);\n \n-\tstrbuf_init(&name, 0);\n \tif (qlen_a || qlen_b) {\n \t\tquote_c_style(a, &name, NULL, 0);\n \t\tstrbuf_addstr(&name, \" => \");\n@@ -833,8 +831,7 @@ static void fill_print_name(struct diffstat_file *file)\n \t\treturn;\n \n \tif (!file->is_renamed) {\n-\t\tstruct strbuf buf;\n-\t\tstrbuf_init(&buf, 0);\n+\t\tstruct strbuf buf = STRBUF_INIT;\n \t\tif (quote_c_style(file->name, &buf, NULL, 0)) {\n \t\t\tpname = strbuf_detach(&buf, NULL);\n \t\t} else {\n@@ -1803,10 +1800,9 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int\n \n static int populate_from_stdin(struct diff_filespec *s)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tsize_t size = 0;\n \n-\tstrbuf_init(&buf, 0);\n \tif (strbuf_read(&buf, 0, 0) < 0)\n \t\treturn error(\"error while reading from stdin %s\",\n \t\t\t\t     strerror(errno));\n@@ -1858,7 +1854,7 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)\n \n \tif (!s->sha1_valid ||\n \t    reuse_worktree_file(s->path, s->sha1, 0)) {\n-\t\tstruct strbuf buf;\n+\t\tstruct strbuf buf = STRBUF_INIT;\n \t\tstruct stat st;\n \t\tint fd;\n \n@@ -1901,7 +1897,6 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)\n \t\t/*\n \t\t * Convert from working tree format to canonical git format\n \t\t */\n-\t\tstrbuf_init(&buf, 0);\n \t\tif (convert_to_git(s->path, s->data, s->size, &buf, safe_crlf)) {\n \t\t\tsize_t size = 0;\n \t\t\tmunmap(s->data, s->size);\ndiff --git a/editor.c b/editor.c\nindex eebc3e9..4d469d0 100644\n--- a/editor.c\n+++ b/editor.c\n@@ -26,9 +26,8 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en\n \t\tint i = 0;\n \t\tint failed;\n \t\tconst char *args[6];\n-\t\tstruct strbuf arg0;\n+\t\tstruct strbuf arg0 = STRBUF_INIT;\n \n-\t\tstrbuf_init(&arg0, 0);\n \t\tif (strcspn(editor, \"$ \\t'\") != len) {\n \t\t\t/* there are specials */\n \t\t\tstrbuf_addf(&arg0, \"%s \\\"$@\\\"\", editor);\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex ce6741e..cdd35f9 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -59,9 +59,7 @@ static void add_path(struct strbuf *out, const char *path)\n void setup_path(void)\n {\n \tconst char *old_path = getenv(\"PATH\");\n-\tstruct strbuf new_path;\n-\n-\tstrbuf_init(&new_path, 0);\n+\tstruct strbuf new_path = STRBUF_INIT;\n \n \tadd_path(&new_path, argv_exec_path);\n \tadd_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));\ndiff --git a/fsck.c b/fsck.c\nindex 797e317..0cf5f01 100644\n--- a/fsck.c\n+++ b/fsck.c\n@@ -307,9 +307,8 @@ int fsck_error_function(struct object *obj, int type, const char *fmt, ...)\n {\n \tva_list ap;\n \tint len;\n-\tstruct strbuf sb;\n+\tstruct strbuf sb = STRBUF_INIT;\n \n-\tstrbuf_init(&sb, 0);\n \tstrbuf_addf(&sb, \"object %s:\", obj->sha1?sha1_to_hex(obj->sha1):\"(null)\");\n \n \tva_start(ap, fmt);\ndiff --git a/git.c b/git.c\nindex f4b0cf6..89feb0b 100644\n--- a/git.c\n+++ b/git.c\n@@ -389,10 +389,9 @@ static void handle_internal_command(int argc, const char **argv)\n \n static void execv_dashed_external(const char **argv)\n {\n-\tstruct strbuf cmd;\n+\tstruct strbuf cmd = STRBUF_INIT;\n \tconst char *tmp;\n \n-\tstrbuf_init(&cmd, 0);\n \tstrbuf_addf(&cmd, \"git-%s\", argv[0]);\n \n \t/*\ndiff --git a/graph.c b/graph.c\nindex 5f82170..162a516 100644\n--- a/graph.c\n+++ b/graph.c\n@@ -1010,14 +1010,12 @@ int graph_is_commit_finished(struct git_graph const *graph)\n \n void graph_show_commit(struct git_graph *graph)\n {\n-\tstruct strbuf msgbuf;\n+\tstruct strbuf msgbuf = STRBUF_INIT;\n \tint shown_commit_line = 0;\n \n \tif (!graph)\n \t\treturn;\n \n-\tstrbuf_init(&msgbuf, 0);\n-\n \twhile (!shown_commit_line) {\n \t\tshown_commit_line = graph_next_line(graph, &msgbuf);\n \t\tfwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);\n@@ -1031,12 +1029,11 @@ void graph_show_commit(struct git_graph *graph)\n \n void graph_show_oneline(struct git_graph *graph)\n {\n-\tstruct strbuf msgbuf;\n+\tstruct strbuf msgbuf = STRBUF_INIT;\n \n \tif (!graph)\n \t\treturn;\n \n-\tstrbuf_init(&msgbuf, 0);\n \tgraph_next_line(graph, &msgbuf);\n \tfwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);\n \tstrbuf_release(&msgbuf);\n@@ -1044,12 +1041,11 @@ void graph_show_oneline(struct git_graph *graph)\n \n void graph_show_padding(struct git_graph *graph)\n {\n-\tstruct strbuf msgbuf;\n+\tstruct strbuf msgbuf = STRBUF_INIT;\n \n \tif (!graph)\n \t\treturn;\n \n-\tstrbuf_init(&msgbuf, 0);\n \tgraph_padding_line(graph, &msgbuf);\n \tfwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);\n \tstrbuf_release(&msgbuf);\n@@ -1057,7 +1053,7 @@ void graph_show_padding(struct git_graph *graph)\n \n int graph_show_remainder(struct git_graph *graph)\n {\n-\tstruct strbuf msgbuf;\n+\tstruct strbuf msgbuf = STRBUF_INIT;\n \tint shown = 0;\n \n \tif (!graph)\n@@ -1066,7 +1062,6 @@ int graph_show_remainder(struct git_graph *graph)\n \tif (graph_is_commit_finished(graph))\n \t\treturn 0;\n \n-\tstrbuf_init(&msgbuf, 0);\n \tfor (;;) {\n \t\tgraph_next_line(graph, &msgbuf);\n \t\tfwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);\ndiff --git a/hash-object.c b/hash-object.c\nindex a4d127c..20937ff 100644\n--- a/hash-object.c\n+++ b/hash-object.c\n@@ -34,10 +34,8 @@ static void hash_object(const char *path, const char *type, int write_object,\n \n static void hash_stdin_paths(const char *type, int write_objects)\n {\n-\tstruct strbuf buf, nbuf;\n+\tstruct strbuf buf = STRBUF_INIT, nbuf = STRBUF_INIT;\n \n-\tstrbuf_init(&buf, 0);\n-\tstrbuf_init(&nbuf, 0);\n \twhile (strbuf_getline(&buf, stdin, '\\n') != EOF) {\n \t\tif (buf.buf[0] == '\"') {\n \t\t\tstrbuf_reset(&nbuf);\ndiff --git a/imap-send.c b/imap-send.c\nindex 700c332..fc0aeb5 100644\n--- a/imap-send.c\n+++ b/imap-send.c\n@@ -1263,10 +1263,9 @@ static int imap_store_msg(struct store *gctx, struct msg_data *data, int *uid)\n \n static int read_message(FILE *f, struct msg_data *msg)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \n \tmemset(msg, 0, sizeof(*msg));\n-\tstrbuf_init(&buf, 0);\n \n \tdo {\n \t\tif (strbuf_fread(&buf, CHUNKSIZE, f) <= 0)\ndiff --git a/log-tree.c b/log-tree.c\nindex 2c1f3e6..cec3c06 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -252,7 +252,7 @@ void log_write_email_headers(struct rev_info *opt, const char *name,\n \n void show_log(struct rev_info *opt)\n {\n-\tstruct strbuf msgbuf;\n+\tstruct strbuf msgbuf = STRBUF_INIT;\n \tstruct log_info *log = opt->loginfo;\n \tstruct commit *commit = log->commit, *parent = log->parent;\n \tint abbrev = opt->diffopt.abbrev;\n@@ -381,7 +381,6 @@ void show_log(struct rev_info *opt)\n \t/*\n \t * And then the pretty-printed message itself\n \t */\n-\tstrbuf_init(&msgbuf, 0);\n \tif (need_8bit_cte >= 0)\n \t\tneed_8bit_cte = has_non_ascii(opt->add_signoff);\n \tpretty_print_commit(opt->commit_format, commit, &msgbuf,\ndiff --git a/merge-recursive.c b/merge-recursive.c\nindex 4358ecf..96f7334 100644\n--- a/merge-recursive.c\n+++ b/merge-recursive.c\n@@ -497,8 +497,7 @@ static void update_file_flags(struct merge_options *o,\n \t\tif (type != OBJ_BLOB)\n \t\t\tdie(\"blob expected for %s '%s'\", sha1_to_hex(sha), path);\n \t\tif (S_ISREG(mode)) {\n-\t\t\tstruct strbuf strbuf;\n-\t\t\tstrbuf_init(&strbuf, 0);\n+\t\t\tstruct strbuf strbuf = STRBUF_INIT;\n \t\t\tif (convert_to_working_tree(path, buf, size, &strbuf)) {\n \t\t\t\tfree(buf);\n \t\t\t\tsize = strbuf.len;\ndiff --git a/mktag.c b/mktag.c\nindex 0b34341..ba3d495 100644\n--- a/mktag.c\n+++ b/mktag.c\n@@ -153,7 +153,7 @@ static int verify_tag(char *buffer, unsigned long size)\n \n int main(int argc, char **argv)\n {\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \tunsigned char result_sha1[20];\n \n \tif (argc != 1)\n@@ -161,7 +161,6 @@ int main(int argc, char **argv)\n \n \tsetup_git_directory();\n \n-\tstrbuf_init(&buf, 0);\n \tif (strbuf_read(&buf, 0, 4096) < 0) {\n \t\tdie(\"could not read from stdin\");\n \t}\ndiff --git a/mktree.c b/mktree.c\nindex e0da110..514fd9b 100644\n--- a/mktree.c\n+++ b/mktree.c\n@@ -65,8 +65,8 @@ static const char mktree_usage[] = \"git-mktree [-z]\";\n \n int main(int ac, char **av)\n {\n-\tstruct strbuf sb;\n-\tstruct strbuf p_uq;\n+\tstruct strbuf sb = STRBUF_INIT;\n+\tstruct strbuf p_uq = STRBUF_INIT;\n \tunsigned char sha1[20];\n \tint line_termination = '\\n';\n \n@@ -82,8 +82,6 @@ int main(int ac, char **av)\n \t\tav++;\n \t}\n \n-\tstrbuf_init(&sb, 0);\n-\tstrbuf_init(&p_uq, 0);\n \twhile (strbuf_getline(&sb, stdin, line_termination) != EOF) {\n \t\tchar *ptr, *ntr;\n \t\tunsigned mode;\ndiff --git a/pretty.c b/pretty.c\nindex fd6924a..9e125ef 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -234,7 +234,7 @@ static char *get_header(const struct commit *commit, const char *key)\n \n static char *replace_encoding_header(char *buf, const char *encoding)\n {\n-\tstruct strbuf tmp;\n+\tstruct strbuf tmp = STRBUF_INIT;\n \tsize_t start, len;\n \tchar *cp = buf;\n \n@@ -250,7 +250,6 @@ static char *replace_encoding_header(char *buf, const char *encoding)\n \t\treturn buf; /* should not happen but be defensive */\n \tlen = cp + 1 - (buf + start);\n \n-\tstrbuf_init(&tmp, 0);\n \tstrbuf_attach(&tmp, buf, strlen(buf), strlen(buf) + 1);\n \tif (is_encoding_utf8(encoding)) {\n \t\t/* we have re-coded to UTF-8; drop the header */\ndiff --git a/read-cache.c b/read-cache.c\nindex 901064b..7dfdda6 100644\n--- a/read-cache.c\n+++ b/read-cache.c\n@@ -1446,9 +1446,8 @@ int write_index(const struct index_state *istate, int newfd)\n \n \t/* Write extension data here */\n \tif (istate->cache_tree) {\n-\t\tstruct strbuf sb;\n+\t\tstruct strbuf sb = STRBUF_INIT;\n \n-\t\tstrbuf_init(&sb, 0);\n \t\tcache_tree_write(&sb, istate->cache_tree);\n \t\terr = write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) < 0\n \t\t\t|| ce_write(&c, newfd, sb.buf, sb.len) < 0;\ndiff --git a/remote.c b/remote.c\nindex a2d7ab1..d5efadd 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -245,7 +245,7 @@ static void read_branches_file(struct remote *remote)\n {\n \tconst char *slash = strchr(remote->name, '/');\n \tchar *frag;\n-\tstruct strbuf branch;\n+\tstruct strbuf branch = STRBUF_INIT;\n \tint n = slash ? slash - remote->name : 1000;\n \tFILE *f = fopen(git_path(\"branches/%.*s\", n, remote->name), \"r\");\n \tchar *s, *p;\n@@ -283,7 +283,6 @@ static void read_branches_file(struct remote *remote)\n \t * #branch specified.  The \"master\" (or specified) branch is\n \t * fetched and stored in the local branch of the same name.\n \t */\n-\tstrbuf_init(&branch, 0);\n \tfrag = strchr(p, '#');\n \tif (frag) {\n \t\t*(frag++) = '\\0';\ndiff --git a/rerere.c b/rerere.c\nindex 121f911..5bb5316 100644\n--- a/rerere.c\n+++ b/rerere.c\n@@ -79,7 +79,7 @@ static int handle_file(const char *path,\n \tenum {\n \t\tRR_CONTEXT = 0, RR_SIDE_1, RR_SIDE_2, RR_ORIGINAL,\n \t} hunk = RR_CONTEXT;\n-\tstruct strbuf one, two;\n+\tstruct strbuf one = STRBUF_INIT, two = STRBUF_INIT;\n \tFILE *f = fopen(path, \"r\");\n \tFILE *out = NULL;\n \n@@ -97,8 +97,6 @@ static int handle_file(const char *path,\n \tif (sha1)\n \t\tgit_SHA1_Init(&ctx);\n \n-\tstrbuf_init(&one, 0);\n-\tstrbuf_init(&two,  0);\n \twhile (fgets(buf, sizeof(buf), f)) {\n \t\tif (!prefixcmp(buf, \"<<<<<<< \")) {\n \t\t\tif (hunk != RR_CONTEXT)\ndiff --git a/sha1_file.c b/sha1_file.c\nindex 00049b5..4b9ce6d 100644\n--- a/sha1_file.c\n+++ b/sha1_file.c\n@@ -2385,8 +2385,7 @@ static int index_mem(unsigned char *sha1, void *buf, size_t size,\n \t * Convert blobs to git internal format\n \t */\n \tif ((type == OBJ_BLOB) && path) {\n-\t\tstruct strbuf nbuf;\n-\t\tstrbuf_init(&nbuf, 0);\n+\t\tstruct strbuf nbuf = STRBUF_INIT;\n \t\tif (convert_to_git(path, buf, size, &nbuf,\n \t\t                   write_object ? safe_crlf : 0)) {\n \t\t\tbuf = strbuf_detach(&nbuf, &size);\n@@ -2410,8 +2409,7 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object,\n \tsize_t size = xsize_t(st->st_size);\n \n \tif (!S_ISREG(st->st_mode)) {\n-\t\tstruct strbuf sbuf;\n-\t\tstrbuf_init(&sbuf, 0);\n+\t\tstruct strbuf sbuf = STRBUF_INIT;\n \t\tif (strbuf_read(&sbuf, fd, 4096) >= 0)\n \t\t\tret = index_mem(sha1, sbuf.buf, sbuf.len, write_object,\n \t\t\t\t\ttype, path);\ndiff --git a/walker.c b/walker.c\nindex 0e68ee6..6b4cf70 100644\n--- a/walker.c\n+++ b/walker.c\n@@ -215,9 +215,8 @@ static int mark_complete(const char *path, const unsigned char *sha1, int flag,\n int walker_targets_stdin(char ***target, const char ***write_ref)\n {\n \tint targets = 0, targets_alloc = 0;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \t*target = NULL; *write_ref = NULL;\n-\tstrbuf_init(&buf, 0);\n \twhile (1) {\n \t\tchar *rf_one = NULL;\n \t\tchar *tg_one;\ndiff --git a/ws.c b/ws.c\nindex 7a7ff13..b1efcd9 100644\n--- a/ws.c\n+++ b/ws.c\n@@ -99,8 +99,7 @@ unsigned whitespace_rule(const char *pathname)\n /* The returned string should be freed by the caller. */\n char *whitespace_error_string(unsigned ws)\n {\n-\tstruct strbuf err;\n-\tstrbuf_init(&err, 0);\n+\tstruct strbuf err = STRBUF_INIT;\n \tif (ws & WS_TRAILING_SPACE)\n \t\tstrbuf_addstr(&err, \"trailing whitespace\");\n \tif (ws & WS_SPACE_BEFORE_TAB) {\ndiff --git a/wt-status.c b/wt-status.c\nindex ad8aac5..d617967 100644\n--- a/wt-status.c\n+++ b/wt-status.c\n@@ -103,10 +103,8 @@ static void wt_status_print_filepair(struct wt_status *s,\n {\n \tconst char *c = color(t);\n \tconst char *one, *two;\n-\tstruct strbuf onebuf, twobuf;\n+\tstruct strbuf onebuf = STRBUF_INIT, twobuf = STRBUF_INIT;\n \n-\tstrbuf_init(&onebuf, 0);\n-\tstrbuf_init(&twobuf, 0);\n \tone = quote_path(p->one->path, -1, &onebuf, s->prefix);\n \ttwo = quote_path(p->two->path, -1, &twobuf, s->prefix);\n \n@@ -190,9 +188,8 @@ static void wt_status_print_changed_cb(struct diff_queue_struct *q,\n static void wt_status_print_initial(struct wt_status *s)\n {\n \tint i;\n-\tstruct strbuf buf;\n+\tstruct strbuf buf = STRBUF_INIT;\n \n-\tstrbuf_init(&buf, 0);\n \tif (active_nr) {\n \t\ts->commitable = 1;\n \t\twt_status_print_cached_header(s);\n@@ -267,9 +264,7 @@ static void wt_status_print_untracked(struct wt_status *s)\n \tstruct dir_struct dir = { 0, };\n \tint i;\n \tint shown_header = 0;\n-\tstruct strbuf buf;\n-\n-\tstrbuf_init(&buf, 0);\n+\tstruct strbuf buf = STRBUF_INIT;\n \n \tif (!s->untracked) {\n \t\tdir.show_other_directories = 1;\ndiff --git a/xdiff-interface.c b/xdiff-interface.c\nindex 662e604..99b143a 100644\n--- a/xdiff-interface.c\n+++ b/xdiff-interface.c\n@@ -140,13 +140,12 @@ int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2,\n \t\t  xdemitconf_t const *xecfg, xdemitcb_t *xecb)\n {\n \tint ret;\n-\tstruct xdiff_emit_state state = { 0, };\n+\tstruct xdiff_emit_state state = { 0, 0, STRBUF_INIT };\n \n \tstate.consume = fn;\n \tstate.consume_callback_data = consume_callback_data;\n \txecb->outf = xdiff_outf;\n \txecb->priv = &state;\n-\tstrbuf_init(&state.remainder, 0);\n \tret = xdi_diff(mf1, mf2, xpp, xecfg, xecb);\n \tstrbuf_release(&state.remainder);\n \treturn ret;\n-- \n1.6.0.2.468.gd5b83\n"},{"id":"92706","messageId":"81b0412b0810091428o6a4ea772q6a10cd295e4fcd7d@mail.gmail.com","threadId":"15841","inReplyTo":"UUi8gSMV6CruoYIkVNOQZ4FNzsbqZcSNu6jdYH8GqIo@cipher.nrlssc.navy.mil","subject":"Re: [RFC PATCH 2/2] Replace calls to strbuf_init(&foo, 0) with static STRBUF_INIT initializer","fromName":"Alex Riesen","fromEmail":"raa.lkml@gmail.com","sentAt":"2008-10-09T21:28:08Z","receivedAt":"2008-10-09T21:28:08Z","isPatch":true,"sender":{"key":"raa.lkml@gmail.com","avatar":"https://avatars.githubusercontent.com/u/324101?v=4"},"body":"2008/10/9 Brandon Casey <casey@nrlssc.navy.mil>:\n> Many call sites use strbuf_init(&foo, 0) to initialize local strbuf variable\n> \"foo\" which has not been accessed since its declaration. These can be\n> replaced with a static initialization using the STRBUF_INIT macro which is\n> just as readable, saves a function call, and takes up fewer lines.\n>\n> Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>\n> ---\n>\n>\n> This does the same thing for strbuf_init() that the last one did for memset().\n>\n\nBut it does this using a predefined interface (using the STRBUG_INIT macro),\nso next time strbuf changed, the code using it may be left as is.\n\nI didn't like the memset->zero-init, but I do like this one.\nIt is a bit unclear, by the way, why strbuf_init wasn't inlined.\n"}]}