[PATCH 3/7] ntdll: fix endianness of three fields in DVD_LAYER_DESCRIPTOR (resend)

Charles Davis cdavis at mymail.mines.edu
Fri Feb 10 18:21:31 CST 2012


On Feb 10, 2012, at 4:24 PM, Dan Kegel wrote:

> On Fri, Feb 10, 2012 at 2:00 PM, Charles Davis <cdavis at mymail.mines.edu> wrote:
>>> -            p->StartingDataSector = l->start_sector;
>>> -            p->EndDataSector = l->end_sector;
>>> -            p->EndLayerZeroSector = l->end_sector_l0;
>>> +            p->StartingDataSector = GET_BE_DWORD(l->start_sector);
>>> +            p->EndDataSector = GET_BE_DWORD(l->end_sector);
>>> +            p->EndLayerZeroSector = GET_BE_DWORD(l->end_sector_l0);
>> I don't know about this. To make your original patch work right on Mac, one of the things I had to do was get rid of the OSReadBigInt32() calls that swapped the endianness of the sector fields from big to host.
> 
> This was needed for Dragon Age Origins able to detect its disc, see
> http://bugs.winehq.org/show_bug.cgi?id=29667
> That's our source of truth, I guess.
Huh. I guess then that's a problem with your test program, which fails because the descriptor returned from SCSI pass-through (at least, on Mac) has those fields in big-endian order, but the descriptor returned from the IOCTL has them in host order, and the test program compares them directly without swapping one or the other.
>  Do you have a copy of Dragon Age
> handy to test with?
No, not for Windows, anyway. I have plenty of other DVD games, though.

Chip




More information about the wine-devel mailing list