[Pcsclite-cvs-commit] PCSC/src winscard.c,1.37,1.38
rousseau@haydn.debian.org
rousseau@haydn.debian.org
Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv32343
Modified Files:
winscard.c
Log Message:
SCardControl() (new API) can now be used with a IFDHandler v2.0 or v3.0.
The previous code was broken and only worked an IFDHandler v3.0 (crashed
with a v2.0).
Index: winscard.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/winscard.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- winscard.c 29 Jun 2004 08:31:40 -0000 1.37
+++ winscard.c 6 Jul 2004 06:52:04 -0000 1.38
@@ -1109,8 +1109,19 @@
if (cbSendLength > MAX_BUFFER_SIZE)
return SCARD_E_INSUFFICIENT_BUFFER;
- return IFDControl(rContext, dwControlCode, pbSendBuffer, cbSendLength,
- pbRecvBuffer, cbRecvLength, lpBytesReturned);
+ if (IFD_HVERSION_2_0 == rContext->dwVersion)
+ {
+ /* we must wrap a API 3.0 client in an API 2.0 driver */
+ *lpBytesReturned = cbRecvLength;
+ return IFDControl_v2(rContext, (PUCHAR)pbSendBuffer,
+ cbSendLength, pbRecvBuffer, lpBytesReturned);
+ }
+ else
+ if (IFD_HVERSION_3_0 == rContext->dwVersion)
+ return IFDControl(rContext, dwControlCode, pbSendBuffer,
+ cbSendLength, pbRecvBuffer, cbRecvLength, lpBytesReturned);
+ else
+ return SCARD_E_UNSUPPORTED_FEATURE;
}
LONG SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId,