Jeff King <p...@peff.net> writes:

> 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 <p...@peff.net>
> ---
> It feels a bit wrong to put this magic conversion here, and not in
> xmmap. But of course xmmap does not have the stat information.
> ...
> diff --git a/config.c b/config.c
> index e7dc155..29fa012 100644
> --- a/config.c
> +++ b/config.c
> @@ -2056,6 +2056,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;

I think this patch places the "magic" at the right place, but I
would have preferred to see something more like this:

        if (contents == MAP_FAILED) {
                if (errno == ENODEV && S_ISDIR(st.st_mode))
                        error("unable to mmap a directory '%s',
                                config_filename);
                else
                        error("unable to mmap '%s': %s",
                                config_filename, strerror(errno));
                ret = CONFIG_INVALID_FILE;

But that is a very minor preference.  I am OK with relying on our
knowledge that strerror(EISDIR) would give something that says "the
thing is a directory which is not appropriate for the operation", as
nobody after that strerror() refers to 'errno' in this codepath.

Thanks.  The patches were a pleasant read.



--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to