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