From 3548502e08ffaca2e5ef53c36e7ea42757bb361c Mon Sep 17 00:00:00 2001 From: Alex Stratford <alexander3.stratford@live.uwe.ac.uk> Date: Wed, 4 Dec 2019 00:59:03 +0000 Subject: [PATCH] Improved file_search function line 80..106: Added comments and improved functionality --- userprog/syscall.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/userprog/syscall.c b/userprog/syscall.c index e08f21a..a74a83a 100644 --- a/userprog/syscall.c +++ b/userprog/syscall.c @@ -4,7 +4,8 @@ #include "system_calls.h" #include "threads/interrupt.h" #include "threads/thread.h" -#include "lib/kernel/list.h" // Dependencies for +// Dependency for list_elem struct and list_next / is_tail functions +#include "lib/kernel/list.h" /* System call numbers. */ @@ -82,15 +83,30 @@ syscall_handler (struct intr_frame *f UNUSED) static struct list *file_list; -// Goes through all the files in the file_list and looks for the +/* Goes through all the files in the file_list and looks for the given file + * Descriptor. + */ void file_search(struct file_map *f) { + // Creates a struct to hold the currently checked file struct file_map *curr_file; + // Creates the list element to test for end of list struct list_elem *list_element; *list_element = *list_begin(file_list); + + // Loop to check each file in the linked list in turn while ((curr_file->file_descriptor != f->file_descriptor) && - (is_tail(curr_file->list_element) == false) + (is_tail(list_element) == false) ) { - *list_element = curr_file->list_element; + // Swaps the list_element for the next one in place list_next(list_element); } + // Copies list_element to current file + curr_file->list_element = *list_element; + // Checks if file has been found returning NULL if not or the file if it has + if (curr_file->file_descriptor != f->file_descriptor) { + f->file = NULL; + } + else { + f = curr_file; + } } \ No newline at end of file -- GitLab