+/*
+ * Optimization for special case when all included files are explicitly
+ * listed without wildcards in the "exclude" list followed by a "- *"
+ * to exclude the rest.
+ * Contributed by Dave Dykstra <dwd@bell-labs.com>
+ */
+static int only_included_files = 1;
+static struct exclude_struct *exclude_the_rest;
+
+int send_included_file_names(int f,struct file_list *flist)
+{
+ struct exclude_struct *ex, **ex_list;
+ int n;
+ char *p;
+
+ if (!only_included_files || (exclude_the_rest == NULL))
+ return 0;
+
+ if (verbose > 1) {
+ rprintf(FINFO,"(using include-only optimization) ");
+ }
+
+ /* set exclude_list to NULL temporarily so check_exclude */
+ /* will always return true */
+ ex_list = exclude_list;
+ exclude_list = NULL;
+ for (n=0; (ex = ex_list[n]) != NULL; n++) {
+ if (ex == exclude_the_rest)
+ break;
+ p = ex->pattern;
+ while (*p == '/') {
+ /* skip the allowed beginning slashes */
+ p++;
+ }
+ /* silently skip files that don't exist to
+ be more like non-optimized case */
+ if (access(p,0) == 0)
+ send_file_name(f,flist,p,0,0);
+ }
+ exclude_list = ex_list;
+
+ return 1;
+}
+