Skip to content
Snippets Groups Projects
Commit f7df3749 authored by a2-stratford's avatar a2-stratford
Browse files

Merge branch 'Alex/27-implement-open-system-call' into Test/syscall-test-branch

parents 1b434127 ec0c4f29
No related branches found
No related tags found
No related merge requests found
......@@ -63,7 +63,7 @@ userprog_SRC += userprog/syscall.c # System call handler.
userprog_SRC += userprog/gdt.c # GDT initialization.
userprog_SRC += userprog/tss.c # TSS management.
userprog_SRC += userprog/syscall_exec.c
userprog_SRC += userprog/syscall_exit.c
userprog_SRC += userprog/syscall_open.c
userprog_SRC += userprog/syscall_halt.c
userprog_SRC += userprog/syscall_wait.c
userprog_SRC += userprog/syscall_create.c
......
......@@ -58,9 +58,6 @@ syscall_handler (struct intr_frame *f UNUSED)
case SYSCALL_HALT:
syscall_halt(f);
break;
case SYSCALL_EXIT:
syscall_exit(f);
break;
case SYSCALL_EXEC:
syscall_exec(f);
break;
......@@ -70,6 +67,9 @@ syscall_handler (struct intr_frame *f UNUSED)
case SYSCALL_CREATE:
syscall_create(f);
break;
case SYSCALL_OPEN:
syscall_open(f);
break;
default:
printf ("WARNING: Invalid Syscall (%d)\n", syscall_number);
thread_exit ();
......
/*
* Opens the file called file. Returns a nonnegative integer handle called a
* "file descriptor" (fd), or -1 if the file could not be opened.
*
* Authored by Alex Stratford
*/
#include "system_calls.h"
#include "threads/interrupt.h" // Dependency for intr_frame struct
#include "filesys/file.h" // Dependency for file_open and file struct
void syscall_open(struct intr_frame *f) {
struct file_map *f_map; // Create f_map struct instance
// pop off first int argument from interrupt frame
f_map->file_descriptor = *((int*)f->esp + 1);
// Described in system_calls.h, opens the file
f_map->file = file_open(f_map->file_descriptor);
if (f_map->file == NULL) // Checking if file is empty or non-existent
f->eax = -1; // Returning a failure state
f->eax = f_map->file_descriptor; // Returning the file descriptor
}
\ No newline at end of file
#include "threads/interrupt.h"
#include "lib/kernel/list.h" // Added due to dependency for list_elem
#include "filesys/file.h" // Added due to dependency for file
// Maps file descriptions to the associated file structure
struct file_map
{
struct list_elem list_element; // Defined in list.h
int file_descriptor;
struct file *file; // Defined in file.c
};
/*
* Terminates Pintos by calling shutdown_power_off()
......@@ -6,14 +18,6 @@
*/
void syscall_halt(struct intr_frame *f);
/*
* Terminates the current user program, returning status to the kernel. If the
* process's parent waits for it (see below), this is the status that will be
* returned. Conventionally, a status of 0 indicates success and nonzero
* values indicate errors.
*/
void syscall_exit(struct intr_frame *status);
/*
* Runs the executable whose name is given in cmd_line, passing any given
* arguments, and returns the new process's program id (pid). Must return pid
......@@ -30,6 +34,7 @@ void syscall_exec(struct intr_frame *f);
void syscall_wait(struct intr_frame *f);
/*
<<<<<<< HEAD
* Creates a new file called file initially initial_size bytes in size.
* Returns true if successful, false otherwise.
*/
......@@ -39,3 +44,9 @@ void syscall_create(struct intr_frame *f);
* NOTE: There are more system calls implemented by Pintos but we are not
* implementing them because the assignment brief does not ask of it.
*/
=======
* Opens the file called file. Returns a nonnegative integer handle called a
* "file descriptor" (fd), or -1 if the file could not be opened.
*/
void syscall_open(struct intr_frame *f);
>>>>>>> Alex/27-implement-open-system-call
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment