120 lines
2.1 KiB
C
120 lines
2.1 KiB
C
typedef struct Ioclust Ioclust;
|
|
typedef struct Iobuf Iobuf;
|
|
typedef struct Isofile Isofile;
|
|
typedef struct Xdata Xdata;
|
|
typedef struct Xfile Xfile;
|
|
typedef struct Xfs Xfs;
|
|
typedef struct Xfsub Xfsub;
|
|
|
|
#pragma incomplete Isofile
|
|
|
|
enum
|
|
{
|
|
Sectorsize = 2048,
|
|
Maxname = 256,
|
|
};
|
|
|
|
struct Iobuf
|
|
{
|
|
Ioclust* clust;
|
|
long addr;
|
|
uchar* iobuf;
|
|
};
|
|
|
|
struct Ioclust
|
|
{
|
|
long addr; /* in sectors; good to 8TB */
|
|
Xdata* dev;
|
|
Ioclust* next;
|
|
Ioclust* prev;
|
|
int busy;
|
|
int nbuf;
|
|
Iobuf* buf;
|
|
uchar* iobuf;
|
|
ulong tag; /* cache tag for eviction: 0 = data, 1 = metadata */
|
|
};
|
|
|
|
struct Xdata
|
|
{
|
|
Xdata* next;
|
|
char* name; /* of underlying file */
|
|
Qid qid;
|
|
short type;
|
|
short fdev;
|
|
int ref; /* attach count */
|
|
int dev; /* for read/write */
|
|
};
|
|
|
|
struct Xfsub
|
|
{
|
|
void (*reset)(void);
|
|
int (*attach)(Xfile*);
|
|
void (*clone)(Xfile*, Xfile*);
|
|
void (*walkup)(Xfile*);
|
|
void (*walk)(Xfile*, char*);
|
|
void (*open)(Xfile*, int);
|
|
void (*create)(Xfile*, char*, long, int);
|
|
long (*readdir)(Xfile*, uchar*, vlong, long);
|
|
long (*read)(Xfile*, char*, vlong, long);
|
|
long (*write)(Xfile*, char*, vlong, long);
|
|
void (*clunk)(Xfile*);
|
|
void (*remove)(Xfile*);
|
|
void (*stat)(Xfile*, Dir*);
|
|
void (*wstat)(Xfile*, Dir*);
|
|
};
|
|
|
|
struct Xfs
|
|
{
|
|
Xdata* d; /* how to get the bits */
|
|
Xfsub* s; /* how to use them */
|
|
int ref;
|
|
int issusp; /* follows system use sharing protocol */
|
|
long suspoff; /* if so, offset at which SUSP area begins */
|
|
int isrock; /* Rock Ridge format */
|
|
int isplan9; /* has Plan 9-specific directory info */
|
|
Qid rootqid;
|
|
Isofile* ptr; /* private data */
|
|
};
|
|
|
|
struct Xfile
|
|
{
|
|
Xfile* next; /* in fid hash bucket */
|
|
Xfs* xf;
|
|
long fid;
|
|
ulong flags;
|
|
Qid qid;
|
|
int len; /* of private data */
|
|
Isofile* ptr;
|
|
};
|
|
|
|
enum
|
|
{
|
|
Asis,
|
|
Clean,
|
|
Clunk
|
|
};
|
|
|
|
enum
|
|
{
|
|
Oread = 1,
|
|
Owrite = 2,
|
|
Orclose = 4,
|
|
Omodes = 3,
|
|
};
|
|
|
|
extern char Enonexist[]; /* file does not exist */
|
|
extern char Eperm[]; /* permission denied */
|
|
extern char Enofile[]; /* no file system specified */
|
|
extern char Eauth[]; /* authentication failed */
|
|
|
|
extern char *srvname;
|
|
extern char *deffile;
|
|
extern int chatty;
|
|
extern jmp_buf err_lab[];
|
|
extern int nerr_lab;
|
|
extern char err_msg[];
|
|
|
|
extern int nojoliet;
|
|
extern int noplan9;
|
|
extern int norock;
|