Blob


1 /* Copyright (c) Russ Cox, MIT; see src/libdiskfs/COPYRIGHT */
3 AUTOLIB(diskfs)
5 typedef struct Block Block;
6 typedef struct Disk Disk;
7 typedef struct Fsys Fsys;
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;
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 };
26 struct Block
27 {
28 Disk *disk;
29 u32int len;
30 uchar *data;
31 void (*_close)(Block*);
32 void *priv;
33 };
35 struct Fsys
36 {
37 u32int blocksize;
38 u32int nblock;
39 char *type;
41 Disk *disk;
42 Block *(*_readblock)(Fsys *fsys, u64int blockno);
43 int (*_sync)(Fsys *fsys);
44 void (*_close)(Fsys *fsys);
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);
54 void *priv;
56 u64int (*fileblock)(Fsys *fsys, Nfs3Handle *h, u64int offset);
57 };
59 struct Handle
60 {
61 uchar h[64];
62 int len;
63 };
65 void blockdump(Block *b, char *desc);
66 void blockput(Block *b);
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*);
74 Disk* diskopen(char *file);
75 void diskclose(Disk *disk);
76 Block* diskread(Disk *disk, u32int, u64int offset);
77 int disksync(Disk *disk);
79 Fsys* fsysopenffs(Disk*);
80 Fsys* fsysopenhfs(Disk*);
81 Fsys* fsysopenkfs(Disk*);
82 Fsys* fsysopenext2(Disk*);
83 Fsys* fsysopenfat(Disk*);
85 Fsys* fsysopen(Disk *disk);
86 Block* fsysreadblock(Fsys *fsys, u64int blockno);
87 int fsyssync(Fsys *fsys);
88 void fsysclose(Fsys *fsys);
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 */
99 extern int allowall;