diff options
| author | [email protected] <[email protected]> | 2010-12-09 00:07:03 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2010-12-09 00:07:03 +0000 |
| commit | f8397a16933cb6471857049703e9146f29874fe0 (patch) | |
| tree | 23cbda61560723673d6a95673205dfcebbb2c780 /components | |
| parent | 46914144c9f1ae3a67f4bf9d5387bda620ad4ba8 (diff) | |
fix mkdir issue; add cd command in finsh.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1185 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components')
| -rw-r--r-- | components/dfs/src/dfs.c | 2 | ||||
| -rw-r--r-- | components/dfs/src/dfs_posix.c | 22 |
2 files changed, 19 insertions, 5 deletions
diff --git a/components/dfs/src/dfs.c b/components/dfs/src/dfs.c index 901e19823b..facad6db64 100644 --- a/components/dfs/src/dfs.c +++ b/components/dfs/src/dfs.c @@ -28,7 +28,7 @@ struct dfs_filesystem filesystem_table[DFS_FILESYSTEMS_MAX]; static struct rt_mutex fslock;
#ifdef DFS_USING_WORKDIR
-char working_directory[DFS_PATH_MAX];
+char working_directory[DFS_PATH_MAX] = {"/"};
#endif
#ifdef DFS_USING_STDIO
diff --git a/components/dfs/src/dfs_posix.c b/components/dfs/src/dfs_posix.c index 436230d849..4241bbb774 100644 --- a/components/dfs/src/dfs_posix.c +++ b/components/dfs/src/dfs_posix.c @@ -355,6 +355,8 @@ int mkdir (const char *path, mode_t mode) int result;
fd = fd_new();
+ if (fd == -1) { rt_kprintf("no fd\n"); return -1; }
+
d = fd_get(fd);
result = dfs_file_open(d, path, DFS_O_DIRECTORY | DFS_O_CREAT);
@@ -362,10 +364,11 @@ int mkdir (const char *path, mode_t mode) if (result < 0)
{
rt_set_errno(result);
+ fd_put(d);
return -1;
}
- fd_put(d);
+ dfs_file_close(d);
fd_put(d);
return 0;
}
@@ -597,7 +600,15 @@ int chdir(const char *path) char* fullpath;
DIR* d;
- if(path == RT_NULL || rt_strlen(path) > DFS_PATH_MAX)
+ if(path == RT_NULL)
+ {
+ dfs_lock();
+ rt_kprintf("%s\n", working_directory);
+ dfs_unlock();
+ return 0;
+ }
+
+ if (rt_strlen(path) > DFS_PATH_MAX)
return -1;
fullpath = dfs_normalize_path(NULL, path);
@@ -625,6 +636,9 @@ int chdir(const char *path) return 0;
}
+#ifdef RT_USING_FINSH
+FINSH_FUNCTION_EXPORT_ALIAS(chdir, cd, change current working directory);
+#endif
#endif
/**
@@ -639,9 +653,9 @@ int chdir(const char *path) char *getcwd(char *buf, size_t size)
{
#ifdef DFS_USING_WORKDIR
- dfs_lock();
+ rt_enter_critical();
rt_strncpy(buf, working_directory, size);
- dfs_unlock();
+ rt_exit_critical();
#else
rt_kprintf("WARNING: not support working directory\n");
#endif
|
