Jeff King <[email protected]> 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);