fix wLangId in ccid-driver.c
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 13 Jan 2011 07:38:31 +0000 (16:38 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 25 Jun 2012 01:04:22 +0000 (10:04 +0900)
commitd9d98c510b936d48755f8c01165d7efa32502d24
tree402aff04fb98e28d0da1f4c52d031b8933ad5c0c
parentb8d7b33d69e54feb1fcd2e87b8ffc260b0ba81e4
fix wLangId in ccid-driver.c

This is not a part of pin pad support series of mine.

As I found the bug while I am preparing the patches, I report this.

As CCID protocol is little endian, wLangId of US English = 0x0409
is represented as two bytes of 0x09 then 0x04.

It is really confusing that the code like following is floating
around:
pin_verify -> wLangId = HOST_TO_CCID_16(0x0904);

But, it is 0x0409 (not 0x0904).  It is defined in the documentation:

    http://www.usb.org/developers/docs/USB_LANGIDs.pdf

and origin of this table is Microsoft.  We can see it at:

    http://msdn.microsoft.com/en-us/library/bb165625%28VS.80%29.aspx

Yes, it would be better not to hard-code 0x0409.  It would be better
to try current locale of the user, or to use the first entry of string
descriptor.  I don't have time to implement such a thing...
scd/ccid-driver.c