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_nss.o
|
||||||
libcacard-y += libcacard/vcard_emul_type.o
|
libcacard-y += libcacard/vcard_emul_type.o
|
||||||
libcacard-y += libcacard/card_7816.o
|
libcacard-y += libcacard/card_7816.o
|
||||||
|
libcacard-y += libcacard/vcardt.o
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Target independent part of system emulation. The long term path is to
|
# Target independent part of system emulation. The long term path is to
|
||||||
|
|
|
@ -33,6 +33,9 @@
|
||||||
#include "vreader.h"
|
#include "vreader.h"
|
||||||
#include "vevent.h"
|
#include "vevent.h"
|
||||||
|
|
||||||
|
#include "libcacard/vcardt_internal.h"
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VCardEmulUnknown = -1,
|
VCardEmulUnknown = -1,
|
||||||
VCardEmulFalse = 0,
|
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
|
* historical bytes for any software emulated card. The remaining bytes can be
|
||||||
* used to indicate the actual emulator
|
* 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
|
void
|
||||||
vcard_emul_get_atr(VCard *card, unsigned char *atr, int *atr_len)
|
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);
|
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);
|
memcpy(atr, nss_atr, len);
|
||||||
*atr_len = 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
|
#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 {
|
typedef enum {
|
||||||
VCARD_DONE,
|
VCARD_DONE,
|
||||||
VCARD_NEXT,
|
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