diff options
Diffstat (limited to 'filesystem/dfs/src/dfs_init.c')
| -rw-r--r-- | filesystem/dfs/src/dfs_init.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/filesystem/dfs/src/dfs_init.c b/filesystem/dfs/src/dfs_init.c new file mode 100644 index 0000000000..5b72da71ed --- /dev/null +++ b/filesystem/dfs/src/dfs_init.c @@ -0,0 +1,92 @@ +/* ++------------------------------------------------------------------------------ +| Project : Device Filesystem ++------------------------------------------------------------------------------ +| Copyright 2004, 2005 www.fayfayspace.org. +| All rights reserved. +|------------------------------------------------------------------------------ +| File : dfs.c, the implementation of Device FileSystem +|------------------------------------------------------------------------------ +| Chang Logs: +| Date Author Notes +| 2002-12-31 ffxz The first version. +| 2005-01-22 ffxz Clean up the code. ++------------------------------------------------------------------------------ +*/ +#include <dfs_def.h> +#include <dfs_config.h> + +#include <dfs_fs.h> +#include <dfs_raw.h> + +#include <string.h> + +/* Global variables */ +struct dfs_filesystem_operation* filesystem_operation_table[DFS_FILESYSTEM_TYPES_MAX + 1]; +struct dfs_filesystem filesystem_table[DFS_FILESYSTEMS_MAX + 1]; + +rt_sem_t filesystem_table_lock; +rt_sem_t filesystem_operation_table_lock; + +#ifdef RT_USING_WORKDIR +char working_directory[DFS_PATH_MAX + 1]; +rt_sem_t working_directory_lock; +#endif + +struct dfs_fd fd_table[DFS_FD_MAX + 1]; +rt_sem_t fd_table_lock; + +/* ++------------------------------------------------------------------------------ +| Function : dfs_init ++------------------------------------------------------------------------------ +| Description : Inits the Device Filesystem +| Parameters : null +| Returns : null ++------------------------------------------------------------------------------ +*/ +void dfs_init() +{ + int index; + + /* clear filesystem operations table */ + for (index = 0; index < DFS_FILESYSTEM_TYPES_MAX + 1; index++) + filesystem_operation_table[index] = RT_NULL; + + /* create filesystem operations table lock */ + filesystem_operation_table_lock = rt_sem_create("sem_fot", 1, RT_IPC_FLAG_FIFO); + + /* clear filesystem table */ + for (index = 0; index < DFS_FILESYSTEMS_MAX + 1; index++) + { + rt_memset(filesystem_table[index].path, 0, DFS_PATH_MAX + 1); + + filesystem_table[index].ops = RT_NULL; + filesystem_table[index].dev_id = 0; + filesystem_table[index].block_id = 0; + filesystem_table[index].data = RT_NULL; + } + + /* create filesystem table lock */ + filesystem_table_lock = rt_sem_create("sem_fst", 1, RT_IPC_FLAG_FIFO); + +#ifdef RT_USING_WORKDIR + /* set current working directory */ + strcpy(working_directory, "/"); + working_directory_lock = rt_sem_create("sem_wd", 1, RT_IPC_FLAG_FIFO); +#endif + + /* clean fd table */ + for ( index = 0; index < DFS_FD_MAX; index ++) + { + rt_memset(&fd_table[index], 0, sizeof(struct dfs_fd)); + } + + /* create fd table lock */ + fd_table_lock = rt_sem_create("sem_fdt", 1, RT_IPC_FLAG_FIFO); + +#if defined(RT_USING_FINSH) && !defined(FINSH_USING_SYMTAB) + dfs_export_finsh(); +#endif +} + |
