Allow opendir() in send_directory() to fail with ENOENT.
[rsync/rsync.git] / exclude.c
index 9db8f1a..ee1ffce 100644 (file)
--- a/exclude.c
+++ b/exclude.c
@@ -332,12 +332,13 @@ static char *parse_merge_name(const char *merge_file, unsigned int *len_ptr,
 
        /* If the name isn't in buf yet, it's wasn't absolute. */
        if (fn != buf) {
-               if (dirbuf_len + fn_len >= MAXPATHLEN) {
+               int d_len = dirbuf_len - prefix_skip;
+               if (d_len + fn_len >= MAXPATHLEN) {
                        rprintf(FERROR, "merge-file name overflows: %s\n", fn);
                        return NULL;
                }
-               memcpy(buf, dirbuf + prefix_skip, dirbuf_len - prefix_skip);
-               memcpy(buf + dirbuf_len - prefix_skip, fn, fn_len + 1);
+               memcpy(buf, dirbuf + prefix_skip, d_len);
+               memcpy(buf + d_len, fn, fn_len + 1);
                fn_len = clean_fname(buf, CFN_COLLAPSE_DOT_DOT_DIRS);
        }
 
@@ -475,7 +476,7 @@ void *push_local_filters(const char *dir, unsigned int dirlen)
                                          XFLG_ANCHORED2ABS);
                } else {
                        io_error |= IOERR_GENERAL;
-                       rprintf(FINFO,
+                       rprintf(FERROR,
                            "cannot add local filter rules in long-named directory: %s\n",
                            full_fname(dirbuf));
                }