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