diff options
| -rw-r--r-- | src/userprog/process.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/userprog/process.c b/src/userprog/process.c index 2b50edd..21ba48d 100644 --- a/src/userprog/process.c +++ b/src/userprog/process.c @@ -307,7 +307,7 @@ load (const char *file_name, void (**eip) (void), void **esp) unsigned argc = 0; /* Tokenize passed command in-place. */ - // esp_c still points to first character of passed command + // esp_cmd still points to first character of passed command char *token, *save_ptr; for (token = strtok_r (esp_cmd, " ", &save_ptr); token != NULL; token = strtok_r (NULL, " ", &save_ptr)) @@ -317,15 +317,15 @@ load (const char *file_name, void (**eip) (void), void **esp) file_name = esp_cmd; - /* Alignment for entries of argv. */ + /* argv entries are pointers so they need to be aligned to the pointer size. */ size_t psize = sizeof (char *); - size_t word_alignment = (cmd_len + psize) / psize; // next address to place pointer + size_t word_alignment = (cmd_len + psize) / psize; /* Write argv entries. */ char **esp_argv_entry = *esp; esp_argv_entry -= word_alignment + argc + 1; // +1 makes room for argv[argc] = NULL - char **esp_argv_first = esp_argv_entry; + char **esp_argv_first = esp_argv_entry; // save for later // esp_cmd points to first entry so write directly *esp_argv_entry = esp_cmd; @@ -334,11 +334,11 @@ load (const char *file_name, void (**eip) (void), void **esp) for (unsigned i = 0; i < argc - 1; i++) { // find next \0 in cmd while (*(++esp_cmd) != '\0') {} - *esp_argv_entry = esp_cmd + 1; + *esp_argv_entry = esp_cmd + 1; // point to next character esp_argv_entry++; } - char *** esp_argv = esp_argv_first; + char ***esp_argv = esp_argv_first; esp_argv--; *esp_argv = esp_argv_first; |
