mirror of https://gitee.com/openkylin/qemu.git
libcacard: move atr setting from macro to function
Only because qemu's checkpatch complains about it. Signed-off-by: Alon Levy <alevy@redhat.com> Reviewed-by: Marc-André Lureau <mlureau@redhat.com>
This commit is contained in:
parent
7a68589624
commit
0b6a16c1a4
|
@ -32,6 +32,7 @@ libcacard-y += libcacard/vcard.o libcacard/vreader.o
|
|||
libcacard-y += libcacard/vcard_emul_nss.o
|
||||
libcacard-y += libcacard/vcard_emul_type.o
|
||||
libcacard-y += libcacard/card_7816.o
|
||||
libcacard-y += libcacard/vcardt.o
|
||||
|
||||
######################################################################
|
||||
# Target independent part of system emulation. The long term path is to
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
#include "vreader.h"
|
||||
#include "vevent.h"
|
||||
|
||||
#include "libcacard/vcardt_internal.h"
|
||||
|
||||
|
||||
typedef enum {
|
||||
VCardEmulUnknown = -1,
|
||||
VCardEmulFalse = 0,
|
||||
|
@ -519,18 +522,23 @@ vcard_emul_reader_get_slot(VReader *vreader)
|
|||
}
|
||||
|
||||
/*
|
||||
* Card ATR's map to physical cards. VCARD_ATR_PREFIX will set appropriate
|
||||
* Card ATR's map to physical cards. vcard_alloc_atr will set appropriate
|
||||
* historical bytes for any software emulated card. The remaining bytes can be
|
||||
* used to indicate the actual emulator
|
||||
*/
|
||||
static const unsigned char nss_atr[] = { VCARD_ATR_PREFIX(3), 'N', 'S', 'S' };
|
||||
static unsigned char *nss_atr;
|
||||
static int nss_atr_len;
|
||||
|
||||
void
|
||||
vcard_emul_get_atr(VCard *card, unsigned char *atr, int *atr_len)
|
||||
{
|
||||
int len = MIN(sizeof(nss_atr), *atr_len);
|
||||
int len;
|
||||
assert(atr != NULL);
|
||||
|
||||
if (nss_atr == NULL) {
|
||||
nss_atr = vcard_alloc_atr("NSS", &nss_atr_len);
|
||||
}
|
||||
len = MIN(nss_atr_len, *atr_len);
|
||||
memcpy(atr, nss_atr, len);
|
||||
*atr_len = len;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
|
||||
#include "libcacard/vcardt.h"
|
||||
|
||||
#include "libcacard/vcardt_internal.h"
|
||||
|
||||
/* create an ATR with appropriate historical bytes */
|
||||
#define ATR_TS_DIRECT_CONVENTION 0x3b
|
||||
#define ATR_TA_PRESENT 0x10
|
||||
#define ATR_TB_PRESENT 0x20
|
||||
#define ATR_TC_PRESENT 0x40
|
||||
#define ATR_TD_PRESENT 0x80
|
||||
|
||||
unsigned char *vcard_alloc_atr(const char *postfix, int *atr_len)
|
||||
{
|
||||
int postfix_len;
|
||||
const char prefix[] = "VCARD_";
|
||||
const char default_postfix[] = "DEFAULT";
|
||||
const int prefix_len = sizeof(prefix) - 1;
|
||||
int total_len;
|
||||
unsigned char *atr;
|
||||
|
||||
if (postfix == NULL) {
|
||||
postfix = default_postfix;
|
||||
}
|
||||
postfix_len = strlen(postfix);
|
||||
total_len = 3 + prefix_len + postfix_len;
|
||||
atr = g_malloc(total_len);
|
||||
atr[0] = ATR_TS_DIRECT_CONVENTION;
|
||||
atr[1] = ATR_TD_PRESENT + prefix_len + postfix_len;
|
||||
atr[2] = 0x00;
|
||||
memcpy(&atr[3], prefix, prefix_len);
|
||||
memcpy(&atr[3 + prefix_len], postfix, postfix_len);
|
||||
if (atr_len) {
|
||||
*atr_len = total_len;
|
||||
}
|
||||
return atr;
|
||||
}
|
|
@ -25,19 +25,6 @@ typedef struct VCardEmulStruct VCardEmul;
|
|||
|
||||
#define MAX_CHANNEL 4
|
||||
|
||||
/* create an ATR with appropriate historical bytes */
|
||||
#define TS_DIRECT_CONVENTION 0x3b
|
||||
#define TA_PRESENT 0x10
|
||||
#define TB_PRESENT 0x20
|
||||
#define TC_PRESENT 0x40
|
||||
#define TD_PRESENT 0x80
|
||||
|
||||
#define VCARD_ATR_PREFIX(size) \
|
||||
TS_DIRECT_CONVENTION, \
|
||||
TD_PRESENT + (6 + size), \
|
||||
0x00, \
|
||||
'V', 'C', 'A', 'R', 'D', '_'
|
||||
|
||||
typedef enum {
|
||||
VCARD_DONE,
|
||||
VCARD_NEXT,
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef VCARDT_INTERNAL_H
|
||||
#define VCARDT_INTERNAL_H
|
||||
|
||||
unsigned char *vcard_alloc_atr(const char *postfix, int *atr_len);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue