• Tom Lane's avatar
    Make snprintf.c follow the C99 standard for snprintf's result value. · 805889d7
    Tom Lane authored
    C99 says that the result should be the number of bytes that would have
    been emitted given a large enough buffer, not the number we actually
    were able to put in the buffer.  It's time to make our substitute
    implementation comply with that.  Not doing so results in inefficiency
    in buffer-enlargement cases, and also poses a portability hazard for
    third-party code that might expect C99-compliant snprintf behavior
    within Postgres.
    
    In passing, remove useless tests for str == NULL; neither C99 nor
    predecessor standards ever allowed that except when count == 0,
    so I see no reason to expend cycles on making that a non-crash case
    for this implementation.  Also, don't waste a byte in pg_vfprintf's
    local I/O buffer; this might have performance benefits by allowing
    aligned writes during flushbuffer calls.
    
    Discussion: https://postgr.es/m/17245.1534289329@sss.pgh.pa.us
    805889d7
snprintf.c 25.9 KB