Add in syscall hash helper functions for open_file struct: fd_hash and fd_less, w/ E
This commit is contained in:
@@ -13,6 +13,13 @@
|
|||||||
|
|
||||||
static struct lock filesys_lock;
|
static struct lock filesys_lock;
|
||||||
|
|
||||||
|
struct open_file
|
||||||
|
{
|
||||||
|
int fd; /* File Descriptor / Identifier */
|
||||||
|
struct file *file; /* Pointer to the associated file */
|
||||||
|
struct hash_elem elem; /* elem for a hash table */
|
||||||
|
};
|
||||||
|
|
||||||
static void syscall_handler (struct intr_frame *);
|
static void syscall_handler (struct intr_frame *);
|
||||||
|
|
||||||
/* A syscall_function is a function that receives up to 3 arguments, the
|
/* A syscall_function is a function that receives up to 3 arguments, the
|
||||||
@@ -239,6 +246,22 @@ syscall_close (int fd UNUSED)
|
|||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
fd_hash (const struct hash_elem *element, void *aux UNUSED)
|
||||||
|
{
|
||||||
|
return hash_int (hash_entry (element, struct open_file, elem)->fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
fd_less (const struct hash_elem *a_, const struct hash_elem *b_,
|
||||||
|
void *aux UNUSED)
|
||||||
|
{
|
||||||
|
struct open_file *a = hash_entry (a_, struct open_file, elem);
|
||||||
|
struct open_file *b = hash_entry (b_, struct open_file, elem);
|
||||||
|
|
||||||
|
return a->fd < b->fd;
|
||||||
|
}
|
||||||
|
|
||||||
/* Validates if a block of memory starting at PTR and of size SIZE bytes is
|
/* Validates if a block of memory starting at PTR and of size SIZE bytes is
|
||||||
fully contained within user virtual memory. Kills the thread (by calling
|
fully contained within user virtual memory. Kills the thread (by calling
|
||||||
thread_exit) if the memory is invalid. Otherwise, returns the PTR given.
|
thread_exit) if the memory is invalid. Otherwise, returns the PTR given.
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
#ifndef USERPROG_SYSCALL_H
|
#ifndef USERPROG_SYSCALL_H
|
||||||
#define USERPROG_SYSCALL_H
|
#define USERPROG_SYSCALL_H
|
||||||
|
|
||||||
|
#include <hash.h>
|
||||||
|
|
||||||
typedef int pid_t;
|
typedef int pid_t;
|
||||||
|
|
||||||
void syscall_init (void);
|
void syscall_init (void);
|
||||||
|
|
||||||
|
unsigned fd_hash (const struct hash_elem *element, void *aux);
|
||||||
|
bool fd_less (const struct hash_elem *a, const struct hash_elem *b, void *aux);
|
||||||
|
|
||||||
#endif /* userprog/syscall.h */
|
#endif /* userprog/syscall.h */
|
||||||
|
|||||||
Reference in New Issue
Block a user