view libcommon/be_init.c @ 9:c9ef9e91dd8e

new libcommon, initial version
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Mar 2021 06:55:38 +0000
parents
children e2ef4b8e4136
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];

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;
		}
	}
	return(0);
}