提交 c4a21b44 编写于 作者: B bernard.xiong

add more options to filesystem mount function invoke.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@665 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 c988a222
......@@ -5,8 +5,12 @@ Import('rtconfig')
# build each components
objs = ''
if 'RT_USING_MINILIBC' in dir(rtconfig) and rtconfig.RT_USING_MINILIBC:
objs = objs + SConscript('libc/minilibc/SConscript')
if rtconfig.CROSS_TOOL == 'gcc':
if 'RT_USING_NEWLIB' in dir(rtconfig) and rtconfig.RT_USING_NEWLIB:
objs = objs + SConscript('libc/newlib/SConscript')
else:
rtconfig.RT_USING_MINILIBC = True
objs = objs + SConscript('libc/minilibc/SConscript')
if 'RT_USING_FINSH' in dir(rtconfig) and rtconfig.RT_USING_FINSH:
objs = objs + SConscript('finsh/SConscript')
......
......@@ -49,7 +49,7 @@ static int elm_result_to_dfs(FRESULT result)
return status;
}
int dfs_elm_mount(struct dfs_filesystem* fs)
int dfs_elm_mount(struct dfs_filesystem* fs, unsigned long rwflag, const void* data)
{
FATFS *fat;
FRESULT result;
......
......@@ -28,7 +28,7 @@ struct dfs_filesystem_operation
{
char name[DFS_FS_NAME_MAX + 1];
int (*mount) (struct dfs_filesystem* fs);
int (*mount) (struct dfs_filesystem* fs, unsigned long rwflag, const void* data);
int (*unmount) (struct dfs_filesystem* fs);
int (*open) (struct dfs_fd* fd);
......
......@@ -206,13 +206,21 @@ int dfs_mount(const char* device_name, const char* path,
int index;
/* open specific device */
dev_id = rt_device_find(device_name);
if (dev_id == RT_NULL)
{
/* no this device */
rt_set_errno(-DFS_STATUS_ENODEV);
return -1;
}
if (device_name != RT_NULL)
{
dev_id = rt_device_find(device_name);
if (dev_id == RT_NULL)
{
/* no this device */
rt_set_errno(-DFS_STATUS_ENODEV);
return -1;
}
}
else
{
/* which is a non-device filesystem mount */
dev_id = RT_NULL;
}
/* find out specific filesystem */
dfs_lock();
......@@ -289,11 +297,12 @@ int dfs_mount(const char* device_name, const char* path,
/* release filesystem_table lock */
dfs_unlock();
/* open device, but do not check the status of device */
rt_device_open(fs->dev_id, RT_DEVICE_OFLAG_RDWR);
/* open device, but do not check the status of device */
if (dev_id != RT_NULL) rt_device_open(fs->dev_id, RT_DEVICE_OFLAG_RDWR);
if ( ops->mount == RT_NULL ) /* there is no mount implementation */
if (ops->mount == RT_NULL) /* there is no mount implementation */
{
if (dev_id != RT_NULL) rt_device_close(dev_id);
dfs_lock();
/* clear filesystem table entry */
rt_memset(fs, 0, sizeof(struct dfs_filesystem));
......@@ -303,19 +312,18 @@ int dfs_mount(const char* device_name, const char* path,
return -1;
}
/* call mount of this filesystem */
else if ( ops->mount(fs) < 0 )
else if (ops->mount(fs, rwflag, data) < 0)
{
/* mount failed */
dfs_lock();
/* close device */
rt_device_close(fs->dev_id);
if (dev_id != RT_NULL) rt_device_close(fs->dev_id);
/* mount failed */
dfs_lock();
/* clear filesystem table entry */
rt_memset(fs, 0, sizeof(struct dfs_filesystem));
dfs_unlock();
return -1;
return -1;
}
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册