On 09/28/2010 06:46 AM, viny wrote:
Yes I started with this referenced discussion.
Here is a first patch. With it, Winscard can identify your smartcard reader.
g_pcscliteHandle = wine_dlopen("libpcsclite.so", RTLD_LAZY | RTLD_GLOBAL, error, sizeof(error));
You need to use configure to get the so name of the library.
+LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders) +{
- LONG retval;
- LPSTR *pmszReaders;
- LPSTR szList = NULL;
- DWORD ListLength = 0;
- TRACE(" 0x%08X %p %p %p\n", (unsigned int) hContext, mszGroups, mszReaders, pcchReaders);
If you want to print a pointer, print it as a pointer, don't convert it into int. It's not correct for 64-bit Wine.
+LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders) +{
- LONG retval;
- LPSTR *pmszReaders;
- LPSTR szList = NULL;
- DWORD ListLength = 0;
- TRACE(" 0x%08X %p %p %p\n", (unsigned int) hContext, mszGroups, mszReaders, pcchReaders);
- if (!pcchReaders)
retval = SCARD_E_INVALID_PARAMETER;
- else if (!pSCardListReaders)
retval = SCARD_F_INTERNAL_ERROR;
- else if (mszReaders && *pcchReaders == SCARD_AUTOALLOCATE)
- {
/* get list from pcsc-lite */
*pmszReaders = (LPSTR*) mszReaders;
You corrupting memory here. You haven't assigned any memory to pmszReaders. Did you mean to write "pmszReaders = (LPSTR) mszReaders;" ? In fact I don't see you using the assigned value at all.
Also you have some trailing spaces in your patch.
Vitaliy.