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