config.c: rewrite ENODEV into EISDIR when mmap fails
authorJeff King <peff@peff.net>
Thu, 28 May 2015 08:03:01 +0000 (04:03 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 May 2015 18:34:06 +0000 (11:34 -0700)
If we try to mmap a directory, we'll get ENODEV. This
translates to "no such device" for the user, which is not
very helpful. Since we've just fstat()'d the file, we can
easily check whether the problem was a directory to give a
better message.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c
index d348d792aabb442981ea407be064815b3d8157c6..6551de30dbc5345f8ae6c359a32b93e1322161e7 100644 (file)
--- a/config.c
+++ b/config.c
@@ -2051,6 +2051,8 @@ int git_config_set_multivar_in_file(const char *config_filename,
                contents = xmmap_gently(NULL, contents_sz, PROT_READ,
                                        MAP_PRIVATE, in_fd, 0);
                if (contents == MAP_FAILED) {
+                       if (errno == ENODEV && S_ISDIR(st.st_mode))
+                               errno = EISDIR;
                        error("unable to mmap '%s': %s",
                              config_filename, strerror(errno));
                        ret = CONFIG_INVALID_FILE;