Browse Source

add chk_mounted 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@2248 bbd45198-f89e-11dd-88c7-29a3b14d5316
goprife@gmail.com 13 years ago
parent
commit
853b1259b0

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

@@ -103,7 +103,27 @@ 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)
+	{
+		extern FRESULT chk_mounted(const TCHAR **path, FATFS **rfs, BYTE chk_wp);
+		extern void leavefs(FATFS*	fs, int res);
+		char driver[16];
+		const char * path;
+		DIR dj;
+		path = (const char *)driver;
+		rt_snprintf(driver, sizeof(driver), "%d:/", fat->drv);
+#if !_FS_READONLY
+		result = chk_mounted(&path, &dj.fs, 1);
+#else
+		result = chk_mounted(&path, &dj.fs, 0);
+#endif
+		if (result != FR_OK)
+		{
+			rt_free(fat);
+			return -1;
+		}
+		leavefs(dj.fs, result);
 		fs->data = fat;
 		fs->data = fat;
+	}
 	else
 	else
 	{
 	{
 		rt_free(fat);
 		rt_free(fat);

+ 6 - 1
components/dfs/filesystems/elmfat/ff.c

@@ -2004,7 +2004,7 @@ BYTE check_fs (	/* 0:The FAT BR, 1:Valid BR but not an FAT, 2:Not a BR, 3:Disk e
 /* Check if the file system object is valid or not                       */
 /* Check if the file system object is valid or not                       */
 /*-----------------------------------------------------------------------*/
 /*-----------------------------------------------------------------------*/
 
 
-static
+
 FRESULT chk_mounted (	/* FR_OK(0): successful, !=0: any error occurred */
 FRESULT chk_mounted (	/* FR_OK(0): successful, !=0: any error occurred */
 	const TCHAR **path,	/* Pointer to pointer to the path name (drive number) */
 	const TCHAR **path,	/* Pointer to pointer to the path name (drive number) */
 	FATFS **rfs,		/* Pointer to pointer to the found file system object */
 	FATFS **rfs,		/* Pointer to pointer to the found file system object */
@@ -4019,3 +4019,8 @@ int elm_get_vol(FATFS *fat)
 	return -1;
 	return -1;
 }
 }
 #endif
 #endif
+
+void leavefs(FATFS*	fs, int res)
+{
+	LEAVE_FF(fs, res);
+}