@@ -16,8 +16,8 @@ int cmd_help() {
1616 printf ("commands\n" );
1717 printf (" > help print the available commands\n" );
1818 printf (" > exit kill the current shell\n" );
19- printf (" > run ls print list of files \n" );
20- printf (" > run <filename> [arg1]... execute available program \n" );
19+ printf (" > <filename> [arg1]... execute executable program \n" );
20+ printf (" > ls -h example to show ls usage \n" );
2121 return 0 ;
2222}
2323
@@ -31,22 +31,20 @@ static char *copy_arg(char *dst, char *src) {
3131 return dst ;
3232}
3333
34- int cmd_run () {
34+ int cmd_run (char * cmd ) {
3535 char * argv [PROCESS_MAX_ARGC ];
3636 char argv_data [PROCESS_MAX_ARGC ][PROCESS_MAX_ARG_LEN ] = {0 };
3737
3838 char * token ;
3939 int argc = 0 ;
40+ argv [argc ] = copy_arg (argv_data [argc ], cmd ); // executable filename
41+ argc ++ ;
4042 while ((token = strtok (NULL , COMMAND_DELIM )) != NULL && argc < PROCESS_MAX_ARGC - 1 ) {
4143 argv [argc ] = copy_arg (argv_data [argc ], token );
4244 argc ++ ;
4345 }
4446 argv [argc ] = NULL ;
45- if (argc == 0 ) {
46- printf ("invalid syntax\n" );
47- printf ("usage: run <filename> [arg1...]\n" );
48- return -2 ;
49- }
47+
5048 char * filename = argv [0 ];
5149 int pid = spawnv (filename , argv );
5250 if (pid < 0 ) {
@@ -73,11 +71,11 @@ void handle_command(char *full_cmd) {
7371 last_status_code = cmd_help ();
7472 } else if (strcmp (cmd , "exit" )== 0 ) {
7573 last_status_code = cmd_exit ();
76- } else if (strcmp (cmd , "run" )== 0 ) {
77- last_status_code = cmd_run (cmd );
7874 } else {
79- printf ("'%s' command not found\n" , cmd );
80- last_status_code = 404 ;
75+ last_status_code = cmd_run (cmd );
76+ if (last_status_code < 0 ) {
77+ printf ("failed to run '%s' command\n" , cmd );
78+ }
8179 }
8280}
8381
0 commit comments