Implement file reading syscall and fix fd validation w/ S.
This commit is contained in:
@@ -211,7 +211,7 @@ syscall_read (int fd, void *buffer, unsigned size)
|
|||||||
{
|
{
|
||||||
/* Only console (fd = 0) or other files, not including STDOUT, (fd > 1) are
|
/* Only console (fd = 0) or other files, not including STDOUT, (fd > 1) are
|
||||||
allowed. */
|
allowed. */
|
||||||
if (fd < 0 && fd != STDOUT_FILENO)
|
if (fd < 0 || fd == STDOUT_FILENO)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
validate_user_pointer (buffer, size);
|
validate_user_pointer (buffer, size);
|
||||||
@@ -228,7 +228,14 @@ syscall_read (int fd, void *buffer, unsigned size)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Reading from a file. */
|
/* Reading from a file. */
|
||||||
return 0; // TODO: Implement Write to Files
|
struct open_file *file_info = fd_get_file (fd);
|
||||||
|
if (file_info == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
lock_acquire (&filesys_lock);
|
||||||
|
int bytes_written = file_read (file_info->file, buffer, size);
|
||||||
|
lock_release (&filesys_lock);
|
||||||
|
return bytes_written;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user