diff options
Diffstat (limited to 'src/libdiskfs/fsys.c')
-rw-r--r-- | src/libdiskfs/fsys.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/libdiskfs/fsys.c b/src/libdiskfs/fsys.c new file mode 100644 index 00000000..3875e50b --- /dev/null +++ b/src/libdiskfs/fsys.c @@ -0,0 +1,114 @@ +#include <u.h> +#include <libc.h> +#include <thread.h> +#include <sunrpc.h> +#include <nfs3.h> +#include <diskfs.h> + +int allowall; + +static Fsys *(*opentab[])(Disk*) = +{ + fsysopenffs, + fsysopenkfs, + fsysopenext2, + fsysopenfat, +}; + +Fsys* +fsysopen(Disk *disk) +{ + int i; + Fsys *fsys; + + for(i=0; i<nelem(opentab); i++) + if((fsys = (*opentab[i])(disk)) != nil) + return fsys; + return nil; +} + +Block* +fsysreadblock(Fsys *fsys, u64int blockno) +{ + if(!fsys->_readblock){ + werrstr("no read dispatch function"); + return nil; + } + return (*fsys->_readblock)(fsys, blockno); +} + +int +fsyssync(Fsys *fsys) +{ + if(disksync(fsys->disk) < 0) + return -1; + if(!fsys->_sync) + return 0; + return (*fsys->_sync)(fsys); +} + +void +fsysclose(Fsys *fsys) +{ + if(!fsys->_close){ + fprint(2, "no fsysClose\n"); + abort(); + } + (*fsys->_close)(fsys); +} + +Nfs3Status +fsysroot(Fsys *fsys, Nfs3Handle *h) +{ + if(!fsys->_root) + return Nfs3ErrNxio; + return (*fsys->_root)(fsys, h); +} + +Nfs3Status +fsyslookup(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, char *name, Nfs3Handle *nh) +{ + if(!fsys->_lookup) + return Nfs3ErrNxio; + return (*fsys->_lookup)(fsys, au, h, name, nh); +} + +Nfs3Status +fsysgetattr(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, Nfs3Attr *attr) +{ + if(!fsys->_getattr) + return Nfs3ErrNxio; + return (*fsys->_getattr)(fsys, au, h, attr); +} + +Nfs3Status +fsysreaddir(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, u32int count, u64int cookie, uchar **e, u32int *ne, u1int *peof) +{ + if(!fsys->_readdir) + return Nfs3ErrNxio; + return (*fsys->_readdir)(fsys, au, h, count, cookie, e, ne, peof); +} + +Nfs3Status +fsysreadfile(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, u32int count, u64int offset, uchar **data, u32int *pcount, uchar *peof) +{ + if(!fsys->_readfile) + return Nfs3ErrNxio; + return (*fsys->_readfile)(fsys, au, h, count, offset, data, pcount, peof); +} + +Nfs3Status +fsysreadlink(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, char **plink) +{ + if(!fsys->_readlink) + return Nfs3ErrNxio; + return (*fsys->_readlink)(fsys, au, h, plink); +} + +Nfs3Status +fsysaccess(Fsys *fsys, SunAuthUnix *au, Nfs3Handle *h, u32int want, u32int *got, Nfs3Attr *attr) +{ + if(!fsys->_access) + return Nfs3ErrNxio; + return (*fsys->_access)(fsys, au, h, want, got, attr); +} |