rcsnum_free(lkp->rl_num);
rcs_parse_locks(RCSFILE *rfp){	int type;	struct rcs_lock *lkp;	for (;;) {		type = rcs_gettok(rfp);		if (type == RCS_TOK_SCOLON)			break;		if (type != RCS_TOK_ID) {			cvs_log(LP_ERR, "unexpected token `%s' in lock list",			    RCS_TOKSTR(rfp));			return (-1);		}		lkp = (struct rcs_lock *)malloc(sizeof(*lkp));		if (lkp == NULL) {			cvs_log(LP_ERRNO, "failed to allocate RCS lock");			return (-1);		}		lkp->rl_num = rcsnum_alloc();		if (lkp->rl_num == NULL) {			free(lkp);			return (-1);		}		type = rcs_gettok(rfp);		if (type != RCS_TOK_COLON) {			cvs_log(LP_ERR, "unexpected token `%s' in symbol list",			    RCS_TOKSTR(rfp));			free(lkp);			return (-1);		}		type = rcs_gettok(rfp);		if (type != RCS_TOK_NUM) {			cvs_log(LP_ERR, "unexpected token `%s' in symbol list",			    RCS_TOKSTR(rfp));			free(lkp);			return (-1);		}		if (rcsnum_aton(RCS_TOKSTR(rfp), NULL, lkp->rl_num) < 0) {			cvs_log(LP_ERR, "failed to parse RCS NUM `%s'",			    RCS_TOKSTR(rfp));			free(lkp);			return (-1);		}		TAILQ_INSERT_HEAD(&(rfp->rf_locks), lkp, rl_list);	}	/* check if we have a `strict' */	type = rcs_gettok(rfp);	if (type != RCS_TOK_STRICT) {		rcs_pushtok(rfp, RCS_TOKSTR(rfp), type);	} else {		rfp->rf_flags |= RCS_SLOCK;		type = rcs_gettok(rfp);		if (type != RCS_TOK_SCOLON) {			cvs_log(LP_ERR,			    "missing semi-colon after `strict' keyword");			return (-1);		}	}	return (0);}