diff --git a/scard.c b/scard.c index ac2398b..7548531 100644 --- a/scard.c +++ b/scard.c @@ -666,33 +666,35 @@ TS_SCardEstablishContext(STREAM in, STREAM out) MYPCSC_SCARDCONTEXT myHContext; SERVER_SCARDCONTEXT hContext; - /* code segment */ - - logger(SmartCard, Debug, "TS_SCardEstablishContext()"); - rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &myHContext); - hContext = 0; - if (myHContext) - { - _scard_handle_list_add(myHContext); - hContext = _scard_handle_list_get_server_handle(myHContext); - } + /* code segment */ + logger(SmartCard, Debug, "TS_SCardEstablishContext()"); - if (rv) + rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &myHContext); + if (rv != SCARD_S_SUCCESS) { logger(SmartCard, Error, "TS_SCardEstablishContext(), failed: %s (0x%08x)", pcsc_stringify_error(rv), (unsigned int) rv); + goto bail_out; } - else + + if (myHContext == NULL) { - logger(SmartCard, Debug, - "TS_SCardEstablishContext(), success. context: 0x%08x, [0x%lx]", hContext, - myHContext); + logger(SmartCard, Error, "TS_SCardEstablishedContext(), myHContext == NULL"); + goto bail_out; } + /* add context to list of handle and get server handle */ + _scard_handle_list_add(myHContext); + hContext = _scard_handle_list_get_server_handle(myHContext); + logger(SmartCard, Debug, + "TS_SCardEstablishContext(), success. context: 0x%08x, [0x%lx]", hContext, + myHContext); + + bail_out: out_uint32_le(out, 0x00000004); out_uint32_le(out, hContext); /* must not be 0 (Seems to be pointer), don't know what is this (I use hContext as value) */ /* i hope it's not a pointer because i just downcasted it - jlj */