summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-02-23 18:24:46 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-02-23 18:24:46 +0100
commit8f14d369599ece9fdb9c0641e261e28d99f4c1c9 (patch)
tree25a15b3140b3b1c9a0932347cb5c6d2be9f23e9d /src
parentab83c9c8e73a6ed3d98691d615a378ccbc3e4888 (diff)
downloadpintos-8f14d369599ece9fdb9c0641e261e28d99f4c1c9.tar.gz
loft variable declarations
Diffstat (limited to 'src')
-rw-r--r--src/userprog/process.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/userprog/process.c b/src/userprog/process.c
index 84aea39..589b48b 100644
--- a/src/userprog/process.c
+++ b/src/userprog/process.c
@@ -295,17 +295,19 @@ load (const char *file_name, void (**eip) (void), void **esp)
goto done;
}
+ size_t cmd_len, word_alignment;
+ char *esp_cmd, **esp_argv_first, **esp_argv_entry, ***esp_argv;
+ int *esp_argc, argc = 0;
+
/* Copy passed command to start of user stack. */
- size_t cmd_len = strlen (file_name);
- char *esp_cmd = *esp;
+ cmd_len = strlen (file_name);
+ esp_cmd = *esp;
esp_cmd -= cmd_len + 1; // +1 makes room for '\0'
- for (size_t i = 0; i < cmd_len; i++) {
+ for (i = 0; i < cmd_len; i++) {
esp_cmd[i] = file_name[i];
}
esp_cmd[cmd_len] = '\0';
- unsigned argc = 0;
-
/* Tokenize passed command in-place. */
// esp_cmd still points to first character of passed command
char *token, *save_ptr;
@@ -319,29 +321,29 @@ load (const char *file_name, void (**eip) (void), void **esp)
/* 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;
+ word_alignment = (cmd_len + psize) / psize;
/* Write argv entries. */
- char **esp_argv_entry = *esp;
+ 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; // save for later
+ esp_argv_first = esp_argv_entry; // save for later
// esp_cmd points to first entry so write directly
*esp_argv_entry = esp_cmd;
esp_argv_entry++;
- for (unsigned i = 0; i < argc - 1; i++) {
+ for (i = 0; i < argc - 1; i++) {
// find next \0 in cmd
while (*(++esp_cmd) != '\0') {}
*esp_argv_entry = esp_cmd + 1; // point to next character
esp_argv_entry++;
}
- char ***esp_argv = esp_argv_first - 1;
+ esp_argv = esp_argv_first - 1;
*esp_argv = esp_argv_first;
- int *esp_argc = esp_argv - 1;
+ esp_argc = esp_argv - 1;
*esp_argc = argc;
*esp = esp_argc - 1; // return address