static wListDictionary* g_CardContexts = NULL;
static wListDictionary* g_MemoryBlocks = NULL;
-WINSCARDAPI LONG WINAPI PCSC_SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem);
+WINSCARDAPI LONG WINAPI PCSC_SCardFreeMemory_Internal(SCARDCONTEXT hContext, LPCVOID pvMem);
LONG PCSC_MapErrorCodeToWinSCard(LONG errorCode)
{
*pcchReaders = ConvertToUnicode(CP_UTF8, 0, mszReadersA, *pcchReaders, (WCHAR**) mszReaders, 0);
PCSC_AddMemoryBlock(hContext, mszReaders);
- PCSC_SCardFreeMemory(hContext, mszReadersA);
+ PCSC_SCardFreeMemory_Internal(hContext, mszReadersA);
}
}
return 0;
}
-WINSCARDAPI LONG WINAPI PCSC_SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)
+WINSCARDAPI LONG WINAPI PCSC_SCardFreeMemory_Internal(SCARDCONTEXT hContext, LPCVOID pvMem)
{
LONG status = SCARD_S_SUCCESS;
- PCSC_LockCardContext(hContext);
-
if (PCSC_RemoveMemoryBlock(hContext, (void*) pvMem))
{
free((void*) pvMem);
}
}
+ return status;
+}
+
+WINSCARDAPI LONG WINAPI PCSC_SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)
+{
+ LONG status = SCARD_S_SUCCESS;
+
+ PCSC_LockCardContext(hContext);
+
+ status = PCSC_SCardFreeMemory_Internal(hContext, pvMem);
+
PCSC_UnlockCardContext(hContext);
return status;
if (mszReaderNames)
{
hContext = PCSC_GetCardContextFromHandle(hCard);
- PCSC_SCardFreeMemory(hContext, mszReaderNames);
+ PCSC_SCardFreeMemory_Internal(hContext, mszReaderNames);
}
}
*pcchReaderLen = ConvertToUnicode(CP_UTF8, 0, mszReaderNamesA, *pcchReaderLen, (WCHAR**) mszReaderNames, 0);
PCSC_AddMemoryBlock(hContext, mszReaderNames);
- PCSC_SCardFreeMemory(hContext, mszReaderNamesA);
+ PCSC_SCardFreeMemory_Internal(hContext, mszReaderNamesA);
}
*pdwState &= 0xFFFF;
length = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) pbAttrW,
*pcbAttrLen, (char**) &pbAttrA, 0, NULL, NULL);
- PCSC_SCardFreeMemory(hContext, pbAttrW);
+ PCSC_SCardFreeMemory_Internal(hContext, pbAttrW);
if (attrAutoAlloc)
{
length = ConvertToUnicode(CP_UTF8, 0, (char*) pbAttr, *pcbAttrLen, &pbAttrW, 0);
- PCSC_SCardFreeMemory(hContext, pbAttrA);
+ PCSC_SCardFreeMemory_Internal(hContext, pbAttrA);
if (attrAutoAlloc)
{