Blame


1 78a779a3 2008-07-20 rsc typedef struct Ioclust Ioclust;
2 78a779a3 2008-07-20 rsc typedef struct Iobuf Iobuf;
3 78a779a3 2008-07-20 rsc typedef struct Isofile Isofile;
4 78a779a3 2008-07-20 rsc typedef struct Xdata Xdata;
5 78a779a3 2008-07-20 rsc typedef struct Xfile Xfile;
6 78a779a3 2008-07-20 rsc typedef struct Xfs Xfs;
7 78a779a3 2008-07-20 rsc typedef struct Xfsub Xfsub;
8 78a779a3 2008-07-20 rsc
9 78a779a3 2008-07-20 rsc #pragma incomplete Isofile
10 78a779a3 2008-07-20 rsc
11 78a779a3 2008-07-20 rsc enum
12 78a779a3 2008-07-20 rsc {
13 78a779a3 2008-07-20 rsc Sectorsize = 2048,
14 78a779a3 2008-07-20 rsc Maxname = 256,
15 78a779a3 2008-07-20 rsc };
16 78a779a3 2008-07-20 rsc
17 78a779a3 2008-07-20 rsc struct Iobuf
18 78a779a3 2008-07-20 rsc {
19 78a779a3 2008-07-20 rsc Ioclust* clust;
20 78a779a3 2008-07-20 rsc long addr;
21 78a779a3 2008-07-20 rsc uchar* iobuf;
22 78a779a3 2008-07-20 rsc };
23 78a779a3 2008-07-20 rsc
24 78a779a3 2008-07-20 rsc struct Ioclust
25 78a779a3 2008-07-20 rsc {
26 78a779a3 2008-07-20 rsc long addr; /* in sectors; good to 8TB */
27 78a779a3 2008-07-20 rsc Xdata* dev;
28 78a779a3 2008-07-20 rsc Ioclust* next;
29 78a779a3 2008-07-20 rsc Ioclust* prev;
30 78a779a3 2008-07-20 rsc int busy;
31 78a779a3 2008-07-20 rsc int nbuf;
32 78a779a3 2008-07-20 rsc Iobuf* buf;
33 78a779a3 2008-07-20 rsc uchar* iobuf;
34 78a779a3 2008-07-20 rsc };
35 78a779a3 2008-07-20 rsc
36 78a779a3 2008-07-20 rsc struct Xdata
37 78a779a3 2008-07-20 rsc {
38 78a779a3 2008-07-20 rsc Xdata* next;
39 78a779a3 2008-07-20 rsc char* name; /* of underlying file */
40 78a779a3 2008-07-20 rsc Qid qid;
41 78a779a3 2008-07-20 rsc short type;
42 78a779a3 2008-07-20 rsc short fdev;
43 78a779a3 2008-07-20 rsc int ref; /* attach count */
44 78a779a3 2008-07-20 rsc int dev; /* for read/write */
45 78a779a3 2008-07-20 rsc };
46 78a779a3 2008-07-20 rsc
47 78a779a3 2008-07-20 rsc struct Xfsub
48 78a779a3 2008-07-20 rsc {
49 78a779a3 2008-07-20 rsc void (*reset)(void);
50 78a779a3 2008-07-20 rsc int (*attach)(Xfile*);
51 78a779a3 2008-07-20 rsc void (*clone)(Xfile*, Xfile*);
52 78a779a3 2008-07-20 rsc void (*walkup)(Xfile*);
53 78a779a3 2008-07-20 rsc void (*walk)(Xfile*, char*);
54 78a779a3 2008-07-20 rsc void (*open)(Xfile*, int);
55 78a779a3 2008-07-20 rsc void (*create)(Xfile*, char*, long, int);
56 78a779a3 2008-07-20 rsc long (*readdir)(Xfile*, uchar*, long, long);
57 78a779a3 2008-07-20 rsc long (*read)(Xfile*, char*, vlong, long);
58 78a779a3 2008-07-20 rsc long (*write)(Xfile*, char*, vlong, long);
59 78a779a3 2008-07-20 rsc void (*clunk)(Xfile*);
60 78a779a3 2008-07-20 rsc void (*remove)(Xfile*);
61 78a779a3 2008-07-20 rsc void (*stat)(Xfile*, Dir*);
62 78a779a3 2008-07-20 rsc void (*wstat)(Xfile*, Dir*);
63 78a779a3 2008-07-20 rsc };
64 78a779a3 2008-07-20 rsc
65 78a779a3 2008-07-20 rsc struct Xfs
66 78a779a3 2008-07-20 rsc {
67 78a779a3 2008-07-20 rsc Xdata* d; /* how to get the bits */
68 78a779a3 2008-07-20 rsc Xfsub* s; /* how to use them */
69 78a779a3 2008-07-20 rsc int ref;
70 78a779a3 2008-07-20 rsc int issusp; /* follows system use sharing protocol */
71 78a779a3 2008-07-20 rsc long suspoff; /* if so, offset at which SUSP area begins */
72 78a779a3 2008-07-20 rsc int isrock; /* Rock Ridge format */
73 78a779a3 2008-07-20 rsc int isplan9; /* has Plan 9-specific directory info */
74 78a779a3 2008-07-20 rsc Qid rootqid;
75 78a779a3 2008-07-20 rsc Isofile* ptr; /* private data */
76 78a779a3 2008-07-20 rsc };
77 78a779a3 2008-07-20 rsc
78 78a779a3 2008-07-20 rsc struct Xfile
79 78a779a3 2008-07-20 rsc {
80 78a779a3 2008-07-20 rsc Xfile* next; /* in fid hash bucket */
81 78a779a3 2008-07-20 rsc Xfs* xf;
82 78a779a3 2008-07-20 rsc long fid;
83 78a779a3 2008-07-20 rsc ulong flags;
84 78a779a3 2008-07-20 rsc Qid qid;
85 78a779a3 2008-07-20 rsc int len; /* of private data */
86 78a779a3 2008-07-20 rsc Isofile* ptr;
87 78a779a3 2008-07-20 rsc };
88 78a779a3 2008-07-20 rsc
89 78a779a3 2008-07-20 rsc enum
90 78a779a3 2008-07-20 rsc {
91 78a779a3 2008-07-20 rsc Asis,
92 78a779a3 2008-07-20 rsc Clean,
93 78a779a3 2008-07-20 rsc Clunk
94 78a779a3 2008-07-20 rsc };
95 78a779a3 2008-07-20 rsc
96 78a779a3 2008-07-20 rsc enum
97 78a779a3 2008-07-20 rsc {
98 78a779a3 2008-07-20 rsc Oread = 1,
99 78a779a3 2008-07-20 rsc Owrite = 2,
100 78a779a3 2008-07-20 rsc Orclose = 4,
101 78a779a3 2008-07-20 rsc Omodes = 3,
102 78a779a3 2008-07-20 rsc };
103 78a779a3 2008-07-20 rsc
104 78a779a3 2008-07-20 rsc extern char Enonexist[]; /* file does not exist */
105 78a779a3 2008-07-20 rsc extern char Eperm[]; /* permission denied */
106 78a779a3 2008-07-20 rsc extern char Enofile[]; /* no file system specified */
107 78a779a3 2008-07-20 rsc extern char Eauth[]; /* authentication failed */
108 78a779a3 2008-07-20 rsc
109 78a779a3 2008-07-20 rsc extern char *srvname;
110 78a779a3 2008-07-20 rsc extern char *deffile;
111 78a779a3 2008-07-20 rsc extern int chatty;
112 78a779a3 2008-07-20 rsc extern jmp_buf err_lab[];
113 78a779a3 2008-07-20 rsc extern int nerr_lab;
114 78a779a3 2008-07-20 rsc extern char err_msg[];
115 78a779a3 2008-07-20 rsc
116 78a779a3 2008-07-20 rsc extern int nojoliet;
117 78a779a3 2008-07-20 rsc extern int noplan9;
118 78a779a3 2008-07-20 rsc extern int norock;