Commit 0b6a16c1 authored by Alon Levy's avatar Alon Levy
Browse files

libcacard: move atr setting from macro to function



Only because qemu's checkpatch complains about it.

Signed-off-by: default avatarAlon Levy <alevy@redhat.com>
Reviewed-by: default avatarMarc-André Lureau <mlureau@redhat.com>
parent 7a685896
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+11 −3
Original line number Diff line number Diff line
@@ -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;
}

libcacard/vcardt.c

0 → 100644
+40 −0
Original line number Diff line number Diff line
#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;
}
+0 −13
Original line number Diff line number Diff line
@@ -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,
+6 −0
Original line number Diff line number Diff line
#ifndef VCARDT_INTERNAL_H
#define VCARDT_INTERNAL_H

unsigned char *vcard_alloc_atr(const char *postfix, int *atr_len);

#endif