commit
95006bb503
|
@ -108,12 +108,8 @@
|
||||||
#if _MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096
|
#if _MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096
|
||||||
#error Wrong sector size.
|
#error Wrong sector size.
|
||||||
#endif
|
#endif
|
||||||
#if _MAX_SS != 512
|
|
||||||
#define SS(fs) ((fs)->ssize) /* Multiple sector size */
|
|
||||||
#else
|
|
||||||
#define SS(fs) 512U /* Fixed sector size */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#define SS(fs) ((fs)->ssize) /* sector size */
|
||||||
|
|
||||||
/* Reentrancy related */
|
/* Reentrancy related */
|
||||||
#if _FS_REENTRANT
|
#if _FS_REENTRANT
|
||||||
|
@ -2058,10 +2054,11 @@ FRESULT chk_mounted ( /* FR_OK(0): successful, !=0: any error occurred */
|
||||||
stat = disk_initialize(fs->drv); /* Initialize low level disk I/O layer */
|
stat = disk_initialize(fs->drv); /* Initialize low level disk I/O layer */
|
||||||
if (stat & STA_NOINIT) /* Check if the initialization succeeded */
|
if (stat & STA_NOINIT) /* Check if the initialization succeeded */
|
||||||
return FR_NOT_READY; /* Failed to initialize due to no media or hard error */
|
return FR_NOT_READY; /* Failed to initialize due to no media or hard error */
|
||||||
#if _MAX_SS != 512 /* Get disk sector size (variable sector size cfg only) */
|
|
||||||
|
/* Get disk sector size (variable sector size cfg only) */
|
||||||
if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &fs->ssize) != RES_OK)
|
if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &fs->ssize) != RES_OK)
|
||||||
return FR_DISK_ERR;
|
return FR_DISK_ERR;
|
||||||
#endif
|
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
if (chk_wp && (stat & STA_PROTECT)) /* Check disk write protection if needed */
|
if (chk_wp && (stat & STA_PROTECT)) /* Check disk write protection if needed */
|
||||||
return FR_WRITE_PROTECTED;
|
return FR_WRITE_PROTECTED;
|
||||||
|
@ -3601,10 +3598,10 @@ FRESULT f_mkfs (
|
||||||
stat = disk_initialize(drv);
|
stat = disk_initialize(drv);
|
||||||
if (stat & STA_NOINIT) return FR_NOT_READY;
|
if (stat & STA_NOINIT) return FR_NOT_READY;
|
||||||
if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
|
if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
|
||||||
#if _MAX_SS != 512 /* Get disk sector size */
|
/* Get disk sector size */
|
||||||
if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK)
|
if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK)
|
||||||
return FR_DISK_ERR;
|
return FR_DISK_ERR;
|
||||||
#endif
|
|
||||||
if (disk_ioctl(drv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128)
|
if (disk_ioctl(drv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128)
|
||||||
return FR_DISK_ERR;
|
return FR_DISK_ERR;
|
||||||
b_vol = (sfd) ? 0 : 63; /* Volume start sector */
|
b_vol = (sfd) ? 0 : 63; /* Volume start sector */
|
||||||
|
|
|
@ -84,9 +84,7 @@ typedef struct {
|
||||||
BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
|
BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
|
||||||
WORD id; /* File system mount ID */
|
WORD id; /* File system mount ID */
|
||||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||||
#if _MAX_SS != 512
|
|
||||||
WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
|
WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
|
||||||
#endif
|
|
||||||
#if _FS_REENTRANT
|
#if _FS_REENTRANT
|
||||||
_SYNC_t sobj; /* Identifier of sync object */
|
_SYNC_t sobj; /* Identifier of sync object */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -80,7 +80,7 @@ int dfs_register(const struct dfs_filesystem_operation *ops)
|
||||||
struct dfs_filesystem *dfs_filesystem_lookup(const char *path)
|
struct dfs_filesystem *dfs_filesystem_lookup(const char *path)
|
||||||
{
|
{
|
||||||
struct dfs_filesystem *iter;
|
struct dfs_filesystem *iter;
|
||||||
struct dfs_filesystem *empty = RT_NULL;
|
struct dfs_filesystem *fs = RT_NULL;
|
||||||
rt_uint32_t fspath, prefixlen;
|
rt_uint32_t fspath, prefixlen;
|
||||||
|
|
||||||
prefixlen = 0;
|
prefixlen = 0;
|
||||||
|
@ -104,13 +104,13 @@ struct dfs_filesystem *dfs_filesystem_lookup(const char *path)
|
||||||
if (fspath > 1 && (strlen(path) > fspath) && (path[fspath] != '/'))
|
if (fspath > 1 && (strlen(path) > fspath) && (path[fspath] != '/'))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
empty = iter;
|
fs = iter;
|
||||||
prefixlen = fspath;
|
prefixlen = fspath;
|
||||||
}
|
}
|
||||||
|
|
||||||
dfs_unlock();
|
dfs_unlock();
|
||||||
|
|
||||||
return empty;
|
return fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -329,6 +329,7 @@ err1:
|
||||||
int dfs_unmount(const char *specialfile)
|
int dfs_unmount(const char *specialfile)
|
||||||
{
|
{
|
||||||
char *fullpath;
|
char *fullpath;
|
||||||
|
struct dfs_filesystem *iter;
|
||||||
struct dfs_filesystem *fs = RT_NULL;
|
struct dfs_filesystem *fs = RT_NULL;
|
||||||
|
|
||||||
fullpath = dfs_normalize_path(RT_NULL, specialfile);
|
fullpath = dfs_normalize_path(RT_NULL, specialfile);
|
||||||
|
@ -342,7 +343,17 @@ int dfs_unmount(const char *specialfile)
|
||||||
/* lock filesystem */
|
/* lock filesystem */
|
||||||
dfs_lock();
|
dfs_lock();
|
||||||
|
|
||||||
fs = dfs_filesystem_lookup(fullpath);
|
for (iter = &filesystem_table[0];
|
||||||
|
iter < &filesystem_table[DFS_FILESYSTEMS_MAX]; iter++)
|
||||||
|
{
|
||||||
|
/* check if the PATH is mounted */
|
||||||
|
if ((iter->path != NULL) && (strcmp(iter->path, fullpath) == 0))
|
||||||
|
{
|
||||||
|
fs = iter;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fs == RT_NULL ||
|
if (fs == RT_NULL ||
|
||||||
fs->ops->unmount == RT_NULL ||
|
fs->ops->unmount == RT_NULL ||
|
||||||
fs->ops->unmount(fs) < 0)
|
fs->ops->unmount(fs) < 0)
|
||||||
|
|
Loading…
Reference in New Issue