diff options
author | elfmz <fenix1905@tut.by> | 2022-11-13 02:02:17 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-11-13 02:02:17 +0300 |
commit | 4a0860df71235d95c9a04a78e24bc77accbadcb5 (patch) | |
tree | c244aab4c6c205c3e8026515d7a3288719438088 /far2l/src/delete.cpp | |
parent | 1bbd76a8d7f2828c02c058f0b360f8e38e411323 (diff) |
Diffstat (limited to 'far2l/src/delete.cpp')
-rw-r--r-- | far2l/src/delete.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/far2l/src/delete.cpp b/far2l/src/delete.cpp index 391e6731..4aacf5da 100644 --- a/far2l/src/delete.cpp +++ b/far2l/src/delete.cpp @@ -801,25 +801,40 @@ int ERemoveDirectory(const wchar_t *Name,int Wipe) return DELETE_SUCCESS; } -int RemoveToRecycleBin(const wchar_t *Name) +static int RemoveToRecycleBin(const wchar_t *Name) { - std::string name_mb = Wide2MB(Name); + FARString err_file; + FarMkTempEx(err_file, L"trash"); + + std::string name_arg = Wide2MB(Name); + std::string err_file_arg = err_file.GetMB(); unsigned int flags = EF_HIDEOUT; - if (sudo_client_is_required_for(name_mb.c_str(), true)) + if (sudo_client_is_required_for(name_arg.c_str(), true)) flags|= EF_SUDO; - QuoteCmdArgIfNeed(name_mb); + QuoteCmdArgIfNeed(name_arg); + QuoteCmdArgIfNeed(err_file_arg); std::string cmd = GetMyScriptQuoted("trash.sh"); cmd+= ' '; - cmd+= name_mb; + cmd+= name_arg; + cmd+= ' '; + cmd+= err_file_arg; int r = farExecuteA(cmd.c_str(), flags); - if (r==0) + if (r == 0) return TRUE; - errno = r; + std::string err_str; + if (ReadWholeFile(err_file.GetMB().c_str(), err_str, 0x10000)) { + // gio: file:///.../xxx/yyy: Unable to trash file .../xxx/yyy: Permission denied + err_str.erase(0, err_str.rfind(':') + 1); + StrTrim(err_str, " \t\r\n"); + SetErrorString(err_str); + } + unlink(err_file.GetMB().c_str()); + return FALSE; } |