Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
1f8a0668
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1f8a0668
编写于
1月 03, 2014
作者:
B
bernard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Finsh] Add features to execute module.
上级
bd8fc8b2
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
364 addition
and
290 deletion
+364
-290
components/finsh/msh.c
components/finsh/msh.c
+364
-290
未找到文件。
components/finsh/msh.c
浏览文件 @
1f8a0668
...
@@ -24,13 +24,18 @@
...
@@ -24,13 +24,18 @@
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
* 2013-03-30 Bernard the first verion for FinSH
* 2013-03-30 Bernard the first verion for finsh
* 2014-01-03 Bernard msh can execute module.
*/
*/
#include "msh.h"
#include "msh.h"
#include <finsh.h>
#include <finsh.h>
#include <shell.h>
#include <shell.h>
#ifdef RT_USING_DFS
#include <dfs_posix.h>
#endif
#define RT_FINSH_ARG_MAX 10
#define RT_FINSH_ARG_MAX 10
typedef
int
(
*
cmd_function_t
)(
int
argc
,
char
**
argv
);
typedef
int
(
*
cmd_function_t
)(
int
argc
,
char
**
argv
);
...
@@ -171,6 +176,72 @@ static cmd_function_t msh_get_cmd(char *cmd)
...
@@ -171,6 +176,72 @@ static cmd_function_t msh_get_cmd(char *cmd)
return
cmd_func
;
return
cmd_func
;
}
}
#if defined(RT_USING_MODULE) && defined(RT_USING_DFS)
int
msh_exec_module
(
int
argc
,
char
**
argv
)
{
int
fd
=
-
1
;
char
*
pg_name
;
int
length
,
cmd_length
;
if
(
argc
==
0
)
return
-
RT_ERROR
;
/* no command */
/* get name length */
cmd_length
=
rt_strlen
(
argv
[
0
]);
length
=
cmd_length
+
32
;
pg_name
=
(
char
*
)
rt_malloc
(
length
);
if
(
pg_name
==
RT_NULL
)
return
-
RT_ENOMEM
;
/* no memory */
if
(
strstr
(
argv
[
0
],
".mo"
)
!=
RT_NULL
||
strstr
(
argv
[
0
],
".MO"
)
!=
RT_NULL
)
{
/* try to open program */
if
(
fd
<
0
)
{
rt_snprintf
(
pg_name
,
length
-
1
,
"%s"
,
argv
[
0
]);
fd
=
open
(
pg_name
,
O_RDONLY
,
0
);
}
/* search in /bin path */
if
(
fd
<
0
)
{
rt_snprintf
(
pg_name
,
length
-
1
,
"/bin/%s"
,
argv
[
0
]);
fd
=
open
(
pg_name
,
O_RDONLY
,
0
);
}
}
else
{
/* add .mo and open program */
/* try to open program */
if
(
fd
<
0
)
{
rt_snprintf
(
pg_name
,
length
-
1
,
"%s.mo"
,
argv
[
0
]);
fd
=
open
(
pg_name
,
O_RDONLY
,
0
);
}
/* search in /bin path */
if
(
fd
<
0
)
{
rt_snprintf
(
pg_name
,
length
-
1
,
"/bin/%s.mo"
,
argv
[
0
]);
fd
=
open
(
pg_name
,
O_RDONLY
,
0
);
}
}
if
(
fd
>=
0
)
{
/* found program */
close
(
fd
);
rt_module_open
(
pg_name
);
}
else
{
rt_kprintf
(
"%s: program not found.
\n
"
,
argv
[
0
]);
}
rt_free
(
pg_name
);
return
0
;
}
#endif
int
msh_exec
(
char
*
cmd
,
rt_size_t
length
)
int
msh_exec
(
char
*
cmd
,
rt_size_t
length
)
{
{
int
argc
;
int
argc
;
...
@@ -186,7 +257,11 @@ int msh_exec(char* cmd, rt_size_t length)
...
@@ -186,7 +257,11 @@ int msh_exec(char* cmd, rt_size_t length)
cmd_func
=
msh_get_cmd
(
argv
[
0
]);
cmd_func
=
msh_get_cmd
(
argv
[
0
]);
if
(
cmd_func
==
RT_NULL
)
if
(
cmd_func
==
RT_NULL
)
{
{
rt_kprintf
(
"%s: command not found
\n
"
,
argv
[
0
]);
#ifdef RT_USING_MODULE
msh_exec_module
(
argc
,
argv
);
#else
rt_kprintf
(
"%s: command not found.
\n
"
,
argv
[
0
]);
#endif
return
-
1
;
return
-
1
;
}
}
...
@@ -208,7 +283,6 @@ static int str_common(const char *str1, const char *str2)
...
@@ -208,7 +283,6 @@ static int str_common(const char *str1, const char *str2)
}
}
#ifdef RT_USING_DFS
#ifdef RT_USING_DFS
#include <dfs_posix.h>
void
msh_auto_complete_path
(
char
*
path
)
void
msh_auto_complete_path
(
char
*
path
)
{
{
DIR
*
dir
;
DIR
*
dir
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录