Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
script3r
GitHub Repository: script3r/os161
Path: blob/master/kern/syscall/__getcwd.c
2093 views
1
#include <types.h>
2
#include <lib.h>
3
#include <vfs.h>
4
#include <kern/iovec.h>
5
#include <uio.h>
6
#include <kern/fcntl.h>
7
#include <kern/errno.h>
8
#include <vnode.h>
9
#include <current.h>
10
#include <syscall.h>
11
12
int
13
sys___getcwd( userptr_t ubuf, size_t ulen, int *retval ) {
14
struct uio ruio;
15
struct iovec iov;
16
int err;
17
18
KASSERT( curthread != NULL );
19
KASSERT( curthread->td_proc != NULL );
20
21
//prepare the uio
22
uio_kinit(
23
&iov,
24
&ruio,
25
ubuf,
26
ulen,
27
0,
28
UIO_READ
29
);
30
31
//the given pointer lives in userland
32
ruio.uio_space = curthread->t_addrspace;
33
ruio.uio_segflg = UIO_USERSPACE;
34
35
//forward the call to vfs_getcwd
36
err = vfs_getcwd( &ruio );
37
if( err )
38
return err;
39
40
//set the return value to be the length of the
41
//data that was just read
42
*retval = ulen - ruio.uio_resid;
43
return 0;
44
}
45
46
47