diff options
Diffstat (limited to 'plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp')
-rwxr-xr-x | plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp b/plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp index b5af928..e52bc7f 100755 --- a/plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp +++ b/plugins/CopyEngine/Ultracopier-Spec/async/TransferThreadAsync.cpp @@ -620,9 +620,16 @@ void TransferThreadAsync::ifCanStartTransfer() return; } } - char buf[PATH_MAX]; - const ssize_t s=readlink(TransferThread::internalStringTostring(source).c_str(),buf,sizeof(buf)); - buf[s]=0x00; + std::vector<char> buf(512); + ssize_t s=0; + do { + buf.resize(buf.size()*2); + s=readlink(TransferThread::internalStringTostring(source).c_str(),buf.data(),buf.size()); + } while (s == (ssize_t)buf.size()); + if (s!=-1) { + buf.resize(s + 1); + buf[s]='\0'; + } if(s<0) { const int terr=errno; @@ -638,12 +645,12 @@ void TransferThreadAsync::ifCanStartTransfer() } else { - if(symlink(buf,TransferThread::internalStringTostring(destination).c_str())!=0) + if(symlink(buf.data(),TransferThread::internalStringTostring(destination).c_str())!=0) { const int terr=errno; const std::string &strError=strerror(terr); ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"["+std::to_string(id)+"] stop copy in error "+ - buf+"->"+TransferThread::internalStringTostring(destination)+ + buf.data()+"->"+TransferThread::internalStringTostring(destination)+ " "+strError+"("+std::to_string(terr)+")" ); readError=true; |