add more options to filesystem mount function invoke.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@665 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong 2010-04-22 09:33:25 +00:00
parent c988a222ed
commit c4a21b4456
4 changed files with 33 additions and 21 deletions

View File

@ -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')

View File

@ -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;

View File

@ -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);

View File

@ -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)
{
/* close device */
if (dev_id != RT_NULL) rt_device_close(fs->dev_id);
/* mount failed */
dfs_lock();
/* close device */
rt_device_close(fs->dev_id);
/* clear filesystem table entry */
rt_memset(fs, 0, sizeof(struct dfs_filesystem));
dfs_unlock();
return -1;
return -1;
}
return 0;