sdl_add(name, msg, av, au - 1);
sdl_add(name, msg, av, au);
parse_configline(char *line){	char *cp, prev, *name, *msg;	static char **av = NULL;	static size_t ac = 0;	size_t au = 0;	int mdone = 0;	name = line;	for (cp = name; *cp && *cp != ';'; cp++)		;	if (*cp != ';')		goto parse_error;	*cp++ = '\0';	msg = cp;	if (*cp++ != '"')		goto parse_error;	prev = '\0';	for (; !mdone; cp++) {		switch (*cp) {		case '\\':			if (!prev)				prev = *cp;			else				prev = '\0';			break;		case '"':			if (prev != '\\') {				cp++;				if (*cp == ';') {					mdone = 1;					*cp = '\0';				} else					goto parse_error;			}			break;		case '\0':			goto parse_error;		default:			prev = '\0';			break;		}	}	do {		if (ac == au) {			char **tmp;			tmp = realloc(av, (ac + 2048) * sizeof(char *));			if (tmp == NULL) {				free(av);				av = NULL;				ac = 0;				return (-1);			}			av = tmp;			ac += 2048;		}	} while ((av[au++] = strsep(&cp, ";")) != NULL);	/* toss empty last entry to allow for trailing ; */	if (av[au - 1][0] == '\0');		au--;	if (au < 1)		goto parse_error;	else		sdl_add(name, msg, av, au - 1);	return (0);parse_error:	if (debug > 0)		printf("bogus config line - need 'tag;message;a/m;a/m;a/m...'\n");	return (-1);}