diskfs.h (2938B)
1 /* Copyright (c) Russ Cox, MIT; see src/libdiskfs/COPYRIGHT */ 2 3 AUTOLIB(diskfs) 4 5 typedef struct Block Block; 6 typedef struct Disk Disk; 7 typedef struct Fsys Fsys; 8 9 #ifndef _NFS3H_ /* in case sunrpc.h, nfs3.h are not included */ 10 typedef struct SunAuthUnix SunAuthUnix; 11 typedef struct Nfs3Attr Nfs3Attr; 12 typedef struct Nfs3Entry Nfs3Entry; 13 typedef struct Nfs3Handle Nfs3Handle; 14 typedef int Nfs3Status; 15 #endif 16 struct VtCache; 17 18 struct Disk 19 { 20 Block *(*_read)(Disk *disk, u32int count, u64int offset); 21 int (*_sync)(Disk*); 22 void (*_close)(Disk*); 23 void *priv; 24 }; 25 26 struct Block 27 { 28 Disk *disk; 29 u32int len; 30 uchar *data; 31 void (*_close)(Block*); 32 void *priv; 33 }; 34 35 struct Fsys 36 { 37 u32int blocksize; 38 u32int nblock; 39 char *type; 40 41 Disk *disk; 42 Block *(*_readblock)(Fsys *fsys, u64int blockno); 43 int (*_sync)(Fsys *fsys); 44 void (*_close)(Fsys *fsys); 45 46 Nfs3Status (*_root)(Fsys*, Nfs3Handle*); 47 Nfs3Status (*_access)(Fsys*, SunAuthUnix*, Nfs3Handle*, u32int, u32int*, Nfs3Attr*); 48 Nfs3Status (*_lookup)(Fsys*, SunAuthUnix*, Nfs3Handle*, char*, Nfs3Handle*); 49 Nfs3Status (*_getattr)(Fsys*, SunAuthUnix*, Nfs3Handle*, Nfs3Attr*); 50 Nfs3Status (*_readdir)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int cookie, uchar**, u32int*, uchar*); 51 Nfs3Status (*_readfile)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int offset, uchar**, u32int*, uchar*); 52 Nfs3Status (*_readlink)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char **link); 53 54 void *priv; 55 56 u64int (*fileblock)(Fsys *fsys, Nfs3Handle *h, u64int offset); 57 }; 58 59 struct Handle 60 { 61 uchar h[64]; 62 int len; 63 }; 64 65 void blockdump(Block *b, char *desc); 66 void blockput(Block *b); 67 68 Disk* diskcache(Disk*, uint, uint); 69 Disk* diskopenventi(struct VtCache*, uchar*); 70 Disk* diskopenfile(char *file); 71 Disk* diskpart(Disk*, u64int offset, u64int count); 72 void diskpartabandon(Disk*); 73 74 Disk* diskopen(char *file); 75 void diskclose(Disk *disk); 76 Block* diskread(Disk *disk, u32int, u64int offset); 77 int disksync(Disk *disk); 78 79 Fsys* fsysopenffs(Disk*); 80 Fsys* fsysopenhfs(Disk*); 81 Fsys* fsysopenkfs(Disk*); 82 Fsys* fsysopenext2(Disk*); 83 Fsys* fsysopenfat(Disk*); 84 85 Fsys* fsysopen(Disk *disk); 86 Block* fsysreadblock(Fsys *fsys, u64int blockno); 87 int fsyssync(Fsys *fsys); 88 void fsysclose(Fsys *fsys); 89 90 Nfs3Status fsysroot(Fsys *fsys, Nfs3Handle *h); 91 Nfs3Status fsyslookup(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char *name, Nfs3Handle *nh); 92 Nfs3Status fsysgetattr(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, Nfs3Attr *attr); 93 Nfs3Status fsysreaddir(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int cookie, uchar **e, u32int *ne, uchar*); 94 Nfs3Status fsysreadfile(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int, u64int, uchar**, u32int*, uchar*); 95 Nfs3Status fsysreadlink(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char **plink); 96 Nfs3Status fsysaccess(Fsys *fsys, SunAuthUnix*, Nfs3Handle*, u32int, u32int*, Nfs3Attr*); 97 void* emalloc(ulong size); /* provided by caller */ 98 99 extern int allowall;