1*25210b06SDavid du Colombier /* 2*25210b06SDavid du Colombier * ISO 9660 CD format 3*25210b06SDavid du Colombier */ 4*25210b06SDavid du Colombier 5*25210b06SDavid du Colombier #define VOLDESC 16 /* sector number */ 6*25210b06SDavid du Colombier 7*25210b06SDavid du Colombier /* 8*25210b06SDavid du Colombier * L means little-endian, M means big-endian, and LM means little-endian 9*25210b06SDavid du Colombier * then again big-endian. 10*25210b06SDavid du Colombier */ 11*25210b06SDavid du Colombier typedef uchar Byte2L[2]; 12*25210b06SDavid du Colombier typedef uchar Byte2M[2]; 13*25210b06SDavid du Colombier typedef uchar Byte4LM[4]; 14*25210b06SDavid du Colombier typedef uchar Byte4L[4]; 15*25210b06SDavid du Colombier typedef uchar Byte4M[4]; 16*25210b06SDavid du Colombier typedef uchar Byte8LM[8]; 17*25210b06SDavid du Colombier typedef union Drec Drec; 18*25210b06SDavid du Colombier typedef union Voldesc Voldesc; 19*25210b06SDavid du Colombier 20*25210b06SDavid du Colombier enum { 21*25210b06SDavid du Colombier BootIso = 0, 22*25210b06SDavid du Colombier PrimaryIso = 1, 23*25210b06SDavid du Colombier SupplementaryIso = 2, 24*25210b06SDavid du Colombier PartitionIso = 3, 25*25210b06SDavid du Colombier TerminatorIso = 255, 26*25210b06SDavid du Colombier }; 27*25210b06SDavid du Colombier 28*25210b06SDavid du Colombier enum { 29*25210b06SDavid du Colombier Cdsec = 2048, 30*25210b06SDavid du Colombier Maxname = 256, 31*25210b06SDavid du Colombier }; 32*25210b06SDavid du Colombier 33*25210b06SDavid du Colombier union Voldesc { /* volume descriptor */ 34*25210b06SDavid du Colombier uchar byte[Cdsec]; 35*25210b06SDavid du Colombier union { /* for CD001, the ECMA standard */ 36*25210b06SDavid du Colombier struct { 37*25210b06SDavid du Colombier uchar type; 38*25210b06SDavid du Colombier uchar stdid[5]; 39*25210b06SDavid du Colombier uchar version; 40*25210b06SDavid du Colombier uchar unused; 41*25210b06SDavid du Colombier uchar sysid[32]; 42*25210b06SDavid du Colombier uchar bootid[32]; 43*25210b06SDavid du Colombier uchar data[1977]; 44*25210b06SDavid du Colombier } boot; 45*25210b06SDavid du Colombier struct { 46*25210b06SDavid du Colombier uchar type; 47*25210b06SDavid du Colombier uchar stdid[5]; 48*25210b06SDavid du Colombier uchar version; 49*25210b06SDavid du Colombier uchar flags; 50*25210b06SDavid du Colombier uchar sysid[32]; 51*25210b06SDavid du Colombier uchar volid[32]; 52*25210b06SDavid du Colombier Byte8LM partloc; 53*25210b06SDavid du Colombier Byte8LM size; 54*25210b06SDavid du Colombier uchar escapes[32]; 55*25210b06SDavid du Colombier Byte4LM vsetsize; 56*25210b06SDavid du Colombier Byte4LM vseqno; 57*25210b06SDavid du Colombier Byte4LM blksize; 58*25210b06SDavid du Colombier Byte8LM ptabsize; 59*25210b06SDavid du Colombier Byte4L lptable; 60*25210b06SDavid du Colombier Byte4L optlptable; 61*25210b06SDavid du Colombier Byte4M mptable; 62*25210b06SDavid du Colombier Byte4M optmptable; 63*25210b06SDavid du Colombier uchar rootdir[34]; 64*25210b06SDavid du Colombier uchar volsetid[128]; 65*25210b06SDavid du Colombier uchar pubid[128]; 66*25210b06SDavid du Colombier uchar prepid[128]; 67*25210b06SDavid du Colombier uchar appid[128]; 68*25210b06SDavid du Colombier uchar copyright[37]; 69*25210b06SDavid du Colombier uchar abstract[37]; 70*25210b06SDavid du Colombier uchar bibliography[37]; 71*25210b06SDavid du Colombier uchar cdate[17]; 72*25210b06SDavid du Colombier uchar mdate[17]; 73*25210b06SDavid du Colombier uchar expdate[17]; 74*25210b06SDavid du Colombier uchar effdate[17]; 75*25210b06SDavid du Colombier uchar fsversion; 76*25210b06SDavid du Colombier uchar unused3[1]; 77*25210b06SDavid du Colombier uchar appuse[512]; 78*25210b06SDavid du Colombier uchar unused4[653]; 79*25210b06SDavid du Colombier } desc; 80*25210b06SDavid du Colombier } z; 81*25210b06SDavid du Colombier union { /* for CDROM, the `High Sierra' standard */ 82*25210b06SDavid du Colombier struct { 83*25210b06SDavid du Colombier Byte8LM number; 84*25210b06SDavid du Colombier uchar type; 85*25210b06SDavid du Colombier uchar stdid[5]; 86*25210b06SDavid du Colombier uchar version; 87*25210b06SDavid du Colombier uchar flags; 88*25210b06SDavid du Colombier uchar sysid[32]; 89*25210b06SDavid du Colombier uchar volid[32]; 90*25210b06SDavid du Colombier Byte8LM partloc; 91*25210b06SDavid du Colombier Byte8LM size; 92*25210b06SDavid du Colombier uchar escapes[32]; 93*25210b06SDavid du Colombier Byte4LM vsetsize; 94*25210b06SDavid du Colombier Byte4LM vseqno; 95*25210b06SDavid du Colombier Byte4LM blksize; 96*25210b06SDavid du Colombier uchar quux[40]; 97*25210b06SDavid du Colombier uchar rootdir[34]; 98*25210b06SDavid du Colombier uchar volsetid[128]; 99*25210b06SDavid du Colombier uchar pubid[128]; 100*25210b06SDavid du Colombier uchar prepid[128]; 101*25210b06SDavid du Colombier uchar appid[128]; 102*25210b06SDavid du Colombier uchar copyright[32]; 103*25210b06SDavid du Colombier uchar abstract[32]; 104*25210b06SDavid du Colombier uchar cdate[16]; 105*25210b06SDavid du Colombier uchar mdate[16]; 106*25210b06SDavid du Colombier uchar expdate[16]; 107*25210b06SDavid du Colombier uchar effdate[16]; 108*25210b06SDavid du Colombier uchar fsversion; 109*25210b06SDavid du Colombier } desc; 110*25210b06SDavid du Colombier } r; 111*25210b06SDavid du Colombier }; 112*25210b06SDavid du Colombier 113*25210b06SDavid du Colombier union Drec { 114*25210b06SDavid du Colombier struct { 115*25210b06SDavid du Colombier uchar reclen; 116*25210b06SDavid du Colombier uchar attrlen; 117*25210b06SDavid du Colombier Byte8LM addr; 118*25210b06SDavid du Colombier Byte8LM size; 119*25210b06SDavid du Colombier uchar date[6]; 120*25210b06SDavid du Colombier uchar tzone; /* flags in high sierra */ 121*25210b06SDavid du Colombier uchar flags; /* ? in high sierra */ 122*25210b06SDavid du Colombier uchar unitsize; /* ? in high sierra */ 123*25210b06SDavid du Colombier uchar gapsize; /* ? in high sierra */ 124*25210b06SDavid du Colombier Byte4LM vseqno; /* ? in high sierra */ 125*25210b06SDavid du Colombier uchar namelen; 126*25210b06SDavid du Colombier uchar name[1]; 127*25210b06SDavid du Colombier }; 128*25210b06SDavid du Colombier struct { 129*25210b06SDavid du Colombier uchar r_pad[24]; 130*25210b06SDavid du Colombier uchar r_flags; 131*25210b06SDavid du Colombier }; 132*25210b06SDavid du Colombier }; 133*25210b06SDavid du Colombier 134*25210b06SDavid du Colombier struct Isofile { 135*25210b06SDavid du Colombier short fmt; /* 'z' if iso, 'r' if high sierra */ 136*25210b06SDavid du Colombier short blksize; 137*25210b06SDavid du Colombier vlong offset; /* true offset when reading directory */ 138*25210b06SDavid du Colombier long odelta; /* true size of directory just read */ 139*25210b06SDavid du Colombier vlong doffset; /* plan9 offset when reading directory */ 140*25210b06SDavid du Colombier Drec d; 141*25210b06SDavid du Colombier }; 142