Bruno Haible <[EMAIL PROTECTED]> writes: >> The option sorting in argp-help was based on the stability >> of sort algorithm, therefore the test failed on systems with >> quicksort qsort implementations. It went unnoticed on glibc, >> because its qsort uses adaptive algorithm, defaulting to >> insertion sort if the number of partitions is smaller than a >> predefined value, which happens to be true for the argp tests. >> Use argument addresses to ensure they never compare as equal. > > However, I think this is not portable. [...]
I don't think it's portable either. It's really a shame that the GNU libc manual suggests this technique without any warning about portability: Warning: If two objects compare as equal, their order after sorting is unpredictable. That is to say, the sorting is not stable. This can make a difference when the comparison considers only part of the elements. Two elements with the same sort key may differ in other respects. If you want the effect of a stable sort, you can get this result by writing the comparison function so that, lacking other reason distinguish between two elements, it compares them by their addresses. Note that doing this may make the sorting algorithm less efficient, so do it only if necessary. -- Ben Pfaff http://benpfaff.org