[Pcsclite-cvs-commit] CVS PCSC/src
CVS User rousseau
ludovic.rousseau@free.fr
Wed, 01 Sep 2004 02:11:34 -0600
Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv12572
Modified Files:
winscard_clnt.c
Log Message:
add support of SCardGetAttrib() with a NULL pbAttr parameter to only get
the needed lenth in pcbAttrLen
--- /cvsroot/pcsclite/PCSC/src/winscard_clnt.c 2004/08/24 14:02:36 1.43
+++ /cvsroot/pcsclite/PCSC/src/winscard_clnt.c 2004/09/01 08:11:33 1.44
@@ -9,7 +9,7 @@
* Damien Sauveron <damien.sauveron@labri.fr>
* Ludovic Rousseau <ludovic.rousseau@free.fr>
*
- * $Id: winscard_clnt.c,v 1.43 2004/08/24 14:02:36 rousseau Exp $
+ * $Id: winscard_clnt.c,v 1.44 2004/09/01 08:11:33 rousseau Exp $
*/
#include "config.h"
@@ -1564,6 +1564,14 @@
LONG SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
LPDWORD pcbAttrLen)
{
+ if (NULL == pcbAttrLen)
+ return SCARD_E_INVALID_PARAMETER;
+
+ /* if only get the length */
+ if (NULL == pbAttr)
+ /* this variable may not be set by the caller. use a reasonable size */
+ *pcbAttrLen = MAX_BUFFER_SIZE;
+
return SCardGetSetAttrib(hCard, SCARD_GET_ATTRIB, dwAttrId, pbAttr,
pcbAttrLen);
}
@@ -1571,6 +1579,9 @@
LONG SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
DWORD cbAttrLen)
{
+ if (NULL == pbAttr || 0 == cbAttrLen)
+ return SCARD_E_INVALID_PARAMETER;
+
return SCardGetSetAttrib(hCard, SCARD_SET_ATTRIB, dwAttrId, (LPBYTE)pbAttr,
&cbAttrLen);
}
@@ -1584,9 +1595,6 @@
int i;
DWORD dwContextIndex, dwChannelIndex;
- if (NULL == pbAttr || 0 == *pcbAttrLen)
- return SCARD_E_INVALID_PARAMETER;
-
if (SCardCheckDaemonAvailability() != SCARD_S_SUCCESS)
return SCARD_E_NO_SERVICE;
@@ -1625,7 +1633,8 @@
scGetSetStruct.dwAttrId = dwAttrId;
scGetSetStruct.cbAttrLen = *pcbAttrLen;
scGetSetStruct.rv = SCARD_E_NO_SERVICE;
- memcpy(scGetSetStruct.pbAttr, pbAttr, *pcbAttrLen);
+ if (SCARD_SET_ATTRIB == command)
+ memcpy(scGetSetStruct.pbAttr, pbAttr, *pcbAttrLen);
rv = WrapSHMWrite(command,
psContextMap[dwContextIndex].dwClientID, sizeof(scGetSetStruct),
@@ -1663,7 +1672,9 @@
else
*pcbAttrLen = scGetSetStruct.cbAttrLen;
- memcpy(pbAttr, scGetSetStruct.pbAttr, scGetSetStruct.cbAttrLen);
+ if (pbAttr)
+ memcpy(pbAttr, scGetSetStruct.pbAttr, scGetSetStruct.cbAttrLen);
+
memset(scGetSetStruct.pbAttr, 0x00, sizeof(scGetSetStruct.pbAttr));
}