diff --git a/scard.c b/scard.c index d30660f..ab9dc53 100644 --- a/scard.c +++ b/scard.c @@ -4,6 +4,7 @@ Copyright (C) Alexi Volkov 2006 Copyright 2010-2013 Pierre Ossman for Cendio AB Copyright 2011-2017 Henrik Andersson for Cendio AB + Copyright 2017 Karl Mikaelsson for Cendio AB This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -925,39 +926,45 @@ TS_SCardConnect(STREAM in, STREAM out, RD_BOOL wide) hCard = _scard_handle_list_get_server_handle(myHCard); } - if (rv != SCARD_S_SUCCESS) + switch (rv) { - logger(SmartCard, Error, "TS_SCardConnect(), failed: %s (0x%08x)", - pcsc_stringify_error(rv), (unsigned int) rv); - } - else - { - char *szVendor = getVendor(szReader); - logger(SmartCard, Debug, "TS_SCardConnect(), success, hcard: 0x%08x [0x%lx]", - (unsigned) hCard, myHCard); - - if (szVendor && (strlen(szVendor) > 0)) - { - logger(SmartCard, Debug, - "TS_SCardConnect(), set attribute ATTR_VENDOR_NAME"); - pthread_mutex_lock(&hcardAccess); - PSCHCardRec hcard = xmalloc(sizeof(TSCHCardRec)); - if (hcard) + case SCARD_S_SUCCESS: { - hcard->hCard = hCard; - hcard->vendor = szVendor; - hcard->next = NULL; - hcard->prev = NULL; + char *szVendor = getVendor(szReader); + logger(SmartCard, Debug, + "TS_SCardConnect(), success, hcard: 0x%08x [0x%lx]", + (unsigned) hCard, myHCard); - if (hcardFirst) + if (szVendor && (strlen(szVendor) > 0)) { - hcardFirst->prev = hcard; - hcard->next = hcardFirst; + logger(SmartCard, Debug, + "TS_SCardConnect(), set attribute ATTR_VENDOR_NAME"); + pthread_mutex_lock(&hcardAccess); + PSCHCardRec hcard = xmalloc(sizeof(TSCHCardRec)); + if (hcard) + { + hcard->hCard = hCard; + hcard->vendor = szVendor; + hcard->next = NULL; + hcard->prev = NULL; + + if (hcardFirst) + { + hcardFirst->prev = hcard; + hcard->next = hcardFirst; + } + hcardFirst = hcard; + } + pthread_mutex_unlock(&hcardAccess); } - hcardFirst = hcard; } - pthread_mutex_unlock(&hcardAccess); - } + break; + + default: + logger(SmartCard, Debug, + "TS_SCardConnect(), SCardConnect failed: %s (0x%08x)", + pcsc_stringify_error(rv), rv); + break; } out_uint32_le(out, 0x00000000); @@ -1237,15 +1244,9 @@ TS_SCardGetStatusChange(STREAM in, STREAM out, RD_BOOL wide) myRsArray, (MYPCSC_DWORD) dwCount); copyReaderState_MyPCSCToServer(myRsArray, rsArray, (MYPCSC_DWORD) dwCount); - if (rv != SCARD_S_SUCCESS) - { - logger(SmartCard, Error, "TS_SCardGetStatusChange(), failed: %s (0x%08x)", - pcsc_stringify_error(rv), (unsigned int) rv); - } - else - { - logger(SmartCard, Debug, "TS_SCardGetStatusChange(), success"); - } + logger(SmartCard, Debug, + "TS_SCardGetStatusChange(), SCardGetStatusChange returned \"%s\" (0x%08x)", + pcsc_stringify_error(rv), rv); out_uint32_le(out, dwCount); out_uint32_le(out, 0x00084dd8);