OSDN Git Service

rerere: fix benign off-by-one non-bug and clarify code
authorJunio C Hamano <gitster@pobox.com>
Fri, 24 Jul 2015 23:01:48 +0000 (16:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Jul 2015 23:02:02 +0000 (16:02 -0700)
commitd3c2749def9563798cea3486f3793ad36d9c1030
tree900977965020d117b6f45364062f2da3e45c9f1c
parenta96847cc1691840bd95cc56549d7c00b35f6d5a0
rerere: fix benign off-by-one non-bug and clarify code

rerere_io_putconflict() wants to use a limited fixed-sized buf[] on
stack repeatedly to formulate a longer string, but its implementation
is doubly confusing:

 * When it knows that the whole thing fits in buf[], it wants to
   fill early part of buf[] with conflict marker characters,
   followed by a LF and a NUL.  It miscounts the size of the buffer
   by 1 and does not use the last byte of buf[].

 * When it needs to show only the early part of a long conflict
   marker string (because the whole thing does not fit in buf[]), it
   adjusts the number of bytes shown in the current round in a
   strange-looking way.  It makes sure that this round does not emit
   all bytes and leaves at least one byte to the next round, so that
   "it all fits" case will pick up the rest and show the terminating
   LF.  While this is correct, one needs to stop and think for a
   while to realize why it is correct without an explanation.

Fix the benign off-by-one, and add comments to explain the
strange-looking size adjustment.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
rerere.c