R0.10c with patch 1

November 13, 2014

f_unlink function does not remove cluster chain of the file. It reads to
a lost cluster of the FAT volume. This is added at a bugfix of R0.10c.
This commit is contained in:
Christopher Williams
2015-01-31 09:43:19 -07:00
parent 0e89a5798f
commit f253f45166
+15 -13
View File
@@ -3486,22 +3486,24 @@ FRESULT f_unlink (
if (dir[DIR_Attr] & AM_RDO) if (dir[DIR_Attr] & AM_RDO)
res = FR_DENIED; /* Cannot remove R/O object */ res = FR_DENIED; /* Cannot remove R/O object */
} }
if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ if (res == FR_OK) {
dclst = ld_clust(dj.fs, dir); dclst = ld_clust(dj.fs, dir);
if (!dclst) { if (dir[DIR_Attr] & AM_DIR) { /* Is it a sub-dir? */
res = FR_INT_ERR; if (!dclst) {
} else { /* Make sure the sub-directory is empty */ res = FR_INT_ERR;
mem_cpy(&sdj, &dj, sizeof (DIR)); } else { /* Make sure the sub-directory is empty */
sdj.sclust = dclst; mem_cpy(&sdj, &dj, sizeof (DIR));
res = dir_sdi(&sdj, 2); /* Exclude dot entries */ sdj.sclust = dclst;
if (res == FR_OK) { res = dir_sdi(&sdj, 2); /* Exclude dot entries */
res = dir_read(&sdj, 0); /* Read an item */ if (res == FR_OK) {
if (res == FR_OK /* Not empty directory */ res = dir_read(&sdj, 0); /* Read an item */
if (res == FR_OK /* Not empty directory */
#if _FS_RPATH #if _FS_RPATH
|| dclst == dj.fs->cdir /* or current directory */ || dclst == dj.fs->cdir /* or current directory */
#endif #endif
) res = FR_DENIED; ) res = FR_DENIED;
if (res == FR_NO_FILE) res = FR_OK; /* It is empty */ if (res == FR_NO_FILE) res = FR_OK; /* It is empty */
}
} }
} }
} }