• J
    tempfile: avoid "ferror | fclose" trick · 0838cbc2
    Jeff King 提交于
    The current code wants to record an error condition from
    either ferror() or fclose(), but makes sure that we always
    call both functions. So it can't use logical-OR "||", which
    would short-circuit when ferror() is true. Instead, it uses
    bitwise-OR "|" to evaluate both functions and set one or
    more bits in the "err" flag if they reported a failure.
    
    Unlike logical-OR, though, bitwise-OR does not introduce a
    sequence point, and the order of evaluation for its operands
    is unspecified. So a compiler would be free to generate code
    which calls fclose() first, and then ferror() on the
    now-freed filehandle.
    
    There's no indication that this has happened in practice,
    but let's write it out in a way that follows the standard.
    Noticed-by: NAndreas Schwab <schwab@linux-m68k.org>
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    0838cbc2
tempfile.c 8.1 KB