1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
/*
* This file has been modified for the cdrkit suite.
*
* The behaviour and appearence of the program code below can differ to a major
* extent from the version distributed by the original author(s).
*
* For details, see Changelog file distributed with the cdrkit package. If you
* received this file from another source then ask the distributing person for
* a log of modifications.
*
*/
/* @(#)iso9660.h 1.5 04/03/02 Copyright 1996, 2004 J. Schilling */
/*
* Copyright (c) 1996, 2004 J. Schilling
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; see the file COPYING. If not, write to the Free Software
* Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#define _delta(from, to) ((to) - (from) + 1)
#define VD_BOOT 0
#define VD_PRIMARY 1
#define VD_SUPPLEMENT 2
#define VD_PARTITION 3
#define VD_TERM 255
#define VD_ID "CD001"
struct iso9660_voldesc {
char vd_type [_delta(1, 1)];
char vd_id [_delta(2, 6)];
char vd_version [_delta(7, 7)];
char vd_fill [_delta(8, 2048)];
};
struct iso9660_boot_voldesc {
char vd_type [_delta(1, 1)];
char vd_id [_delta(2, 6)];
char vd_version [_delta(7, 7)];
char vd_bootsys [_delta(8, 39)];
char vd_bootid [_delta(40, 71)];
char vd_bootcode [_delta(72, 2048)];
};
struct iso9660_pr_voldesc {
char vd_type [_delta(1, 1)];
char vd_id [_delta(2, 6)];
char vd_version [_delta(7, 7)];
char vd_unused1 [_delta(8, 8)];
char vd_system_id [_delta(9, 40)];
char vd_volume_id [_delta(41, 72)];
char vd_unused2 [_delta(73, 80)];
char vd_volume_space_size [_delta(81, 88)];
char vd_unused3 [_delta(89, 120)];
char vd_volume_set_size [_delta(121, 124)];
char vd_volume_seq_number [_delta(125, 128)];
char vd_lbsize [_delta(129, 132)];
char vd_path_table_size [_delta(133, 140)];
char vd_pos_path_table_l [_delta(141, 144)];
char vd_opt_pos_path_table_l [_delta(145, 148)];
char vd_pos_path_table_m [_delta(149, 152)];
char vd_opt_pos_path_table_m [_delta(153, 156)];
char vd_root_dir [_delta(157, 190)];
char vd_volume_set_id [_delta(191, 318)];
char vd_publisher_id [_delta(319, 446)];
char vd_data_preparer_id [_delta(447, 574)];
char vd_application_id [_delta(575, 702)];
char vd_copyr_file_id [_delta(703, 739)];
char vd_abstr_file_id [_delta(740, 776)];
char vd_bibl_file_id [_delta(777, 813)];
char vd_create_time [_delta(814, 830)];
char vd_mod_time [_delta(831, 847)];
char vd_expiry_time [_delta(848, 864)];
char vd_effective_time [_delta(865, 881)];
char vd_file_struct_vers [_delta(882, 882)];
char vd_reserved1 [_delta(883, 883)];
char vd_application_use [_delta(884, 1395)];
char vd_fill [_delta(1396, 2048)];
};
struct iso9660_dir {
char dr_len [_delta(1, 1)];
char dr_eattr_len [_delta(2, 2)];
char dr_eattr_pos [_delta(3, 10)];
char dr_data_len [_delta(11, 18)];
char dr_recording_time [_delta(19, 25)];
char dr_file_flags [_delta(26, 26)];
char dr_file_unit_size [_delta(27, 27)];
char dr_interleave_gap [_delta(28, 28)];
char dr_volume_seq_number [_delta(29, 32)];
char dr_file_name_len [_delta(33, 33)];
char dr_file_name [_delta(34, 34)];
};
struct iso9660_dtime {
unsigned char dt_year;
unsigned char dt_month;
unsigned char dt_day;
unsigned char dt_hour;
unsigned char dt_minute;
unsigned char dt_second;
char dt_gmtoff;
};
struct iso9660_ltime {
char lt_year [_delta(1, 4)];
char lt_month [_delta(5, 6)];
char lt_day [_delta(7, 8)];
char lt_hour [_delta(9, 10)];
char lt_minute [_delta(11, 12)];
char lt_second [_delta(13, 14)];
char lt_hsecond [_delta(15, 16)];
char lt_gmtoff [_delta(17, 17)];
};
struct iso9660_path_table {
char pt_di_len [_delta(1, 1)];
char pt_eattr_len [_delta(2, 2)];
char pt_eattr_pos [_delta(3, 6)];
char pt_di_parent [_delta(7, 8)];
char pt_name [_delta(9, 9)];
};
struct iso9660_eattr {
char ea_owner [_delta(1, 4)];
char ea_group [_delta(5, 8)];
char ea_perm [_delta(9, 10)];
char ea_ctime [_delta(11, 27)];
char ea_mtime [_delta(28, 44)];
char ea_extime [_delta(45, 61)];
char ea_eftime [_delta(62, 78)];
char ea_record_format [_delta(79, 79)];
char ea_record_attr [_delta(80, 80)];
char ea_record_len [_delta(81, 84)];
char ea_system_id [_delta(85, 116)];
char ea_system_use [_delta(117, 180)];
char ea_version [_delta(181, 181)];
char ea_esc_seq_len [_delta(182, 182)];
char ea_reserved1 [_delta(183, 246)];
char ea_appl_use_len [_delta(247, 250)];
char ea_appl_use [_delta(251, 251)]; /* actually more */
/* char ea_esc_seq [_delta(xxx, xxx)]; */
};
#define PERM_MB_ONE 0xAAAA
#define PERM_RSYS 0x0001
#define PERM_XSYS 0x0004
#define PERM_RUSR 0x0010
#define PERM_XUSR 0x0040
#define PERM_RGRP 0x0100
#define PERM_XGRP 0x0400
#define PERM_ROTH 0x1000
#define PERM_XOTH 0x4000
#define GET_UBYTE(a) a_to_u_byte(a)
#define GET_SBYTE(a) a_to_byte(a)
#define GET_SHORT(a) a_to_u_2_byte(&((unsigned char *) (a))[0])
#define GET_BSHORT(a) a_to_u_2_byte(&((unsigned char *) (a))[2])
#define GET_INT(a) a_to_4_byte(&((unsigned char *) (a))[0])
#define GET_LINT(a) la_to_4_byte(&((unsigned char *) (a))[0])
#define GET_BINT(a) a_to_4_byte(&((unsigned char *) (a))[4])
|