diff options
author | Gabriel de Perthuis <g2p.code@gmail.com> | 2015-08-13 17:07:01 +0200 |
---|---|---|
committer | Philip Langdale <philipl@overt.org> | 2015-08-13 20:18:29 -0700 |
commit | a807f12d5663ab7f2767bddf8f8ab20ae886297d (patch) | |
tree | 76b94c2a0cdf16966371d4444f814db6124d2dbc /daemon | |
parent | b8e09920e3f95dd3764b159d0b07d7f6904fc9ea (diff) | |
download | gvfs-a807f12d5663ab7f2767bddf8f8ab20ae886297d.tar.gz |
MTP: return ENOTEMPTY if trying to delete a non-empty directory
rmdir acted as rm -rf before this change, which was unfortunate.
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gvfsbackendmtp.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/daemon/gvfsbackendmtp.c b/daemon/gvfsbackendmtp.c index 8cd78861..be63218f 100644 --- a/daemon/gvfsbackendmtp.c +++ b/daemon/gvfsbackendmtp.c @@ -2074,6 +2074,26 @@ do_delete (GVfsBackend *backend, LIBMTP_mtpdevice_t *device; device = G_VFS_BACKEND_MTP (backend)->device; + LIBMTP_file_t *file = LIBMTP_Get_Filemetadata (device, entry->id); + if (file->filetype == LIBMTP_FILETYPE_FOLDER) { + LIBMTP_file_t *files; + LIBMTP_Clear_Errorstack (device); + files = LIBMTP_Get_Files_And_Folders (device, entry->storage, entry->id); + if (LIBMTP_Get_Errorstack (device) != NULL) { + g_vfs_job_failed_literal (G_VFS_JOB (job), + G_IO_ERROR, G_IO_ERROR_NOT_EMPTY, + _("Error checking for directory emptiness")); + goto exit; + } + + if (files != NULL) { + g_vfs_job_failed_literal (G_VFS_JOB (job), + G_IO_ERROR, G_IO_ERROR_NOT_EMPTY, + g_strerror (ENOTEMPTY)); + DEBUG ("(II) Directory size %d\n", file->filesize); + goto exit; + } + } int ret = LIBMTP_Delete_Object (device, entry->id); if (ret != 0) { |