• Tom Lane's avatar
    Be more robust when strerror() doesn't give a useful result. · 8e68816c
    Tom Lane authored
    glibc, at least, is capable of returning "???" instead of anything useful
    if it doesn't like the setting of LC_CTYPE.  If this happens, or in the
    previously-known case of strerror() returning an empty string, try to
    print the C macro name for the error code ("EACCES" etc).  Only if we
    don't have the error code in our compiled-in list of popular error codes
    (which covers most though not quite all of what's called out in the POSIX
    spec) will we fall back to printing a numeric error code.  This should
    simplify debugging.
    
    Note that this functionality is currently only provided for %m in backend
    ereport/elog messages.  That may be sufficient, since we don't fool with the
    locale environment in frontend clients, but it's foreseeable that we might
    want similar code in libpq for instance.
    
    There was some talk of back-patching this, but let's see how the buildfarm
    likes it first.  It seems likely that at least some of the POSIX-defined
    error code symbols don't exist on all platforms.  I don't want to clutter
    the entire list with #ifdefs, but we may need more than are here now.
    
    MauMau, edited by me
    8e68816c
elog.c 93.3 KB