From 22957145488969e0b6e9c65e421b40e7e40ef6b0 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Mon, 7 Jul 2014 21:54:38 -0400 Subject: [PATCH] on ENOENT try cloning the dest path to source drive. closes #20 --- src/link.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/link.cpp b/src/link.cpp index 607182bc..962e031c 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -59,10 +59,26 @@ _link(const fs::SearchFunc searchFunc, for(fs::PathVector::const_iterator i = paths.begin(), ei = paths.end(); i != ei; ++i) { + int lrv; const string pathfrom = fs::make_path(i->base,from); const string pathto = fs::make_path(i->base,to); - rv &= ::link(pathfrom.c_str(),pathto.c_str()); + lrv = ::link(pathfrom.c_str(),pathto.c_str()); + if(lrv == -1 && errno == ENOENT) + { + string todir; + fs::PathVector topaths; + + todir = fs::dirname(to); + fs::find::ffwp(srcmounts,todir,topaths); + if(topaths.size() > 0) + { + fs::clonepath(topaths[0].base,i->base,todir); + lrv = ::link(pathfrom.c_str(),pathto.c_str()); + } + } + + rv &= lrv; if(rv == -1) error = errno; }