Add in syscall hash helper functions for open_file struct: fd_hash and fd_less, w/ E

This commit is contained in:
sBubshait
2024-11-08 15:12:08 +00:00
parent b112824a64
commit 5bbe7a03c0
2 changed files with 28 additions and 0 deletions

View File

@@ -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.

View File

@@ -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 */