[Bug 36153] Borderlands 2 mouse focus no longer works properly

wine-bugs at winehq.org wine-bugs at winehq.org
Sat May 3 07:57:01 CDT 2014


http://bugs.winehq.org/show_bug.cgi?id=36153

--- Comment #10 from Piotr Caban <piotr.caban at gmail.com> ---
The game is using qsort in broken way. It uses comparator that always returns 1
and expects that data is reordered in some specific way. In order to fix it
wine's qsort implementation needs to call comparator in the same way as native
does.

The way comparator is called is not preserved between different versions of
msvcrXX.dll (I've checked only msvcrt.dll and msvcr100.dll).

It looks like msvcrt uses very similar sorting algorithm as glibc. It uses
qsort (pivot element is selected from 3 elements) and falls back to insertion
sort on small portions of table (with less than 9 elements).

Adding something like this in qsort_s fixes Borderlands 2 for me:
/* Borderlands 2 depends on comparator calling order for small tables */
if (nmemb <= 8) {
    MSVCRT_size_t e, i;
    char *max, *p, tmp;

    for(e=nmemb; e>1; e--) {
        max = base;
        for(i=1; i<e; i++) {
            p = (char*)base + i*size;
            if(compar(context, p, max) > 0)
                max = p;
        }

        if(p != max) {
            for(i=size; i; i--) {
                tmp = *max;
                *max++ = *p;
                *p++ = tmp;
            }
        }
    }

    return;
}

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list