mifare_classic_get_tags() now return NULL when on failure and a one-entry array set to NULL when no tag is available (tags[0] == NULL).

This commit is contained in:
Romuald Conty 2010-01-08 21:00:57 +00:00
parent 756dc74969
commit 3e00c7899a

View file

@ -185,6 +185,10 @@ mifare_classic_get_tags (nfc_device_t *device)
// Poll for a ISO14443A (MIFARE) tag // Poll for a ISO14443A (MIFARE) tag
nfc_target_info_t target_info; nfc_target_info_t target_info;
tags = malloc(sizeof (void *));
if(!tags) return NULL;
tags[0] = NULL;
while (nfc_initiator_select_tag(device,NM_ISO14443A_106,NULL,0,&target_info)) { while (nfc_initiator_select_tag(device,NM_ISO14443A_106,NULL,0,&target_info)) {
// Ensure the target is a MIFARE classic tag. // Ensure the target is a MIFARE classic tag.
@ -202,17 +206,11 @@ mifare_classic_get_tags (nfc_device_t *device)
tag_count++; tag_count++;
/* (Re)Allocate memory for the found MIFARE classic array */ /* (Re)Allocate memory for the found MIFARE classic array */
if (!tags) { MifareClassicTag *p = realloc (tags, (tag_count) * sizeof (MifareClassicTag) + sizeof (void *));
if (!(tags = malloc ((tag_count) * sizeof (MifareClassicTag) + sizeof (void *)))) { if (p)
return NULL; tags = p;
} else
} else { return tags; // FAIL! Return what has been found so far.
MifareClassicTag *p = realloc (tags, (tag_count) * sizeof (MifareClassicTag) + sizeof (void *));
if (p)
tags = p;
else
return p; // FAIL! Return what has been found so far.
}
/* Allocate memory for the found MIFARE classic tag */ /* Allocate memory for the found MIFARE classic tag */
if (!(tags[tag_count-1] = malloc (sizeof (struct mifare_classic_tag)))) { if (!(tags[tag_count-1] = malloc (sizeof (struct mifare_classic_tag)))) {