mirror of
https://github.com/drasko/codezero.git
synced 2026-09-28 08:10:21 +02:00
Still towards close/flush.
This commit is contained in:
@@ -152,28 +152,6 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sys_close(l4id_t sender, int fd)
|
|
||||||
{
|
|
||||||
struct tcb *task;
|
|
||||||
|
|
||||||
/* Get the task */
|
|
||||||
BUG_ON(!(task = find_task(sender)));
|
|
||||||
|
|
||||||
/* Validate file descriptor */
|
|
||||||
if (fd < 0 || fd > TASK_OFILES_MAX) {
|
|
||||||
l4_ipc_return(-EBADF);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (!task->fd[fd]) {
|
|
||||||
l4_ipc_return(-EBADF);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finish I/O on file */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sys_mkdir(l4id_t sender, const char *pathname, unsigned int mode)
|
int sys_mkdir(l4id_t sender, const char *pathname, unsigned int mode)
|
||||||
{
|
{
|
||||||
struct tcb *task;
|
struct tcb *task;
|
||||||
@@ -271,6 +249,13 @@ int pager_sys_read(l4id_t sender, unsigned long vnum, unsigned long f_offset,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This can be solely called by the pager and is not the posix write call.
|
||||||
|
* That call is in the pager. This writes the dirty pages of a file
|
||||||
|
* back to disk via vfs.
|
||||||
|
*
|
||||||
|
* The buffer must be contiguous by page, if npages > 1.
|
||||||
|
*/
|
||||||
int pager_sys_write(l4id_t sender, unsigned long vnum, unsigned long f_offset,
|
int pager_sys_write(l4id_t sender, unsigned long vnum, unsigned long f_offset,
|
||||||
unsigned long npages, void *pagebuf)
|
unsigned long npages, void *pagebuf)
|
||||||
{
|
{
|
||||||
|
|||||||
+26
-2
@@ -257,14 +257,38 @@ int write_file_pages(struct vm_file *vmfile, unsigned long pfn_start,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_flush_file_pages(struct vm_file *vmfile)
|
int flush_file_pages(struct vm_file *vmfile)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int sys_close(void)
|
int sys_close(l4id_t sender, int fd)
|
||||||
{
|
{
|
||||||
|
struct tcb *task;
|
||||||
|
struct vm_file *f;
|
||||||
|
int retval, err;
|
||||||
|
|
||||||
|
/* Get the task */
|
||||||
|
BUG_ON(!(task = find_task(sender)));
|
||||||
|
|
||||||
|
/* Check fd validity */
|
||||||
|
if (fd < 0 || fd > TASK_FILES_MAX || !task->fd[fd].vmfile) {
|
||||||
|
retval = -EBADF;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finish I/O on file */
|
||||||
|
f = task->fd[fd].vmfile;
|
||||||
|
if ((err = flush_file_pages(f)) < 0) {
|
||||||
|
retval = err;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
l4_ipc_return(retval);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sys_flush(void)
|
int sys_flush(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user