Blame


1 7285a491 2004-06-17 devnull /*
2 7285a491 2004-06-17 devnull * iso9660.h
3 7285a491 2004-06-17 devnull *
4 7285a491 2004-06-17 devnull * Routines and data structures to support reading and writing
5 7285a491 2004-06-17 devnull * ISO 9660 CD images. See the ISO 9660 or ECMA 119 standards.
6 7285a491 2004-06-17 devnull *
7 7285a491 2004-06-17 devnull * Also supports Rock Ridge extensions for long file names and Unix stuff.
8 7285a491 2004-06-17 devnull * Also supports Microsoft's Joliet extensions for Unicode and long file names.
9 7285a491 2004-06-17 devnull * Also supports El Torito bootable CD spec.
10 7285a491 2004-06-17 devnull */
11 7285a491 2004-06-17 devnull
12 7285a491 2004-06-17 devnull typedef struct Cdimg Cdimg;
13 7285a491 2004-06-17 devnull typedef struct Cdinfo Cdinfo;
14 7285a491 2004-06-17 devnull typedef struct Conform Conform;
15 7285a491 2004-06-17 devnull typedef struct Direc Direc;
16 7285a491 2004-06-17 devnull typedef struct Dumproot Dumproot;
17 7285a491 2004-06-17 devnull typedef struct Voldesc Voldesc;
18 7285a491 2004-06-17 devnull typedef struct XDir XDir;
19 7285a491 2004-06-17 devnull
20 7285a491 2004-06-17 devnull #ifndef CHLINK
21 7285a491 2004-06-17 devnull #define CHLINK 0
22 7285a491 2004-06-17 devnull #endif
23 7285a491 2004-06-17 devnull
24 7285a491 2004-06-17 devnull struct XDir {
25 7285a491 2004-06-17 devnull char *name;
26 7285a491 2004-06-17 devnull char *uid;
27 7285a491 2004-06-17 devnull char *gid;
28 7285a491 2004-06-17 devnull char *symlink;
29 7285a491 2004-06-17 devnull ulong uidno; /* Numeric uid */
30 7285a491 2004-06-17 devnull ulong gidno; /* Numeric gid */
31 7285a491 2004-06-17 devnull
32 7285a491 2004-06-17 devnull ulong mode;
33 7285a491 2004-06-17 devnull ulong atime;
34 7285a491 2004-06-17 devnull ulong mtime;
35 7285a491 2004-06-17 devnull ulong ctime;
36 7285a491 2004-06-17 devnull
37 7285a491 2004-06-17 devnull vlong length;
38 7285a491 2004-06-17 devnull };
39 7285a491 2004-06-17 devnull
40 7285a491 2004-06-17 devnull /*
41 7285a491 2004-06-17 devnull * A directory entry in a ISO9660 tree.
42 7285a491 2004-06-17 devnull * The extra data (uid, etc.) here is put into the system use areas.
43 7285a491 2004-06-17 devnull */
44 7285a491 2004-06-17 devnull struct Direc {
45 7285a491 2004-06-17 devnull char *name; /* real name */
46 7285a491 2004-06-17 devnull char *confname; /* conformant name */
47 7285a491 2004-06-17 devnull char *srcfile; /* file to copy onto the image */
48 7285a491 2004-06-17 devnull
49 7285a491 2004-06-17 devnull ulong block;
50 7285a491 2004-06-17 devnull ulong length;
51 7285a491 2004-06-17 devnull int flags;
52 7285a491 2004-06-17 devnull
53 7285a491 2004-06-17 devnull char *uid;
54 7285a491 2004-06-17 devnull char *gid;
55 7285a491 2004-06-17 devnull char *symlink;
56 7285a491 2004-06-17 devnull ulong mode;
57 7285a491 2004-06-17 devnull long atime;
58 7285a491 2004-06-17 devnull long ctime;
59 7285a491 2004-06-17 devnull long mtime;
60 7285a491 2004-06-17 devnull
61 7285a491 2004-06-17 devnull ulong uidno;
62 7285a491 2004-06-17 devnull ulong gidno;
63 7285a491 2004-06-17 devnull
64 7285a491 2004-06-17 devnull Direc *child;
65 7285a491 2004-06-17 devnull int nchild;
66 7285a491 2004-06-17 devnull };
67 7285a491 2004-06-17 devnull enum { /* Direc flags */
68 cbeb0b26 2006-04-01 devnull Dbadname = 1<<0 /* Non-conformant name */
69 7285a491 2004-06-17 devnull };
70 7285a491 2004-06-17 devnull
71 7285a491 2004-06-17 devnull /*
72 7285a491 2004-06-17 devnull * Data found in a volume descriptor.
73 7285a491 2004-06-17 devnull */
74 7285a491 2004-06-17 devnull struct Voldesc {
75 7285a491 2004-06-17 devnull char *systemid;
76 7285a491 2004-06-17 devnull char *volumeset;
77 7285a491 2004-06-17 devnull char *publisher;
78 7285a491 2004-06-17 devnull char *preparer;
79 7285a491 2004-06-17 devnull char *application;
80 7285a491 2004-06-17 devnull
81 7285a491 2004-06-17 devnull /* file names for various parameters */
82 7285a491 2004-06-17 devnull char *abstract;
83 7285a491 2004-06-17 devnull char *biblio;
84 7285a491 2004-06-17 devnull char *notice;
85 7285a491 2004-06-17 devnull
86 7285a491 2004-06-17 devnull /* path table */
87 7285a491 2004-06-17 devnull ulong pathsize;
88 7285a491 2004-06-17 devnull ulong lpathloc;
89 7285a491 2004-06-17 devnull ulong mpathloc;
90 7285a491 2004-06-17 devnull
91 7285a491 2004-06-17 devnull /* root of file tree */
92 7285a491 2004-06-17 devnull Direc root;
93 7285a491 2004-06-17 devnull };
94 7285a491 2004-06-17 devnull
95 7285a491 2004-06-17 devnull /*
96 7285a491 2004-06-17 devnull * An ISO9660 CD image. Various parameters are kept in memory but the
97 7285a491 2004-06-17 devnull * real image file is opened for reading and writing on fd.
98 7285a491 2004-06-17 devnull *
99 7285a491 2004-06-17 devnull * The bio buffers brd and bwr moderate reading and writing to the image.
100 7285a491 2004-06-17 devnull * The routines we use are careful to flush one before or after using the other,
101 7285a491 2004-06-17 devnull * as necessary.
102 7285a491 2004-06-17 devnull */
103 7285a491 2004-06-17 devnull struct Cdimg {
104 7285a491 2004-06-17 devnull char *file;
105 7285a491 2004-06-17 devnull int fd;
106 7285a491 2004-06-17 devnull ulong dumpblock;
107 7285a491 2004-06-17 devnull ulong nextblock;
108 7285a491 2004-06-17 devnull ulong iso9660pvd;
109 7285a491 2004-06-17 devnull ulong jolietsvd;
110 7285a491 2004-06-17 devnull ulong pathblock;
111 7285a491 2004-06-17 devnull ulong rrcontin; /* rock ridge continuation offset */
112 7285a491 2004-06-17 devnull ulong nulldump; /* next dump block */
113 7285a491 2004-06-17 devnull ulong nconform; /* number of conform entries written already */
114 7285a491 2004-06-17 devnull ulong bootcatptr;
115 7285a491 2004-06-17 devnull ulong bootcatblock;
116 7285a491 2004-06-17 devnull ulong bootimageptr;
117 7285a491 2004-06-17 devnull Direc *bootdirec;
118 7285a491 2004-06-17 devnull char *bootimage;
119 7285a491 2004-06-17 devnull
120 7285a491 2004-06-17 devnull Biobuf brd;
121 7285a491 2004-06-17 devnull Biobuf bwr;
122 7285a491 2004-06-17 devnull
123 7285a491 2004-06-17 devnull int flags;
124 7285a491 2004-06-17 devnull
125 7285a491 2004-06-17 devnull Voldesc iso;
126 7285a491 2004-06-17 devnull Voldesc joliet;
127 7285a491 2004-06-17 devnull };
128 7285a491 2004-06-17 devnull enum { /* Cdimg->flags, Cdinfo->flags */
129 7285a491 2004-06-17 devnull CDjoliet = 1<<0,
130 7285a491 2004-06-17 devnull CDplan9 = 1<<1,
131 7285a491 2004-06-17 devnull CDconform = 1<<2,
132 7285a491 2004-06-17 devnull CDrockridge = 1<<3,
133 7285a491 2004-06-17 devnull CDnew = 1<<4,
134 7285a491 2004-06-17 devnull CDdump = 1<<5,
135 cbeb0b26 2006-04-01 devnull CDbootable = 1<<6
136 7285a491 2004-06-17 devnull };
137 7285a491 2004-06-17 devnull
138 7285a491 2004-06-17 devnull typedef struct Tx Tx;
139 7285a491 2004-06-17 devnull struct Tx {
140 7285a491 2004-06-17 devnull char *bad; /* atoms */
141 7285a491 2004-06-17 devnull char *good;
142 7285a491 2004-06-17 devnull };
143 7285a491 2004-06-17 devnull
144 7285a491 2004-06-17 devnull struct Conform {
145 7285a491 2004-06-17 devnull Tx *t;
146 7285a491 2004-06-17 devnull int nt; /* delta = 32 */
147 7285a491 2004-06-17 devnull };
148 7285a491 2004-06-17 devnull
149 7285a491 2004-06-17 devnull struct Cdinfo {
150 7285a491 2004-06-17 devnull int flags;
151 7285a491 2004-06-17 devnull
152 7285a491 2004-06-17 devnull char *volumename;
153 7285a491 2004-06-17 devnull
154 7285a491 2004-06-17 devnull char *volumeset;
155 7285a491 2004-06-17 devnull char *publisher;
156 7285a491 2004-06-17 devnull char *preparer;
157 7285a491 2004-06-17 devnull char *application;
158 7285a491 2004-06-17 devnull char *bootimage;
159 7285a491 2004-06-17 devnull };
160 7285a491 2004-06-17 devnull
161 7285a491 2004-06-17 devnull enum {
162 cbeb0b26 2006-04-01 devnull Blocklen = 2048
163 7285a491 2004-06-17 devnull };
164 7285a491 2004-06-17 devnull
165 7285a491 2004-06-17 devnull /*
166 7285a491 2004-06-17 devnull * This is a doubly binary tree.
167 7285a491 2004-06-17 devnull * We have a tree keyed on the MD5 values
168 7285a491 2004-06-17 devnull * as well as a tree keyed on the block numbers.
169 7285a491 2004-06-17 devnull */
170 7285a491 2004-06-17 devnull typedef struct Dump Dump;
171 7285a491 2004-06-17 devnull typedef struct Dumpdir Dumpdir;
172 7285a491 2004-06-17 devnull
173 7285a491 2004-06-17 devnull struct Dump {
174 7285a491 2004-06-17 devnull Cdimg *cd;
175 7285a491 2004-06-17 devnull Dumpdir *md5root;
176 7285a491 2004-06-17 devnull Dumpdir *blockroot;
177 7285a491 2004-06-17 devnull };
178 7285a491 2004-06-17 devnull
179 7285a491 2004-06-17 devnull struct Dumpdir {
180 7285a491 2004-06-17 devnull char *name;
181 7285a491 2004-06-17 devnull uchar md5[MD5dlen];
182 7285a491 2004-06-17 devnull ulong block;
183 7285a491 2004-06-17 devnull ulong length;
184 7285a491 2004-06-17 devnull Dumpdir *md5left;
185 7285a491 2004-06-17 devnull Dumpdir *md5right;
186 7285a491 2004-06-17 devnull Dumpdir *blockleft;
187 7285a491 2004-06-17 devnull Dumpdir *blockright;
188 7285a491 2004-06-17 devnull };
189 7285a491 2004-06-17 devnull
190 7285a491 2004-06-17 devnull struct Dumproot {
191 7285a491 2004-06-17 devnull char *name;
192 7285a491 2004-06-17 devnull int nkid;
193 7285a491 2004-06-17 devnull Dumproot *kid;
194 7285a491 2004-06-17 devnull Direc root;
195 7285a491 2004-06-17 devnull Direc jroot;
196 7285a491 2004-06-17 devnull };
197 7285a491 2004-06-17 devnull
198 7285a491 2004-06-17 devnull /*
199 7285a491 2004-06-17 devnull * ISO9660 on-CD structures.
200 7285a491 2004-06-17 devnull */
201 7285a491 2004-06-17 devnull typedef struct Cdir Cdir;
202 7285a491 2004-06-17 devnull typedef struct Cpath Cpath;
203 7285a491 2004-06-17 devnull typedef struct Cvoldesc Cvoldesc;
204 7285a491 2004-06-17 devnull
205 7285a491 2004-06-17 devnull /* a volume descriptor block */
206 7285a491 2004-06-17 devnull struct Cvoldesc {
207 7285a491 2004-06-17 devnull uchar magic[8]; /* 0x01, "CD001", 0x01, 0x00 */
208 7285a491 2004-06-17 devnull uchar systemid[32]; /* system identifier */
209 7285a491 2004-06-17 devnull uchar volumeid[32]; /* volume identifier */
210 7285a491 2004-06-17 devnull uchar unused[8]; /* character set in secondary desc */
211 7285a491 2004-06-17 devnull uchar volsize[8]; /* volume size */
212 7285a491 2004-06-17 devnull uchar charset[32];
213 7285a491 2004-06-17 devnull uchar volsetsize[4]; /* volume set size = 1 */
214 7285a491 2004-06-17 devnull uchar volseqnum[4]; /* volume sequence number = 1 */
215 7285a491 2004-06-17 devnull uchar blocksize[4]; /* logical block size */
216 7285a491 2004-06-17 devnull uchar pathsize[8]; /* path table size */
217 7285a491 2004-06-17 devnull uchar lpathloc[4]; /* Lpath */
218 7285a491 2004-06-17 devnull uchar olpathloc[4]; /* optional Lpath */
219 7285a491 2004-06-17 devnull uchar mpathloc[4]; /* Mpath */
220 7285a491 2004-06-17 devnull uchar ompathloc[4]; /* optional Mpath */
221 7285a491 2004-06-17 devnull uchar rootdir[34]; /* directory entry for root */
222 7285a491 2004-06-17 devnull uchar volumeset[128]; /* volume set identifier */
223 7285a491 2004-06-17 devnull uchar publisher[128];
224 7285a491 2004-06-17 devnull uchar preparer[128]; /* data preparer identifier */
225 7285a491 2004-06-17 devnull uchar application[128]; /* application identifier */
226 7285a491 2004-06-17 devnull uchar notice[37]; /* copyright notice file */
227 7285a491 2004-06-17 devnull uchar abstract[37]; /* abstract file */
228 7285a491 2004-06-17 devnull uchar biblio[37]; /* bibliographic file */
229 7285a491 2004-06-17 devnull uchar cdate[17]; /* creation date */
230 7285a491 2004-06-17 devnull uchar mdate[17]; /* modification date */
231 7285a491 2004-06-17 devnull uchar xdate[17]; /* expiration date */
232 7285a491 2004-06-17 devnull uchar edate[17]; /* effective date */
233 7285a491 2004-06-17 devnull uchar fsvers; /* file system version = 1 */
234 7285a491 2004-06-17 devnull };
235 7285a491 2004-06-17 devnull
236 7285a491 2004-06-17 devnull /* a directory entry */
237 7285a491 2004-06-17 devnull struct Cdir {
238 7285a491 2004-06-17 devnull uchar len;
239 7285a491 2004-06-17 devnull uchar xlen;
240 7285a491 2004-06-17 devnull uchar dloc[8];
241 7285a491 2004-06-17 devnull uchar dlen[8];
242 7285a491 2004-06-17 devnull uchar date[7];
243 7285a491 2004-06-17 devnull uchar flags;
244 7285a491 2004-06-17 devnull uchar unitsize;
245 7285a491 2004-06-17 devnull uchar gapsize;
246 7285a491 2004-06-17 devnull uchar volseqnum[4];
247 7285a491 2004-06-17 devnull uchar namelen;
248 7285a491 2004-06-17 devnull uchar name[1]; /* chumminess */
249 7285a491 2004-06-17 devnull };
250 7285a491 2004-06-17 devnull
251 7285a491 2004-06-17 devnull /* a path table entry */
252 7285a491 2004-06-17 devnull struct Cpath {
253 7285a491 2004-06-17 devnull uchar namelen;
254 7285a491 2004-06-17 devnull uchar xlen;
255 7285a491 2004-06-17 devnull uchar dloc[4];
256 7285a491 2004-06-17 devnull uchar parent[2];
257 7285a491 2004-06-17 devnull uchar name[1]; /* chumminess */
258 7285a491 2004-06-17 devnull };
259 7285a491 2004-06-17 devnull
260 7285a491 2004-06-17 devnull enum { /* Rockridge flags */
261 7285a491 2004-06-17 devnull RR_PX = 1<<0,
262 7285a491 2004-06-17 devnull RR_PN = 1<<1,
263 7285a491 2004-06-17 devnull RR_SL = 1<<2,
264 7285a491 2004-06-17 devnull RR_NM = 1<<3,
265 7285a491 2004-06-17 devnull RR_CL = 1<<4,
266 7285a491 2004-06-17 devnull RR_PL = 1<<5,
267 7285a491 2004-06-17 devnull RR_RE = 1<<6,
268 cbeb0b26 2006-04-01 devnull RR_TF = 1<<7
269 7285a491 2004-06-17 devnull };
270 7285a491 2004-06-17 devnull
271 7285a491 2004-06-17 devnull enum { /* CputrripTF type argument */
272 7285a491 2004-06-17 devnull TFcreation = 1<<0,
273 7285a491 2004-06-17 devnull TFmodify = 1<<1,
274 7285a491 2004-06-17 devnull TFaccess = 1<<2,
275 7285a491 2004-06-17 devnull TFattributes = 1<<3,
276 7285a491 2004-06-17 devnull TFbackup = 1<<4,
277 7285a491 2004-06-17 devnull TFexpiration = 1<<5,
278 7285a491 2004-06-17 devnull TFeffective = 1<<6,
279 cbeb0b26 2006-04-01 devnull TFlongform = 1<<7
280 7285a491 2004-06-17 devnull };
281 7285a491 2004-06-17 devnull
282 7285a491 2004-06-17 devnull enum { /* CputrripNM flag types */
283 7285a491 2004-06-17 devnull NMcontinue = 1<<0,
284 7285a491 2004-06-17 devnull NMcurrent = 1<<1,
285 7285a491 2004-06-17 devnull NMparent = 1<<2,
286 7285a491 2004-06-17 devnull NMroot = 1<<3,
287 7285a491 2004-06-17 devnull NMvolroot = 1<<4,
288 cbeb0b26 2006-04-01 devnull NMhost = 1<<5
289 7285a491 2004-06-17 devnull };
290 7285a491 2004-06-17 devnull
291 7285a491 2004-06-17 devnull /* boot.c */
292 7285a491 2004-06-17 devnull void Cputbootvol(Cdimg*);
293 7285a491 2004-06-17 devnull void Cputbootcat(Cdimg*);
294 7285a491 2004-06-17 devnull void Cupdatebootvol(Cdimg*);
295 7285a491 2004-06-17 devnull void Cupdatebootcat(Cdimg*);
296 7285a491 2004-06-17 devnull void findbootimage(Cdimg*, Direc*);
297 7285a491 2004-06-17 devnull
298 7285a491 2004-06-17 devnull /* cdrdwr.c */
299 7285a491 2004-06-17 devnull Cdimg *createcd(char*, Cdinfo);
300 7285a491 2004-06-17 devnull Cdimg *opencd(char*, Cdinfo);
301 7285a491 2004-06-17 devnull void Creadblock(Cdimg*, void*, ulong, ulong);
302 7285a491 2004-06-17 devnull ulong big(void*, int);
303 7285a491 2004-06-17 devnull ulong little(void*, int);
304 7285a491 2004-06-17 devnull int parsedir(Cdimg*, Direc*, uchar*, int, char *(*)(uchar*, int));
305 7285a491 2004-06-17 devnull void setroot(Cdimg*, ulong, ulong, ulong);
306 7285a491 2004-06-17 devnull void setvolsize(Cdimg*, ulong, ulong);
307 7285a491 2004-06-17 devnull void setpathtable(Cdimg*, ulong, ulong, ulong, ulong);
308 7285a491 2004-06-17 devnull void Cputc(Cdimg*, int);
309 7285a491 2004-06-17 devnull void Cputnl(Cdimg*, ulong, int);
310 7285a491 2004-06-17 devnull void Cputnm(Cdimg*, ulong, int);
311 7285a491 2004-06-17 devnull void Cputn(Cdimg*, long, int);
312 7285a491 2004-06-17 devnull void Crepeat(Cdimg*, int, int);
313 7285a491 2004-06-17 devnull void Cputs(Cdimg*, char*, int);
314 7285a491 2004-06-17 devnull void Cwrite(Cdimg*, void*, int);
315 7285a491 2004-06-17 devnull void Cputr(Cdimg*, Rune);
316 7285a491 2004-06-17 devnull void Crepeatr(Cdimg*, Rune, int);
317 7285a491 2004-06-17 devnull void Cputrs(Cdimg*, Rune*, int);
318 7285a491 2004-06-17 devnull void Cputrscvt(Cdimg*, char*, int);
319 7285a491 2004-06-17 devnull void Cpadblock(Cdimg*);
320 7285a491 2004-06-17 devnull void Cputdate(Cdimg*, ulong);
321 7285a491 2004-06-17 devnull void Cputdate1(Cdimg*, ulong);
322 7285a491 2004-06-17 devnull void Cread(Cdimg*, void*, int);
323 7285a491 2004-06-17 devnull void Cwflush(Cdimg*);
324 7285a491 2004-06-17 devnull void Cwseek(Cdimg*, ulong);
325 7285a491 2004-06-17 devnull ulong Cwoffset(Cdimg*);
326 7285a491 2004-06-17 devnull ulong Croffset(Cdimg*);
327 7285a491 2004-06-17 devnull int Cgetc(Cdimg*);
328 7285a491 2004-06-17 devnull void Crseek(Cdimg*, ulong);
329 7285a491 2004-06-17 devnull char *Crdline(Cdimg*, int);
330 7285a491 2004-06-17 devnull int Clinelen(Cdimg*);
331 7285a491 2004-06-17 devnull
332 7285a491 2004-06-17 devnull /* conform.c */
333 7285a491 2004-06-17 devnull void rdconform(Cdimg*);
334 7285a491 2004-06-17 devnull char *conform(char*, int);
335 7285a491 2004-06-17 devnull void wrconform(Cdimg*, int, ulong*, ulong*);
336 7285a491 2004-06-17 devnull
337 7285a491 2004-06-17 devnull /* direc.c */
338 7285a491 2004-06-17 devnull void mkdirec(Direc*, XDir*);
339 7285a491 2004-06-17 devnull Direc *walkdirec(Direc*, char*);
340 7285a491 2004-06-17 devnull Direc *adddirec(Direc*, char*, XDir*);
341 7285a491 2004-06-17 devnull void copydirec(Direc*, Direc*);
342 7285a491 2004-06-17 devnull void checknames(Direc*, int (*)(char*));
343 7285a491 2004-06-17 devnull void convertnames(Direc*, char* (*)(char*, char*));
344 7285a491 2004-06-17 devnull void dsort(Direc*, int (*)(const void*, const void*));
345 7285a491 2004-06-17 devnull void setparents(Direc*);
346 7285a491 2004-06-17 devnull
347 7285a491 2004-06-17 devnull /* dump.c */
348 7285a491 2004-06-17 devnull ulong Cputdumpblock(Cdimg*);
349 7285a491 2004-06-17 devnull int hasdump(Cdimg*);
350 7285a491 2004-06-17 devnull Dump *dumpcd(Cdimg*, Direc*);
351 7285a491 2004-06-17 devnull Dumpdir *lookupmd5(Dump*, uchar*);
352 7285a491 2004-06-17 devnull void insertmd5(Dump*, char*, uchar*, ulong, ulong);
353 7285a491 2004-06-17 devnull
354 7285a491 2004-06-17 devnull Direc readdumpdirs(Cdimg*, XDir*, char*(*)(uchar*,int));
355 7285a491 2004-06-17 devnull char *adddumpdir(Direc*, ulong, XDir*);
356 7285a491 2004-06-17 devnull void copybutname(Direc*, Direc*);
357 7285a491 2004-06-17 devnull
358 7285a491 2004-06-17 devnull void readkids(Cdimg*, Direc*, char*(*)(uchar*,int));
359 7285a491 2004-06-17 devnull void freekids(Direc*);
360 7285a491 2004-06-17 devnull void readdumpconform(Cdimg*);
361 7285a491 2004-06-17 devnull void rmdumpdir(Direc*, char*);
362 7285a491 2004-06-17 devnull
363 7285a491 2004-06-17 devnull /* ichar.c */
364 7285a491 2004-06-17 devnull char *isostring(uchar*, int);
365 7285a491 2004-06-17 devnull int isbadiso9660(char*);
366 7285a491 2004-06-17 devnull int isocmp(const void*, const void*);
367 7285a491 2004-06-17 devnull int isisofrog(char);
368 7285a491 2004-06-17 devnull void Cputisopvd(Cdimg*, Cdinfo);
369 7285a491 2004-06-17 devnull
370 7285a491 2004-06-17 devnull /* jchar.c */
371 7285a491 2004-06-17 devnull char *jolietstring(uchar*, int);
372 7285a491 2004-06-17 devnull int isbadjoliet(char*);
373 7285a491 2004-06-17 devnull int jolietcmp(const void*, const void*);
374 7285a491 2004-06-17 devnull int isjolietfrog(Rune);
375 7285a491 2004-06-17 devnull void Cputjolietsvd(Cdimg*, Cdinfo);
376 7285a491 2004-06-17 devnull
377 7285a491 2004-06-17 devnull /* path.c */
378 7285a491 2004-06-17 devnull void writepathtables(Cdimg*);
379 7285a491 2004-06-17 devnull
380 7285a491 2004-06-17 devnull /* util.c */
381 7285a491 2004-06-17 devnull void *emalloc(ulong);
382 7285a491 2004-06-17 devnull void *erealloc(void*, ulong);
383 7285a491 2004-06-17 devnull char *atom(char*);
384 7285a491 2004-06-17 devnull char *struprcpy(char*, char*);
385 7285a491 2004-06-17 devnull int chat(char*, ...);
386 7285a491 2004-06-17 devnull
387 7285a491 2004-06-17 devnull /* unix.c, plan9.c */
388 7285a491 2004-06-17 devnull void dirtoxdir(XDir*, Dir*);
389 7285a491 2004-06-17 devnull void fdtruncate(int, ulong);
390 7285a491 2004-06-17 devnull long uidno(char*);
391 7285a491 2004-06-17 devnull long gidno(char*);
392 7285a491 2004-06-17 devnull
393 7285a491 2004-06-17 devnull /* rune.c */
394 7285a491 2004-06-17 devnull Rune *strtorune(Rune*, char*);
395 7285a491 2004-06-17 devnull Rune *runechr(Rune*, Rune);
396 7285a491 2004-06-17 devnull int runecmp(Rune*, Rune*);
397 7285a491 2004-06-17 devnull
398 7285a491 2004-06-17 devnull /* sysuse.c */
399 7285a491 2004-06-17 devnull int Cputsysuse(Cdimg*, Direc*, int, int, int);
400 7285a491 2004-06-17 devnull
401 7285a491 2004-06-17 devnull /* write.c */
402 7285a491 2004-06-17 devnull void writefiles(Dump*, Cdimg*, Direc*);
403 7285a491 2004-06-17 devnull void writedirs(Cdimg*, Direc*, int(*)(Cdimg*, Direc*, int, int, int));
404 7285a491 2004-06-17 devnull void writedumpdirs(Cdimg*, Direc*, int(*)(Cdimg*, Direc*, int, int, int));
405 7285a491 2004-06-17 devnull int Cputisodir(Cdimg*, Direc*, int, int, int);
406 7285a491 2004-06-17 devnull int Cputjolietdir(Cdimg*, Direc*, int, int, int);
407 7285a491 2004-06-17 devnull void Cputendvd(Cdimg*);
408 7285a491 2004-06-17 devnull
409 7285a491 2004-06-17 devnull enum {
410 7285a491 2004-06-17 devnull Blocksize = 2048,
411 7285a491 2004-06-17 devnull Ndirblock = 16, /* directory blocks allocated at once */
412 7285a491 2004-06-17 devnull
413 7285a491 2004-06-17 devnull DTdot = 0,
414 7285a491 2004-06-17 devnull DTdotdot,
415 7285a491 2004-06-17 devnull DTiden,
416 7285a491 2004-06-17 devnull DTroot,
417 cbeb0b26 2006-04-01 devnull DTrootdot
418 7285a491 2004-06-17 devnull };
419 7285a491 2004-06-17 devnull
420 7285a491 2004-06-17 devnull extern ulong now;
421 7285a491 2004-06-17 devnull extern Conform *map;
422 7285a491 2004-06-17 devnull extern int chatty;
423 7285a491 2004-06-17 devnull extern int docolon;
424 7285a491 2004-06-17 devnull extern int mk9660;