rem: if (mflags & MATCHFLG_INCLUDE) flgs |= XFLG_DEF_INCLUDE; else if (mflags & MATCHFLG_NO_PREFIXES) flgs |= XFLG_DEF_EXCLUDE; add_filter_file(listp, p, flgs);
add: add_filter_file(listp, p, new_mflags, XFLG_FATAL_ERRORS);
context: void add_filter(struct filter_list_struct *listp, const char *pattern,		int xflags){	unsigned int pat_len, mflags;	const char *cp, *p;	if (!pattern)		return;	while (1) {		/* Remember that the returned string is NOT '\0' terminated! */		cp = get_filter_tok(pattern, xflags, &pat_len, &mflags);		if (!cp)			break;		if (pat_len >= MAXPATHLEN) {			rprintf(FERROR, "discarding over-long filter: %s\n",				cp);			continue;		}		pattern = cp + pat_len;		if (mflags & MATCHFLG_CLEAR_LIST) {			if (verbose > 2) {				rprintf(FINFO,					"[%s] clearing filter list%s\n",					who_am_i(), listp->debug_type);			}			clear_filter_list(listp);			continue;		}		if (!pat_len) {			cp = ".cvsignore";			pat_len = 10;		}		if (mflags & MATCHFLG_MERGE_FILE) {			unsigned int len = pat_len;			if (mflags & MATCHFLG_EXCLUDE_SELF) {				const char *name = strrchr(cp, '/');				if (name)					len -= ++name - cp;				else					name = cp;				filter_rule(listp, name, len, 0, 0);				mflags &= ~MATCHFLG_EXCLUDE_SELF;				len = pat_len;			}			if (mflags & MATCHFLG_PERDIR_MERGE) {				if (parent_dirscan) {					if (!(p = parse_merge_name(cp, &len, module_dirlen)))						continue;					filter_rule(listp, p, len, mflags, 0);					continue;				}			} else {				int flgs = XFLG_FATAL_ERRORS;				if (!(p = parse_merge_name(cp, &len, 0)))					continue;				if (mflags & MATCHFLG_INCLUDE)					flgs |= XFLG_DEF_INCLUDE;				else if (mflags & MATCHFLG_NO_PREFIXES)					flgs |= XFLG_DEF_EXCLUDE;				add_filter_file(listp, p, flgs);				continue;			}		}		filter_rule(listp, cp, pat_len, mflags, xflags);	}}