diff options
| author | bernard.xiong <[email protected]> | 2010-04-22 09:33:25 +0000 |
|---|---|---|
| committer | bernard.xiong <[email protected]> | 2010-04-22 09:33:25 +0000 |
| commit | c4a21b445684bf39f39ece3e1a4d069ce5a08f41 (patch) | |
| tree | 1459ca790ff3b0439964069b24fba4c97e1b5d56 | |
| parent | c988a222ed97c399dd83ec32f92ce4df294dbebb (diff) | |
add more options to filesystem mount function invoke.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@665 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | components/SConscript | 8 | ||||
| -rw-r--r-- | components/dfs/filesystems/elmfat/dfs_elm.c | 2 | ||||
| -rw-r--r-- | components/dfs/include/dfs_fs.h | 2 | ||||
| -rw-r--r-- | components/dfs/src/dfs_fs.c | 42 |
4 files changed, 33 insertions, 21 deletions
diff --git a/components/SConscript b/components/SConscript index f8b5513c52..46ae96cfb3 100644 --- a/components/SConscript +++ b/components/SConscript @@ -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')
diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index f7289fcadc..3112d30bc4 100644 --- a/components/dfs/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/filesystems/elmfat/dfs_elm.c @@ -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;
diff --git a/components/dfs/include/dfs_fs.h b/components/dfs/include/dfs_fs.h index 2431765856..c31d9585a2 100644 --- a/components/dfs/include/dfs_fs.h +++ b/components/dfs/include/dfs_fs.h @@ -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);
diff --git a/components/dfs/src/dfs_fs.c b/components/dfs/src/dfs_fs.c index a20b9b26c0..9745ea0c41 100644 --- a/components/dfs/src/dfs_fs.c +++ b/components/dfs/src/dfs_fs.c @@ -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;
|
