cvs_ent_free(entp);
if (entp != NULL) cvs_ent_free(entp);
cvs_tag_file(CVSFILE *cfp, void *arg){	int ret;	char *repo, fpath[MAXPATHLEN], rcspath[MAXPATHLEN];	RCSFILE *rf;	struct cvs_ent *entp;	struct cvsroot *root;	ret = 0;	rf = NULL;	root = CVS_DIR_ROOT(cfp);	if ((root->cr_method != CVS_METHOD_LOCAL) && (cfp->cf_type == DT_DIR)) {		if (cvs_senddir(root, cfp) < 0)			return (-1);		return (0);	}	cvs_file_getpath(cfp, fpath, sizeof(fpath));	entp = cvs_ent_getent(fpath);	if (root->cr_method != CVS_METHOD_LOCAL) {		if ((entp != NULL) && (cvs_sendentry(root, entp) < 0)) {			cvs_ent_free(entp);			return (-1);		}		switch (cfp->cf_cvstat) {		case CVS_FST_UNKNOWN:			ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE,			    CVS_FILE_NAME(cfp));			break;		case CVS_FST_UPTODATE:			ret = cvs_sendreq(root, CVS_REQ_UNCHANGED,			    CVS_FILE_NAME(cfp));			break;		case CVS_FST_MODIFIED:			ret = cvs_sendreq(root, CVS_REQ_ISMODIFIED, 			    CVS_FILE_NAME(cfp));		default:			break;		}	} else {		if (cfp->cf_cvstat == CVS_FST_UNKNOWN) {			cvs_log(LP_WARN, "I know nothing about %s", fpath);			return (0);		}		if (cfp->cf_parent != NULL)			repo = cfp->cf_parent->cf_ddat->cd_repo;		else			repo = NULL;		snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s",		    root->cr_dir, repo, CVS_FILE_NAME(cfp), RCS_FILE_EXT);		rf = rcs_open(rcspath, RCS_READ);		if (rf == NULL) {			cvs_ent_free(entp);			return (-1);		}		rcs_close(rf);	}	if (entp != NULL)		cvs_ent_free(entp);	return (ret);}