view libcommon/be_init.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 e2ef4b8e4136
children
line wrap: on
line source

/*
 * This module is responsible for collecting the initial info
 * strings emitted by the back end.
 */

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

extern FILE *rpipeF;

#define	MAX_INIT_STRING	254

char be_reader_name[MAX_INIT_STRING+1];
char be_atr_string[MAX_INIT_STRING+1];
char be_extra_info[MAX_INIT_STRING+1];

static void
copy_without_leading_space(input_str, dest)
	char *input_str, *dest;
{
	char *cp;

	for (cp = input_str; isspace(*cp); cp++)
		;
	strcpy(dest, cp);
}

collect_backend_init_strings()
{
	char inbuf[MAX_INIT_STRING+2], *cp;

	for (;;) {
		if (!fgets(inbuf, sizeof inbuf, rpipeF)) {
			fprintf(stderr,
		"start-up error: EOF reading init strings from back end\n");
			exit(1);
		}
		cp = index(inbuf, '\n');
		if (!cp) {
			fprintf(stderr,
		"start-up error: init string from back end has no newline\n");
			exit(1);
		}
		*cp = '\0';
		if (!inbuf[0])
			break;
		switch (inbuf[0]) {
		case 'A':
			copy_without_leading_space(inbuf + 1, be_atr_string);
			break;
		case 'R':
			copy_without_leading_space(inbuf + 1, be_reader_name);
			break;
		case 'X':
			copy_without_leading_space(inbuf + 1, be_extra_info);
			break;
		}
	}
	return(0);
}