free(symp->rs_name);
rcs_parse_symbols(RCSFILE *rfp){	int type;	struct rcs_sym *symp;	for (;;) {		type = rcs_gettok(rfp);		if (type == RCS_TOK_SCOLON)			break;		if (type != RCS_TOK_STRING) {			cvs_log(LP_ERR, "unexpected token `%s' in symbol list",			    RCS_TOKSTR(rfp));			return (-1);		}		symp = (struct rcs_sym *)malloc(sizeof(*symp));		if (symp == NULL) {			cvs_log(LP_ERRNO, "failed to allocate RCS symbol");			return (-1);		}		symp->rs_name = strdup(RCS_TOKSTR(rfp));		if (symp->rs_name == NULL) {			cvs_log(LP_ERRNO, "failed to duplicate rcs token");			free(symp);			return (-1);		}		symp->rs_num = rcsnum_alloc();		if (symp->rs_num == NULL) {			cvs_log(LP_ERRNO, "failed to allocate rcsnum info");			free(symp);			return (-1);		}		type = rcs_gettok(rfp);		if (type != RCS_TOK_COLON) {			cvs_log(LP_ERR, "unexpected token `%s' in symbol list",			    RCS_TOKSTR(rfp));			rcsnum_free(symp->rs_num);			free(symp->rs_name);			free(symp);			return (-1);		}		type = rcs_gettok(rfp);		if (type != RCS_TOK_NUM) {			cvs_log(LP_ERR, "unexpected token `%s' in symbol list",			    RCS_TOKSTR(rfp));			rcsnum_free(symp->rs_num);			free(symp->rs_name);			free(symp);			return (-1);		}		if (rcsnum_aton(RCS_TOKSTR(rfp), NULL, symp->rs_num) < 0) {			cvs_log(LP_ERR, "failed to parse RCS NUM `%s'",			    RCS_TOKSTR(rfp));			rcsnum_free(symp->rs_num);			free(symp->rs_name);			free(symp);			return (-1);		}		TAILQ_INSERT_HEAD(&(rfp->rf_symbols), symp, rs_list);	}	return (0);}