view libcommon/atr.c @ 58:871281cb0555

doc/Low-level-commands: apdu-checksw documented
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 23 Mar 2021 00:21:02 +0000
parents c9ef9e91dd8e
children
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

extern FILE *cpipeF, *rpipeF;
extern char be_atr_string[];

cmd_atr()
{
	char inbuf[128], *cp;

	/* do we have it already? */
	if (be_atr_string[0]) {
		printf("ATR: %s\n", be_atr_string);
		return(0);
	}
	/* nope - request it from the BE */
	fputs("atr\n", cpipeF);
	fflush(cpipeF);
	/* collect BE response */
	if (!fgets(inbuf, sizeof inbuf, rpipeF)) {
		fprintf(stderr, "comm error: EOF reading from back end\n");
		return(-1);
	}
	cp = index(inbuf, '\n');
	if (!cp) {
		fprintf(stderr,
			"comm error: response from back end has no newline\n");
		return(-1);
	}
	*cp = '\0';
	if (!inbuf[0]) {
		fprintf(stderr,
		"comm error: response from back end is an empty line\n");
		return(-1);
	}
	puts(inbuf);
	return(0);
}