On Fri, May 17, 2024 at 3:06 PM Chet Ramey <chet.ramey@case.edu> wrote:
On 5/17/24 12:57 PM, Grisha Levit wrote:
The current cmp implementation for size and blocks subtracts the two
values and returns the difference as an int. This subtraction can
overflow, and the returned int can end up having the wrong sign.
This also makes the qsort comparison function non-transitive. (Some
interesting discussion on that at [1]).
Thanks for the report. If overflow is a concern, then a guaranteed
transitive comparison function is the right thing. Your solution is clever,
but a little obscure; I think I'll make it look more like the other
comparison functions.
FWIW, I was copying the approach from coreutils[1] and gnulib[2]: