summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
author[email protected] <[email protected]>2010-12-09 00:07:03 +0000
committer[email protected] <[email protected]>2010-12-09 00:07:03 +0000
commitf8397a16933cb6471857049703e9146f29874fe0 (patch)
tree23cbda61560723673d6a95673205dfcebbb2c780 /components
parent46914144c9f1ae3a67f4bf9d5387bda620ad4ba8 (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.c2
-rw-r--r--components/dfs/src/dfs_posix.c22
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