summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel de Perthuis <g2p.code@gmail.com>2015-08-13 17:07:01 +0200
committerPhilip Langdale <philipl@overt.org>2015-08-13 20:18:29 -0700
commita807f12d5663ab7f2767bddf8f8ab20ae886297d (patch)
tree76b94c2a0cdf16966371d4444f814db6124d2dbc
parentb8e09920e3f95dd3764b159d0b07d7f6904fc9ea (diff)
downloadgvfs-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.
-rw-r--r--daemon/gvfsbackendmtp.c20
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) {