config.c: avoid xmmap error messages
commit1570856b510e3722a3620063e7ba209106b75857
authorJeff King <peff@peff.net>
Thu, 28 May 2015 07:56:15 +0000 (28 03:56 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 May 2015 18:33:18 +0000 (28 11:33 -0700)
tree80086c5f7772e866f92bffc6da99482c8b099a46
parent3a1b3126ed5a0b51d5b1fdba827c92bf2acf5fc6
config.c: avoid xmmap error messages

The config-writing code uses xmmap to map the existing
config file, which will die if the map fails. This has two
downsides:

  1. The error message is not very helpful, as it lacks any
     context about the file we are mapping:

       $ mkdir foo
       $ git config --file=foo some.key value
       fatal: Out of memory? mmap failed: No such device

  2. We normally do not die in this code path; instead, we'd
     rather report the error and return an appropriate exit
     status (which is part of the public interface
     documented in git-config.1).

This patch introduces a "gentle" form of xmmap which lets us
produce our own error message. We do not want to use mmap
directly, because we would like to use the other
compatibility elements of xmmap (e.g., handling 0-length
maps portably).

The end result is:

    $ git.compile config --file=foo some.key value
    error: unable to mmap 'foo': No such device
    $ echo $?
    3

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c
git-compat-util.h
sha1_file.c