Exemplo n.º 1
0
static int _msh_exec_cmd(char *cmd, rt_size_t length, int *retp)
{
    int argc;
    int cmd0_size = 0;
    cmd_function_t cmd_func;
    char *argv[RT_FINSH_ARG_MAX];

    RT_ASSERT(cmd);
    RT_ASSERT(retp);

    /* find the size of first command */
    while ((cmd[cmd0_size] != ' ' && cmd[cmd0_size] != '\t') && cmd0_size < length)
        cmd0_size ++;
    if (cmd0_size == 0)
        return -RT_ERROR;

    cmd_func = msh_get_cmd(cmd, cmd0_size);
    if (cmd_func == RT_NULL)
        return -RT_ERROR;

    /* split arguments */
    memset(argv, 0x00, sizeof(argv));
    argc = msh_split(cmd, length, argv);
    if (argc == 0)
        return -RT_ERROR;

    /* exec this command */
    *retp = cmd_func(argc, argv);
    return 0;
}
Exemplo n.º 2
0
int msh_exec(char* cmd, rt_size_t length)
{
    int argc;
    char *argv[RT_FINSH_ARG_MAX];
    int cmd0_size = 0;
    cmd_function_t cmd_func;

	/* strim the beginning of command */
    while(*cmd  == ' ' || *cmd == '\t'){cmd++; length--;}
	/* find the size of first command */
    while ((cmd[cmd0_size] != ' ' && cmd[cmd0_size] != '\t') && cmd0_size < length)
        cmd0_size ++;
    if (cmd0_size == 0) return -1; /* no command found */

    /* try to get built-in command */
    cmd_func = msh_get_cmd(cmd, cmd0_size);
    if (cmd_func == RT_NULL)
    {
#ifdef RT_USING_MODULE
        msh_exec_module(cmd, length);
#else
        argv[0] = cmd;
        while(*cmd != ' ')
        {
            if (*cmd == 0) break;
            cmd++;
        }
        if (*cmd == ' ') *cmd = 0;
        rt_kprintf("%s: command not found.\n", argv[0]);
#endif
        return -1;
    }

    /* split arguments */
    memset(argv, 0x00, sizeof(argv));
    argc = msh_split(cmd, length, argv);
    if (argc == 0) return -1;

    /* exec this command */
    return cmd_func(argc, argv);
}