p->size = TOKEN_LENGTH;
p->size = TOKEN_LENGTH_INCREMENT;
const char *config(const char *config_filename){	const char *s;	unsigned long n;	struct connection *cn;	struct configuration *p;	p = malloc(sizeof *p);	if (p == 0)		return e_memory;	p->size = TOKEN_LENGTH;	p->tokbuf = malloc(p->size);	if (p->tokbuf == 0) {		free(p);		return e_memory;	}	if (config_filename) {		p->config_file = fopen(config_filename, "r");		if (p->config_file == 0) {			fprintf(stderr, "Cannot open configuration file %s\n", config_filename);			free(p->tokbuf);			free(p);			return e_noinput;		}	} else		p->config_file = stdin;	tuning.buf_size = DEFAULT_BUF_SIZE;	tuning.input_buf_size = INPUT_BUF_SIZE;	tuning.num_connections = DEFAULT_NUM_CONNECTIONS;	tuning.timeout = DEFAULT_TIMEOUT;	tuning.accept_multi = 1;	fcm = DEFAULT_UMASK;	stayroot = 0;	log_columns = 0;	log_column = 0;	log_gmt = 0;	p->line = 1;	s = config_main(p);	if (config_filename)		fclose(p->config_file);	if (s) {		if (config_filename)			fprintf(stderr, "In configuration file: %s\n", config_filename);		fprintf(stderr, "Error at token '%s' around line %d\n", p->tokbuf, p->line);		free(p->tokbuf);		free(p);		return s;	}	free(p->tokbuf);	free(p);	if (log_column == 0) {		log_column = default_log_column;		log_columns = sizeof default_log_column / sizeof default_log_column[0];	}	s = fill_servernames();	if (s)		return s;	if (init_pollfds(tuning.num_connections + num_servers) == -1)		return e_memory;	for (n = 0; n < tuning.num_connections; n++) {		if ((cn = malloc(sizeof *cn)) == 0)			return e_memory;		if ((cn->r = malloc(sizeof *cn->r)) == 0)			return e_memory;		if ((cn->input = new_pool(tuning.input_buf_size)) == 0)			return e_memory;		if ((cn->output = new_pool(tuning.buf_size)) == 0)			return e_memory;		cn->r->cn = cn;		cn->next = connections;		cn->state = HC_FREE;		connections = cn;	}	if (init_log_buffer(tuning.input_buf_size + 1000) == -1)		return e_memory;	return 0;}