diff --git a/apps/shell/src/main.c b/apps/shell/src/main.c index a5e553a9e99136d248e3be49264bd9099a8d660a..8401c0ca52f4f6e13174e4d855452f13c4270e8b 100644 --- a/apps/shell/src/main.c +++ b/apps/shell/src/main.c @@ -35,7 +35,7 @@ #include "semaphore.h" #include "securec.h" #include "unistd.h" - +#include ShellCB *g_shellCB = NULL; @@ -88,11 +88,44 @@ OUT: return ret; } -int main() +static int DoShellExec(char **argv) +{ + int i, j; + int len = 0; + int ret = SH_NOK; + char *cmdLine = NULL; + + for (i = 0; argv[i]; i++) { + len += strlen(argv[i]); + } + len += i + 1; + cmdLine = (char *)malloc(len); + if (!cmdLine) { + return ret; + } + memset_s(cmdLine, len, 0, len); + + for(j = 0; j < i; j++) { + strcat_s(cmdLine, len, argv[j]); + strcat_s(cmdLine, len, " "); + } + + cmdLine[len - 2] = '\0'; + ret = syscall(__NR_shellexec, argv[0], cmdLine); + free(cmdLine); + return ret; +} + +int main(int argc, char **argv) { int ret = SH_NOK; ShellCB *shellCB = NULL; + if (!strcmp(argv[0], "shell") && argv[1]) { + ret = DoShellExec(argv + 1); + return ret; + } + setbuf(stdout, NULL); shellCB = (ShellCB *)malloc(sizeof(ShellCB));