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; }
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); }