From 79d1b7f24e9d21ae81714524c7921550cc643d8a Mon Sep 17 00:00:00 2001
From: Joshua Saxby <joshua.a.saxby@gmail.com>
Date: Sat, 30 Nov 2019 10:49:32 +0000
Subject: [PATCH] Implemented argument parsing

---
 userprog/parse_arguments.c | 8 +++++++-
 userprog/process.c         | 4 +++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/userprog/parse_arguments.c b/userprog/parse_arguments.c
index 71abd85..785058f 100644
--- a/userprog/parse_arguments.c
+++ b/userprog/parse_arguments.c
@@ -14,6 +14,12 @@ int parse_arguments(const char* command_line, char**argv) {
     printf("parse_arguments(): argv[0] = '%s'\n", argv[0]);
     argc++;
     // now, parse token-by-token for any additional arguments
-    // TODO: implementation!
+    char* token = strtok_r(NULL, " ", &state_pointer);
+    while (token != NULL) {
+        argv[argc] = token;
+        printf("parse_arguments(): argv[%d] = '%s'\n", argc, argv[argc]);
+        argc++;
+        token = strtok_r(NULL, " ", &state_pointer);
+    }
     return argc;
 }
diff --git a/userprog/process.c b/userprog/process.c
index ce72cf2..34c5aa6 100644
--- a/userprog/process.c
+++ b/userprog/process.c
@@ -241,7 +241,9 @@ load (const char *command, void (**eip) (void), void **esp)
   strlcpy(command_copy, command, 255);
   printf("load(): command_copy = '%s'\n", command_copy);
   int argc = parse_arguments(command_copy, argv);
-  printf("load(): argv[0] = '%s'\n", argv[0]);
+  for (int i = 0; i < argc; i++) {
+    printf("load(): argv[%d] = '%s'\n", i, argv[i]);
+  }
   char* file_name = argv[0]; // file name is always argument 0
 
   /* Allocate and activate page directory. */
-- 
GitLab