rem: void send_filter_list(int f)
add: void send_filter_list(int f_out)
context: void send_filter_list(int f){	struct filter_struct *ent;	/* This is a complete hack - blame Rusty.  FIXME!	 * Remove this hack when older rsyncs (below 2.6.4) are gone. */	if (list_only == 1 && !recurse)		add_filter(&filter_list, "/*/*", MATCHFLG_NO_PREFIXES, 0);	for (ent = filter_list.head; ent; ent = ent->next) {		unsigned int len, plen, dlen;		char *p;		len = strlen(ent->pattern);		if (len == 0 || len >= MAXPATHLEN)			continue;		p = get_rule_prefix(ent->match_flags, ent->pattern, &plen);		if (protocol_version < 29 && *p == ':') {			if (strcmp(p, ":sn- ") == 0			    && strcmp(ent->pattern, ".cvsignore") == 0)				continue;			rprintf(FERROR,				"remote rsync is too old to understand per-directory merge files.\n");			exit_cleanup(RERR_SYNTAX);		}		dlen = ent->match_flags & MATCHFLG_DIRECTORY ? 1 : 0;		write_int(f, plen + len + dlen);		if (plen)			write_buf(f, p, plen);		write_buf(f, ent->pattern, len);		if (dlen)			write_byte(f, '/');	}	write_int(f, 0);}