+
+- if (stringjoin(rel, backup_dir_remainder, fname, backup_suffix, NULL) >= backup_dir_remainder) {
++ if (stringjoin(rel, remainder, fname, suffix, NULL) >= remainder) {
+ rprintf(FERROR, "backup filename too long\n");
+ *name = '\0';
+ return False;
+@@ -62,16 +69,16 @@ static BOOL copy_valid_path(const char *fname)
+ return True;
+ *b = '\0';
+
+- if (do_lstat(backup_dir_buf, &sx.st) < 0) {
++ if (do_lstat(buf, &sx.st) < 0) {
+ if (errno == ENOENT)
+ break;
+- rsyserr(FERROR, errno, "backup lstat %s failed", backup_dir_buf);
++ rsyserr(FERROR, errno, "backup lstat %s failed", buf);
+ *name = '\0';
+ return False;
+ }
+ if (!S_ISDIR(sx.st.st_mode)) {
+ flags = get_del_for_flag(sx.st.st_mode) | DEL_FOR_BACKUP | DEL_RECURSE;
+- if (delete_item(backup_dir_buf, sx.st.st_mode, flags) == 0)
++ if (delete_item(buf, sx.st.st_mode, flags) == 0)
+ break;
+ *name = '\0';
+ return False;
+@@ -85,8 +92,8 @@ static BOOL copy_valid_path(const char *fname)
+ for ( ; b; name = b + 1, b = strchr(name, '/')) {
+ *b = '\0';
+
+- if (mkdir_defmode(backup_dir_buf) < 0) {
+- rsyserr(FERROR, errno, "backup mkdir %s failed", backup_dir_buf);
++ if (mkdir_defmode(buf) < 0) {
++ rsyserr(FERROR, errno, "backup mkdir %s failed", buf);
+ *name = '\0';
+ ret = False;
+ break;
+@@ -114,7 +121,7 @@ static BOOL copy_valid_path(const char *fname)
+ free_xattr(&sx);
+ }
+ #endif
+- set_file_attrs(backup_dir_buf, file, NULL, NULL, 0);
++ set_file_attrs(buf, file, NULL, NULL, 0);
+ unmake_file(file);
+ }
+
+@@ -134,15 +141,20 @@ static BOOL copy_valid_path(const char *fname)
+ /* Make a complete pathname for backup file and verify any new path elements. */
+ char *get_backup_name(const char *fname)