Changeset View
Changeset View
Standalone View
Standalone View
b/scd/apdu.c
Context not available. | |||||
long err; | long err; | ||||
int slot; | int slot; | ||||
char *list = NULL; | char *list = NULL; | ||||
pcsc_dword_t nreader, listlen; | char *rdrname = NULL; | ||||
pcsc_dword_t nreader; | |||||
char *p; | char *p; | ||||
slot = new_reader_slot (); | slot = new_reader_slot (); | ||||
Context not available. | |||||
return -1; | return -1; | ||||
} | } | ||||
listlen = nreader; | |||||
p = list; | p = list; | ||||
while (nreader) | while (nreader) | ||||
{ | { | ||||
if (!*p && !p[1]) | if (!*p && !p[1]) | ||||
break; | break; | ||||
if (*p) | log_info ("detected reader `%s'\n", p); | ||||
log_info ("detected reader `%s'\n", p); | |||||
if (nreader < (strlen (p)+1)) | if (nreader < (strlen (p)+1)) | ||||
{ | { | ||||
log_error ("invalid response from pcsc_list_readers\n"); | log_error ("invalid response from pcsc_list_readers\n"); | ||||
break; | break; | ||||
} | } | ||||
if (!rdrname && portstr && !strncmp (p, portstr, strlen (portstr))) | |||||
rdrname = p; | |||||
nreader -= strlen (p)+1; | nreader -= strlen (p)+1; | ||||
p += strlen (p) + 1; | p += strlen (p) + 1; | ||||
} | } | ||||
reader_table[slot].rdrname = xtrymalloc (strlen (portstr? portstr : list)+1); | if (!rdrname) | ||||
rdrname = list; | |||||
reader_table[slot].rdrname = xtrystrdup (rdrname); | |||||
if (!reader_table[slot].rdrname) | if (!reader_table[slot].rdrname) | ||||
{ | { | ||||
log_error ("error allocating memory for reader name\n"); | log_error ("error allocating memory for reader name\n"); | ||||
Context not available. | |||||
unlock_slot (slot); | unlock_slot (slot); | ||||
return -1; | return -1; | ||||
} | } | ||||
strcpy (reader_table[slot].rdrname, portstr? portstr : list); | |||||
xfree (list); | xfree (list); | ||||
list = NULL; | list = NULL; | ||||
Context not available. |