diff options
-rw-r--r-- | builtin/config.c | 4 | ||||
-rw-r--r-- | config.c | 10 | ||||
-rw-r--r-- | git-compat-util.h | 3 | ||||
-rw-r--r-- | wrapper.c | 8 |
4 files changed, 18 insertions, 7 deletions
diff --git a/builtin/config.c b/builtin/config.c index 8cd08da991..b0394efac9 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -396,8 +396,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) */ die("$HOME not set"); - if (access(user_config, R_OK) && - xdg_config && !access(xdg_config, R_OK)) + if (access_or_warn(user_config, R_OK) && + xdg_config && !access_or_warn(xdg_config, R_OK)) given_config_file = xdg_config; else given_config_file = user_config; @@ -60,7 +60,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc path = buf.buf; } - if (!access(path, R_OK)) { + if (!access_or_warn(path, R_OK)) { if (++inc->depth > MAX_INCLUDE_DEPTH) die(include_depth_advice, MAX_INCLUDE_DEPTH, path, cf && cf->name ? cf->name : "the command line"); @@ -939,23 +939,23 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config) home_config_paths(&user_config, &xdg_config, "config"); - if (git_config_system() && !access(git_etc_gitconfig(), R_OK)) { + if (git_config_system() && !access_or_warn(git_etc_gitconfig(), R_OK)) { ret += git_config_from_file(fn, git_etc_gitconfig(), data); found += 1; } - if (xdg_config && !access(xdg_config, R_OK)) { + if (xdg_config && !access_or_warn(xdg_config, R_OK)) { ret += git_config_from_file(fn, xdg_config, data); found += 1; } - if (user_config && !access(user_config, R_OK)) { + if (user_config && !access_or_warn(user_config, R_OK)) { ret += git_config_from_file(fn, user_config, data); found += 1; } - if (repo_config && !access(repo_config, R_OK)) { + if (repo_config && !access_or_warn(repo_config, R_OK)) { ret += git_config_from_file(fn, repo_config, data); found += 1; } diff --git a/git-compat-util.h b/git-compat-util.h index 35b095e8ae..5a520e2b73 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -604,6 +604,9 @@ int rmdir_or_warn(const char *path); */ int remove_or_warn(unsigned int mode, const char *path); +/* Call access(2), but warn for any error besides ENOENT. */ +int access_or_warn(const char *path, int mode); + /* Get the passwd entry for the UID of the current process. */ struct passwd *xgetpwuid_self(void); @@ -403,6 +403,14 @@ int remove_or_warn(unsigned int mode, const char *file) return S_ISGITLINK(mode) ? rmdir_or_warn(file) : unlink_or_warn(file); } +int access_or_warn(const char *path, int mode) +{ + int ret = access(path, mode); + if (ret && errno != ENOENT) + warning(_("unable to access '%s': %s"), path, strerror(errno)); + return ret; +} + struct passwd *xgetpwuid_self(void) { struct passwd *pw; |