2012/6/19 Frank Marien <[email protected]>: > On 06/19/12 13:42, Ludovic Rousseau wrote: >> 2012/6/19 Frank Marien <[email protected]>: >>> Dear list, >> Hello, >> >>> I'm seeing a problem similar to Marti: With card reader names that are >>> already long, like the >>> "SCM Microsystems, Inc. SCR3340 - ExpressCard54 Smart Card Reader" I just >>> plugged into >>> my new laptop, the code in hotplug_libudev.c that optionally adds interface >>> and serial number to the name may cause that name to become too long as >>> compared to MAX_READERNAME, and thereby make RFAddReader reject it. >>> >>> The obvious brute-force solution I tried was to raise MAX_READERNAME from >>> 100 to 128 in /usr/include/PCSC/pcsclite.h. That worked, but that's only >>> safe if one can recompile every single dependency in one's system. I tried >>> it just to prove that that was all that was wrong here. >>> >>> I considered undefining the #ifdefs that guard the addition of interface and >>> serial, but I figured there must be a good reason for them to be on in the >>> first place (uniqueness, probably), so I didn't dare suggest that. >> You are right. >> The solution is to use a dynamically allocated string to store the >> reader name, instead of a limitation to MAX_READERNAME characters. > Wouldn't application-level developers have used MAX_READERNAME and > allocated static > buffers of that size (and.. counted on the name never being longer)?
A PC/SC application should not use MAX_READERNAME. It was a mistake to have this define in (user visible) pcsclite.h header file. >>> However, unless this newbie is gravely naive, I see no reason for the >>> interface name to be called "XXXX Interface" since it's clear that is is an >>> interface, it's probably not wise to try and parse that string anyway, and >>> if we do.. the interface strings should be known and not resemble a serial >>> number. >>> >>> Since I needed only 5 characters less, I decided to remove anything after a >>> space in the interface name (see patch below), thus gaining 9 characters and >>> falling within the standard setting in the headers.. Instead of adding >>> "[CCID Interface]", now only [CCID] is added to the name. >> Your reader returns "CCID Interface" for the iInterface field. Other >> readers return something else without "Interface" inside. >> So your modification is valid only for this particular reader (and some >> others). > Yes, feared it would be, after I could not find where the "Interface" > string came from > looking through the sources for CCID or pcscd.. So that will only work > if iInterface contains > multiple words.. It looked like something you added.. :-( no cigar, but > hey, I can work > and bug #313684 now exists. Good enough for me :-) Maybe the simplest solution is to edit the file ccid/readers/supported_readers.txt and change the line: 0x04E6:0x5119:SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader to something shorter like 0x04E6:0x5119:SCM SCR3340 - ExpressCard54 You can also directly edit /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist if you do not want to reinstall the CCID driver. No need to recompile pcsc-lite in this case. The reader names are now (since version 1.4.6 of the driver) generated from the iManufacturer and iProduct strings from the USB descriptor. And I forgot about the string size limitation to 100 characters. Bye -- Dr. Ludovic Rousseau _______________________________________________ Muscle mailing list [email protected] http://lists.drizzle.com/mailman/listinfo/muscle
