changeset 2411:fe481a165385

* src/fatfs.c: When removing a directory, first remove . and .. nodes.
author asl
date Tue, 31 Jul 2007 18:41:43 +0000
parents 87cd3c9ced46
children 80745a26ab22
files packages/fs/fat/current/ChangeLog packages/fs/fat/current/src/fatfs.c
diffstat 2 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/packages/fs/fat/current/ChangeLog
+++ b/packages/fs/fat/current/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-31  Hajime Ishitani <pigmon@mail.snd.co.jp>
+
+	* src/fatfs.c: When removing a directory, first remove . and
+	.. nodes.
+	
 2007-02-05  Ya-Chau Yang <a8850607@stmail.fju.edu.tw> 
             Savin Zlobec <savinz@users.sourceforge.net>
 
--- a/packages/fs/fat/current/src/fatfs.c
+++ b/packages/fs/fat/current/src/fatfs.c
@@ -756,6 +756,7 @@ fatfs_rmdir(cyg_mtab_entry *mte, cyg_dir
     fatfs_disk_t      *disk = (fatfs_disk_t *) mte->data;
     fatfs_dirsearch_t  ds;
     int                err;
+    fatfs_node_t      *node;
 
     CYG_TRACE3(TFS, "rmdir mte=%p dir=%p name='%s'", mte, dir, name);
 
@@ -774,8 +775,17 @@ fatfs_rmdir(cyg_mtab_entry *mte, cyg_dir
     
     err = fatfs_delete_file(disk, &ds.node->dentry);
     if (err == ENOERR)
+    {
+        node = fatfs_node_find( disk, ".", 1, ds.node->dentry.cluster );
+        if (node != NULL)
+             fatfs_node_free(disk, node);
+
+        node = fatfs_node_find( disk, "..", 2, ds.node->dentry.cluster );
+        if (node != NULL)
+            fatfs_node_free(disk, node);
+
         fatfs_node_free(disk, ds.node);
-    
+    }
     return err;
 }