From e2b818c580f0b950085d3be07d94726dc1ffe47e Mon Sep 17 00:00:00 2001 From: unknown <abinade2@illinois.edu> Date: Sat, 28 Apr 2018 22:55:34 -0500 Subject: [PATCH] Exiting shells, parse command fixed --- student-distrib/proc.c | 6 ++++-- student-distrib/syscall.c | 28 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/student-distrib/proc.c b/student-distrib/proc.c index ae2267e..56a3644 100644 --- a/student-distrib/proc.c +++ b/student-distrib/proc.c @@ -158,7 +158,8 @@ int32_t parse_cmd(const uint8_t* command, uint8_t* parsed_cmd, uint8_t (*argv)[M //copy command to parsed_cmd for (i = 0; i < (end - start); i++) - parsed_cmd[i] = command[i+start]; + if(command[i+start] != 0x0D) //check for \n + parsed_cmd[i] = command[i+start]; command_length = strlen((int8_t*)command); @@ -195,7 +196,8 @@ int32_t parse_cmd(const uint8_t* command, uint8_t* parsed_cmd, uint8_t (*argv)[M //copy argument to return array for (i = 0; i < (end - start); i++) - argv[j][i] = command[i+start]; + if(command[i+start] != 0x0D) //check for \n + argv[j][i] = command[i+start]; } diff --git a/student-distrib/syscall.c b/student-distrib/syscall.c index b5085cc..3d531f8 100644 --- a/student-distrib/syscall.c +++ b/student-distrib/syscall.c @@ -16,7 +16,7 @@ int32_t halt (uint8_t status){ pcb_t* pcb_cur = terminal[running_terminal].pcb; //pcb_t* pcb_cur = current_pcb(); - printf("[halt] running_terminal = %d\n", running_terminal); + // printf("[halt] running_terminal = %d\n", running_terminal); pcb_t* pcb_prev = pcb_cur->parent_pcb; @@ -31,13 +31,13 @@ int32_t halt (uint8_t status){ if(terminal[running_terminal].terminal_prog_count > 0) { - total_prog_count--; - terminal[pcb_cur->running_terminal].terminal_prog_count--; + clear_pid(pcb_cur->pid); + total_prog_count--; + terminal[pcb_cur->running_terminal].terminal_prog_count--; } - if (/*pcb_cur->pid == pcb_cur->parent_pid*/ pcb_cur->shell_flag == 1) + if(terminal[running_terminal].terminal_prog_count == 0) { - clear_pid(pcb_cur->pid); printf("[halt] executing new shell...\n"); execute((uint8_t *)"shell"); } @@ -97,15 +97,8 @@ int32_t execute(const uint8_t* command){ if(strlen(command) == 1) return 0; - printf("[EXE] running_terminal = %d\n", running_terminal); - printf("[EXE] (command) = %s\n", command); - - // if cpu reaches its maximum control, abort - if( total_prog_count >= MAX_PROCESS) - { - printf("[execute] Reached maximum number of processes %d\n", MAX_PROCESS); - return 0; - } + // printf("[EXE] running_terminal = %d\n", running_terminal); + // printf("[EXE] (command) = %s\n", command); //------------------ 0 : Parse args ---------------------------------------- @@ -134,6 +127,13 @@ int32_t execute(const uint8_t* command){ //------------------ 1: Executable check ----------------------------------- + // if cpu reaches its maximum control, abort + if( total_prog_count >= MAX_PROCESS) + { + printf("[execute] Reached maximum number of processes %d\n", MAX_PROCESS); + return 0; + } + dentry_t dentry; uint8_t buf[4]; uint32_t entry_point; -- GitLab