summaryrefslogtreecommitdiff
path: root/libgphoto2
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2009-07-11 16:32:44 +0000
committerMarcus Meissner <marcus@jet.franken.de>2009-07-11 16:32:44 +0000
commit00f1828101627d3ec7d05c891bda3320b7848a57 (patch)
tree5345b71e14be4714d375481082c16eb349b46d2b /libgphoto2
parent1358b6561023488dbca89d3019a8b86b8b0060f6 (diff)
downloadlibgphoto2-00f1828101627d3ec7d05c891bda3320b7848a57.tar.gz
rmdir needs to ensure the owning folder is clean
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@12222 67ed7778-7388-44ab-90cf-0a291f65f57c
Diffstat (limited to 'libgphoto2')
-rw-r--r--libgphoto2/gphoto2-filesys.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/libgphoto2/gphoto2-filesys.c b/libgphoto2/gphoto2-filesys.c
index ee4eb913a..654400c88 100644
--- a/libgphoto2/gphoto2-filesys.c
+++ b/libgphoto2/gphoto2-filesys.c
@@ -308,7 +308,7 @@ delete_all_files (CameraFilesystem *fs, CameraFilesystemFolder *folder)
CameraFilesystemFile *file;
CHECK_NULL (folder);
- gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Delete all files in folder %p", folder);
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Delete all files in folder %p/%s", folder, folder->name);
file = folder->files;
while (file) {
@@ -354,7 +354,7 @@ delete_folder (CameraFilesystem *fs, CameraFilesystemFolder **folder)
CameraFilesystemFolder *next;
CHECK_NULL (folder);
- gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Delete one folder %p", *folder);
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Delete one folder %p/%s", *folder, (*folder)->name);
next = (*folder)->next;
delete_all_files (fs, *folder);
free ((*folder)->name);
@@ -477,7 +477,7 @@ static int
recurse_delete_folder (CameraFilesystem *fs, CameraFilesystemFolder *folder) {
CameraFilesystemFolder **f;
- gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Recurse delete folder %p", folder);
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Recurse delete folder %p/%s", folder, folder->name);
f = &folder->folders;
while (*f) {
recurse_delete_folder (fs, *f);
@@ -534,7 +534,7 @@ append_to_folder (CameraFilesystemFolder *folder,
CameraFilesystemFolder *f;
char *s;
- gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Append to folder %p - %s", folder, foldername);
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Append to folder %p/%s - %s", folder, folder->name, foldername);
/* Handle multiple slashes, and slashes at the end */
while (foldername[0]=='/')
foldername++;
@@ -1199,6 +1199,23 @@ gp_filesystem_remove_dir (CameraFilesystem *fs, const char *folder,
*/
f = lookup_folder (fs, fs->rootfolder, folder, context);
if (!f) return (GP_ERROR_DIRECTORY_NOT_FOUND);
+ /* Check if we need to load the folder ... */
+ if (f->folders_dirty) {
+ CameraList *list;
+ int ret;
+ /*
+ * The owning folder is dirty. List the folders in it
+ * to make it clean.
+ */
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Folder %s is dirty. "
+ "Listing folders in there to make folder clean...", folder);
+ ret = gp_list_new (&list);
+ if (ret == GP_OK) {
+ ret = gp_filesystem_list_folders (fs, folder, list, context);
+ gp_list_free (list);
+ gp_log (GP_LOG_DEBUG, "gphoto2-filesystem", "Done making folder %s clean...", folder);
+ }
+ }
prev = &(f->folders);
while (*prev) {
if (!strcmp (name, (*prev)->name))