Changeset View
Changeset View
Standalone View
Standalone View
apdu.c
Context not available. | |||||
} | } | ||||
atrlen = 33; | atrlen = sizeof(reader_table[slot].atr); | ||||
nreader = sizeof reader - 1; | nreader = sizeof reader - 1; | ||||
err = pcsc_status (reader_table[slot].pcsc.card, | err = pcsc_status (reader_table[slot].pcsc.card, | ||||
reader, &nreader, | reader, &nreader, | ||||
Context not available. | |||||
reader_table[slot].atrlen = 0; | reader_table[slot].atrlen = 0; | ||||
return pcsc_error_to_sw (err); | return pcsc_error_to_sw (err); | ||||
} | } | ||||
if (atrlen >= DIM (reader_table[0].atr)) | if (atrlen > DIM (reader_table[0].atr)) | ||||
log_bug ("ATR returned by pcsc_status is too large\n"); | log_bug ("ATR returned by pcsc_status is too large\n"); | ||||
reader_table[slot].atrlen = atrlen; | reader_table[slot].atrlen = atrlen; | ||||
reader_table[slot].is_t0 = !!(card_protocol & PCSC_PROTOCOL_T0); | reader_table[slot].is_t0 = !!(card_protocol & PCSC_PROTOCOL_T0); | ||||
Context not available. | |||||
char reader[250]; | char reader[250]; | ||||
unsigned long readerlen; | unsigned long readerlen; | ||||
atrlen = 32; | atrlen = sizeof(reader_table[slot].atr); | ||||
readerlen = sizeof reader -1 ; | readerlen = sizeof reader -1 ; | ||||
err = pcsc_status (reader_table[slot].pcsc.card, | err = pcsc_status (reader_table[slot].pcsc.card, | ||||
reader, &readerlen, | reader, &readerlen, | ||||
Context not available. | |||||
pcsc_error_string (err), err, readerlen); | pcsc_error_string (err), err, readerlen); | ||||
else | else | ||||
{ | { | ||||
if (atrlen >= DIM (reader_table[0].atr)) | if (atrlen > DIM (reader_table[0].atr)) | ||||
log_bug ("ATR returned by pcsc_status is too large\n"); | log_bug ("ATR returned by pcsc_status is too large\n"); | ||||
reader_table[slot].atrlen = atrlen; | reader_table[slot].atrlen = atrlen; | ||||
/* If we got to here we know that a card is present | /* If we got to here we know that a card is present | ||||
Context not available. | |||||
rapdu_msg_release (msg); | rapdu_msg_release (msg); | ||||
return sw; | return sw; | ||||
} | } | ||||
if (msg->datalen >= DIM (slotp->atr)) | if (msg->datalen > DIM (slotp->atr)) | ||||
{ | { | ||||
log_error ("ATR returned by the RAPDU layer is too large\n"); | log_error ("ATR returned by the RAPDU layer is too large\n"); | ||||
rapdu_msg_release (msg); | rapdu_msg_release (msg); | ||||
Context not available. | |||||
rapdu_strerror (msg->cmd)); | rapdu_strerror (msg->cmd)); | ||||
goto failure; | goto failure; | ||||
} | } | ||||
if (msg->datalen >= DIM (slotp->atr)) | if (msg->datalen > DIM (slotp->atr)) | ||||
{ | { | ||||
log_error ("ATR returned by the RAPDU layer is too large\n"); | log_error ("ATR returned by the RAPDU layer is too large\n"); | ||||
goto failure; | goto failure; | ||||
Context not available. |