Jeff King <peff@xxxxxxxx> writes: > a. actually check ferror() after getting EOF and report the read > error. That catches EISDIR, along with any other unexpected > errors. That is the most sensible, I would think (assuming that we really get EISDIR instead of silent EOF). > b. use an fopen wrapper that checks fstat(fileno(fh)) after the > open, and turns fopen(some_dir) into an error. That's already an option with FREAD_READS_DIRECTORIES, I think. > 2. It doesn't address the root problem for git_config_from_file(), > which is that it is quiet when fopen fails, even if the reason is > something interesting besides ENOENT. The caller can't check errno > because it doesn't know if fopen() failed, or if the config > callback returned an error. Perhaps like this one as a starting point, with FREAD_READS_DIRECTORIES? config.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config.c b/config.c index 0dac0f4cb2..af8c01c8a3 100644 --- a/config.c +++ b/config.c @@ -1305,6 +1305,9 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data) FILE *f; f = fopen(filename, "r"); + if (!f && errno != ENOENT) + die_errno("fopen('%s') failed", filename); + if (f) { flockfile(f); ret = do_config_from_file(fn, CONFIG_ORIGIN_FILE, filename, filename, f, data);