From: Junio C Hamano Date: Fri, 22 Apr 2016 22:45:09 +0000 (-0700) Subject: Merge branch 'jk/do-not-printf-NULL' X-Git-Tag: v2.9.0-rc0~104 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/fd9b37cfde7f0e109592da41a784291c7eb8cb94?ds=inline;hp=-c Merge branch 'jk/do-not-printf-NULL' "git config" had a codepath that tried to pass a NULL to printf("%s"), which nobody seems to have noticed. * jk/do-not-printf-NULL: git_config_set_multivar_in_file: handle "unset" errors git_config_set_multivar_in_file: all non-zero returns are errors config: lower-case first word of error strings --- fd9b37cfde7f0e109592da41a784291c7eb8cb94 diff --combined config.c index 4c926990a3,68a2f939ef..10b5c957ae --- a/config.c +++ b/config.c @@@ -108,7 -108,7 +108,7 @@@ static int handle_path_include(const ch expanded = expand_user_path(path); if (!expanded) - return error("Could not expand include path '%s'", path); + return error("could not expand include path '%s'", path); path = expanded; /* @@@ -162,7 -162,7 +162,7 @@@ void git_config_push_parameter(const ch { struct strbuf env = STRBUF_INIT; const char *old = getenv(CONFIG_DATA_ENVIRONMENT); - if (old) { + if (old && *old) { strbuf_addstr(&env, old); strbuf_addch(&env, ' '); } @@@ -950,7 -950,7 +950,7 @@@ static int git_default_branch_config(co else if (!strcmp(value, "always")) autorebase = AUTOREBASE_ALWAYS; else - return error("Malformed value for %s", var); + return error("malformed value for %s", var); return 0; } @@@ -976,7 -976,7 +976,7 @@@ static int git_default_push_config(cons else if (!strcmp(value, "current")) push_default = PUSH_DEFAULT_CURRENT; else { - error("Malformed value for %s: %s", var, value); + error("malformed value for %s: %s", var, value); return error("Must be one of nothing, matching, simple, " "upstream or current."); } @@@ -1188,12 -1188,11 +1188,12 @@@ int git_config_system(void return !git_env_bool("GIT_CONFIG_NOSYSTEM", 0); } -int git_config_early(config_fn_t fn, void *data, const char *repo_config) +static int do_git_config_sequence(config_fn_t fn, void *data) { int ret = 0, found = 0; char *xdg_config = xdg_config_home("config"); char *user_config = expand_user_path("~/.gitconfig"); + char *repo_config = git_pathdup("config"); if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK, 0)) { ret += git_config_from_file(fn, git_etc_gitconfig(), @@@ -1229,7 -1228,6 +1229,7 @@@ free(xdg_config); free(user_config); + free(repo_config); return ret == 0 ? found : ret; } @@@ -1237,6 -1235,8 +1237,6 @@@ int git_config_with_options(config_fn_ struct git_config_source *config_source, int respect_includes) { - char *repo_config = NULL; - int ret; struct config_include_data inc = CONFIG_INCLUDE_INIT; if (respect_includes) { @@@ -1257,7 -1257,11 +1257,7 @@@ else if (config_source && config_source->blob) return git_config_from_blob_ref(fn, config_source->blob, data); - repo_config = git_pathdup("config"); - ret = git_config_early(fn, data, repo_config); - if (repo_config) - free(repo_config); - return ret; + return do_git_config_sequence(fn, data); } static void git_config_raw(config_fn_t fn, void *data) @@@ -2217,9 -2221,13 +2217,13 @@@ void git_config_set_multivar_in_file(co const char *key, const char *value, const char *value_regex, int multi_replace) { - if (git_config_set_multivar_in_file_gently(config_filename, key, value, - value_regex, multi_replace) < 0) - die(_("Could not set '%s' to '%s'"), key, value); + if (!git_config_set_multivar_in_file_gently(config_filename, key, value, + value_regex, multi_replace)) + return; + if (value) + die(_("could not set '%s' to '%s'"), key, value); + else + die(_("could not unset '%s'"), key); } int git_config_set_multivar_gently(const char *key, const char *value, @@@ -2400,7 -2408,7 +2404,7 @@@ int git_config_rename_section(const cha #undef config_error_nonbool int config_error_nonbool(const char *var) { - return error("Missing value for '%s'", var); + return error("missing value for '%s'", var); } int parse_config_key(const char *var,