fix mkdir issue; add cd command in finsh.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1185 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong@gmail.com 2010-12-09 00:07:03 +00:00
parent 46914144c9
commit f8397a1693
2 changed files with 19 additions and 5 deletions

View File

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

View File

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