[Pcsclite-cvs-commit] r5129 - /trunk/PCSC/src/winscard_svc.c
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Fri Aug 13 13:18:53 UTC 2010
Author: rousseau
Date: Fri Aug 13 13:18:48 2010
New Revision: 5129
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5129
Log:
ContextThread(): goto exit if MSGCheckHandleAssociation() fails instead
of just returning no error.
Something wrong happened on the client side (like a fork) and the client
needs to call SCardEstablishContext() to create a new connection.
Modified:
trunk/PCSC/src/winscard_svc.c
Modified: trunk/PCSC/src/winscard_svc.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_svc.c?rev=5129&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_svc.c (original)
+++ trunk/PCSC/src/winscard_svc.c Fri Aug 13 13:18:48 2010
@@ -470,19 +470,17 @@
case SCARD_DISCONNECT:
{
struct disconnect_struct diStr;
- LONG rv;
READ_BODY(diStr)
- rv = MSGCheckHandleAssociation(diStr.hCard, threadContext);
- if (0 == rv)
- {
- diStr.rv = SCardDisconnect(diStr.hCard, diStr.dwDisposition);
-
- if (SCARD_S_SUCCESS == diStr.rv)
- diStr.rv =
- MSGRemoveHandle(diStr.hCard, threadContext);
- }
+ if (MSGCheckHandleAssociation(diStr.hCard, threadContext))
+ goto exit;
+
+ diStr.rv = SCardDisconnect(diStr.hCard, diStr.dwDisposition);
+
+ if (SCARD_S_SUCCESS == diStr.rv)
+ diStr.rv =
+ MSGRemoveHandle(diStr.hCard, threadContext);
WRITE_BODY(diStr)
}
@@ -491,13 +489,13 @@
case SCARD_BEGIN_TRANSACTION:
{
struct begin_struct beStr;
- LONG rv;
READ_BODY(beStr)
- rv = MSGCheckHandleAssociation(beStr.hCard, threadContext);
- if (0 == rv)
- beStr.rv = SCardBeginTransaction(beStr.hCard);
+ if (MSGCheckHandleAssociation(beStr.hCard, threadContext))
+ goto exit;
+
+ beStr.rv = SCardBeginTransaction(beStr.hCard);
WRITE_BODY(beStr)
}
@@ -506,14 +504,13 @@
case SCARD_END_TRANSACTION:
{
struct end_struct enStr;
- LONG rv;
READ_BODY(enStr)
- rv = MSGCheckHandleAssociation(enStr.hCard, threadContext);
- if (0 == rv)
- enStr.rv =
- SCardEndTransaction(enStr.hCard, enStr.dwDisposition);
+ if (MSGCheckHandleAssociation(enStr.hCard, threadContext))
+ goto exit;
+
+ enStr.rv = SCardEndTransaction(enStr.hCard, enStr.dwDisposition);
WRITE_BODY(enStr)
}
@@ -522,13 +519,13 @@
case SCARD_CANCEL_TRANSACTION:
{
struct cancel_transaction_struct caStr;
- LONG rv;
READ_BODY(caStr)
- rv = MSGCheckHandleAssociation(caStr.hCard, threadContext);
- if (0 == rv)
- caStr.rv = SCardCancelTransaction(caStr.hCard);
+ if (MSGCheckHandleAssociation(caStr.hCard, threadContext))
+ goto exit;
+
+ caStr.rv = SCardCancelTransaction(caStr.hCard);
WRITE_BODY(caStr)
}
@@ -560,41 +557,37 @@
case SCARD_STATUS:
{
struct status_struct stStr;
- LONG rv;
+ DWORD cchReaderLen;
+ DWORD dwState;
+ DWORD dwProtocol;
+ DWORD cbAtrLen;
READ_BODY(stStr)
- rv = MSGCheckHandleAssociation(stStr.hCard, threadContext);
- if (0 == rv)
+ if (MSGCheckHandleAssociation(stStr.hCard, threadContext))
+ goto exit;
+
+ cchReaderLen = stStr.pcchReaderLen;
+ dwState = stStr.dwState;
+ dwProtocol = stStr.dwProtocol;
+ cbAtrLen = stStr.pcbAtrLen;
+
+ /* avoids buffer overflow */
+ if ((cchReaderLen > sizeof(stStr.mszReaderNames))
+ || (cbAtrLen > sizeof(stStr.pbAtr)))
{
- DWORD cchReaderLen;
- DWORD dwState;
- DWORD dwProtocol;
- DWORD cbAtrLen;
-
- cchReaderLen = stStr.pcchReaderLen;
- dwState = stStr.dwState;
- dwProtocol = stStr.dwProtocol;
- cbAtrLen = stStr.pcbAtrLen;
-
- /* avoids buffer overflow */
- if ((cchReaderLen > sizeof(stStr.mszReaderNames))
- || (cbAtrLen > sizeof(stStr.pbAtr)))
- {
- stStr.rv = SCARD_E_INSUFFICIENT_BUFFER ;
- }
- else
- {
- stStr.rv = SCardStatus(stStr.hCard,
- stStr.mszReaderNames,
- &cchReaderLen, &dwState,
- &dwProtocol, stStr.pbAtr, &cbAtrLen);
-
- stStr.pcchReaderLen = cchReaderLen;
- stStr.dwState = dwState;
- stStr.dwProtocol = dwProtocol;
- stStr.pcbAtrLen = cbAtrLen;
- }
+ stStr.rv = SCARD_E_INSUFFICIENT_BUFFER ;
+ }
+ else
+ {
+ stStr.rv = SCardStatus(stStr.hCard,
+ stStr.mszReaderNames, &cchReaderLen, &dwState,
+ &dwProtocol, stStr.pbAtr, &cbAtrLen);
+
+ stStr.pcchReaderLen = cchReaderLen;
+ stStr.dwState = dwState;
+ stStr.dwProtocol = dwProtocol;
+ stStr.pcbAtrLen = cbAtrLen;
}
WRITE_BODY(stStr)
More information about the Pcsclite-cvs-commit
mailing list