plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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;