summaryrefslogtreecommitdiff
path: root/src/mscp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscp.c')
-rw-r--r--src/mscp.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/mscp.c b/src/mscp.c
index f1af1b7..2fe9703 100644
--- a/src/mscp.c
+++ b/src/mscp.c
@@ -297,7 +297,7 @@ int mscp_set_dst_path(struct mscp *m, const char *dst_path)
int mscp_prepare(struct mscp *m)
{
sftp_session src_sftp = NULL, dst_sftp = NULL;
- bool src_path_is_dir, dst_path_is_dir;
+ bool src_path_is_dir, dst_path_is_dir, dst_path_should_dir = false;
struct list_head tmp;
struct src *s;
mstat ss, ds;
@@ -316,6 +316,9 @@ int mscp_prepare(struct mscp *m)
return -1;
}
+ if (list_count(&m->src_list) > 1)
+ dst_path_should_dir = true;
+
if (mscp_stat(m->dst_path, &ds, dst_sftp) == 0) {
if (mstat_is_dir(ds))
dst_path_is_dir = true;
@@ -336,8 +339,12 @@ int mscp_prepare(struct mscp *m)
if (walk_src_path(src_sftp, s->path, &tmp) < 0)
return -1;
+ if (list_count(&tmp) > 1)
+ dst_path_should_dir = true;
+
if (resolve_dst_path(s->path, m->dst_path, &tmp,
- src_path_is_dir, dst_path_is_dir) < 0)
+ src_path_is_dir, dst_path_is_dir,
+ dst_path_should_dir) < 0)
return -1;
list_splice_tail(&tmp, m->path_list.prev);