Skip to content
  • Jeff King's avatar
    config_buf_ungetc: warn when pushing back a random character · 1d0655c1
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Our config code simulates a stdio stream around a buffer,
    but our fake ungetc() does not behave quite like the real
    one. In particular, we only rewind the position by one
    character, but do _not_ actually put the character from the
    caller into position.
    
    It turns out that this does not matter, because we only ever
    push back the character we just read. In other words, such
    an assignment would be a noop. But because the function is
    called ungetc, and because it takes a character parameter,
    it is a mistake waiting to happen.
    
    Actually assigning the character into the buffer would be
    ideal, but our pointer is actually a "const" copy of the
    buffer. We do not know who the real owner of the buffer is
    in this code, and would not want to munge their contents.
    
    Instead, we can simply add an assertion that matches what
    the current caller does, and will let us know if new callers
    are added that violate the contract.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    1d0655c1