Browse Source

add f_opendir to open root directory in dfs_elm_mount to make sure that there is a valid fat
partition on physical media.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2251 bbd45198-f89e-11dd-88c7-29a3b14d5316

goprife@gmail.com 13 years ago
parent
commit
063fb36089
1 changed files with 19 additions and 0 deletions
  1. 19 0
      components/dfs/filesystems/elmfat/dfs_elm.c

+ 19 - 0
components/dfs/filesystems/elmfat/dfs_elm.c

@@ -103,7 +103,26 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d
 	/* mount fatfs, always 0 logic driver */
 	/* mount fatfs, always 0 logic driver */
 	result = f_mount(index, fat);
 	result = f_mount(index, fat);
 	if (result == FR_OK)
 	if (result == FR_OK)
+	{
+		char drive[8];
+		DIR * dir;
+
+		rt_snprintf(drive, sizeof(drive), "%d:/", fat->drv);
+		dir = (DIR *)rt_malloc(sizeof(DIR));
+		if (dir == RT_NULL)
+			return -DFS_STATUS_ENOMEM;
+
+		/* open the root directory to test whether the fatfs is valid */
+		result = f_opendir(dir, drive);
+		if (result != FR_OK)
+		{
+			rt_free(dir);
+			return elm_result_to_dfs(result);
+		}
+		rt_free(dir);
+
 		fs->data = fat;
 		fs->data = fat;
+	}
 	else
 	else
 	{
 	{
 		rt_free(fat);
 		rt_free(fat);