diff -r 1ce7211a1021 -r bc215bdaf9bc dav/main.c --- a/dav/main.c Wed May 30 10:07:48 2018 +0200 +++ b/dav/main.c Wed May 30 10:12:51 2018 +0200 @@ -1299,69 +1299,71 @@ } int cmd_move(CmdArgs *a, int cp) { + const char* actionstr = cp ? "copy" : "move"; + if(a->argc != 2) { // TODO: change, when creation of multiple dirs is supported fprintf(stderr, "Too %s arguments\n", a->argc < 2 ? "few":"many"); - fprintf(stderr, "Usage: dav %s\n", find_usage_str(cp ? "copy" : "move")); + fprintf(stderr, "Usage: dav %s\n", find_usage_str(actionstr)); return -1; } - char *url1 = a->argv[0]; - char *path1 = NULL; - Repository *repo1 = url2repo(url1, &path1); + char *srcurl = a->argv[0]; + char *srcpath = NULL; + Repository *srcrepo = url2repo(srcurl, &srcpath); - DavSession *sn = connect_to_repo(repo1, a); - if(set_session_config(sn, a)) { + DavSession *srcsn = connect_to_repo(srcrepo, a); + if(set_session_config(srcsn, a)) { return -1; } - set_session_lock(sn, a); + set_session_lock(srcsn, a); DavBool override = cmd_getoption(a, "override") ? true : false; - char *url2 = a->argv[1]; - char *path2 = NULL; - Repository *repo2 = url2repo(url2, &path2); + char *desturl = a->argv[1]; + char *destpath = NULL; + Repository *destrepo = url2repo(desturl, &destpath); - if(repo1 == repo2) { - DavResource *res = dav_resource_new(sn, path1); - int err = cp ? dav_copy_o(res, path2, override) - : dav_move_o(res, path2, override); + if(srcrepo == destrepo) { + DavResource *res = dav_resource_new(srcsn, srcpath); + int err = cp ? dav_copy_o(res, destpath, override) + : dav_move_o(res, destpath, override); if(err) { - print_resource_error(sn, res->path); - fprintf(stderr, "Cannot %s resource.\n", cp ? "copy" : "move"); + print_resource_error(srcsn, res->path); + fprintf(stderr, "Cannot %s resource.\n", actionstr); return -1; } } else { - char *server1 = util_url_base(repo1->url); - char *server2 = util_url_base(repo2->url); - if(!strcmp(server1, server2)) { - DavSession *sn2 = connect_to_repo(repo2, a); - if(set_session_config(sn2, a)) { + char *srchost = util_url_base(srcrepo->url); + char *desthost = util_url_base(destrepo->url); + if(!strcmp(srchost, desthost)) { + DavSession *destsn = connect_to_repo(destrepo, a); + if(set_session_config(destsn, a)) { return -1; } - DavResource *dest = dav_resource_new(sn2, path2); + DavResource *dest = dav_resource_new(destsn, destpath); char *desthref = dav_resource_get_href(dest); - char *desturl = util_get_url(sn2, desthref); + char *desturl = util_get_url(destsn, desthref); - DavResource *res = dav_resource_new(sn, path1); + DavResource *res = dav_resource_new(srcsn, srcpath); int err = cp ? dav_copyto(res, desturl, override) : dav_moveto(res, desturl, override); free(desturl); - dav_session_destroy(sn2); + dav_session_destroy(destsn); if(err) { - print_resource_error(sn, res->path); - fprintf(stderr, "Cannot %s resource.\n", cp ? "copy" : "move"); + print_resource_error(srcsn, res->path); + fprintf(stderr, "Cannot %s resource.\n", actionstr); return -1; } } else { - fprintf(stderr, "Copy or Move not supported for different hosts.\n"); + fprintf(stderr, "Cannot %s between different hosts.\n", actionstr); return -1; } } - dav_session_destroy(sn); + dav_session_destroy(srcsn); return 0; }