libcdio  2.1.0
ecma_167.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2005, 2006, 2008, 2012 Rocky Bernstein <rocky@cpan.org>
3  Copyright (c) 2001-2002 Ben Fennema <bfennema@falcon.csc.calpoly.edu>
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 /*
19  * Some portions taken from FreeBSD ecma167-udf.h which states:
20  * Copyright (c) 2001, 2002 Scott Long <scottl@freebsd.org>
21  * All rights reserved.
22  *
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the above copyright
27  * notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  * notice, this list of conditions and the following disclaimer in the
30  * documentation and/or other materials provided with the distribution.
31  *
32  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
33  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
34  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
36  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
40  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
41  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
42  * SUCH DAMAGE.
43  */
44 
52 #ifndef CDIO_ECMA_167_H
53 #define CDIO_ECMA_167_H 1
54 
55 #include <cdio/types.h>
56 
61 typedef enum {
69 
72 typedef enum {
73  TAGID_PRI_VOL = 0x0001,
74  TAGID_ANCHOR = 0x0002,
75  TAGID_VOL = 0x0003,
76  TAGID_IMP_VOL = 0x0004,
77  TAGID_PARTITION = 0x0005,
78  TAGID_LOGVOL = 0x0006,
80  TAGID_TERM = 0x0008,
82  TAGID_FSD = 0x0100,
83  TAGID_FID = 0x0101,
84  TAGID_AED = 0x0102,
85  TAGID_IE = 0x0103,
86  TAGID_TE = 0x0104,
87  TAGID_FILE_ENTRY = 0x0105,
88  TAGID_EAHD = 0x0106,
89  TAGID_USE = 0x0107,
90  TAGID_SBD = 0x0108,
91  TAGID_PIE = 0x0109,
92  TAGID_EFE = 0x010A,
93 } tag_id_t ;
94 
96 typedef enum {
108 
109 typedef uint8_t udf_Uint8_t;
110 typedef uint16_t udf_Uint16_t;
111 typedef uint32_t udf_Uint32_t;
112 typedef uint64_t udf_Uint64_t;
113 typedef char udf_dstring;
115 #define UDF_LENGTH_MASK 0x3fffffff
116 
118 
121 {
124 } GNUC_PACKED;
125 
127 
130 {
141 } GNUC_PACKED;
142 
144 
150 typedef enum {
157 
158 
159 #define TIMESTAMP_TYPE_MASK 0xF000
160 #define TIMESTAMP_TYPE_CUT 0x0000
161 #define TIMESTAMP_TYPE_LOCAL 0x1000
162 #define TIMESTAMP_TYPE_AGREEMENT 0x2000
163 #define TIMESTAMP_TIMEZONE_MASK 0x0FFF
164 
166 {
170  udf_Uint8_t reserved[4];
171 } GNUC_PACKED;
172 
174 
177 {
181 } GNUC_PACKED;
182 
183 typedef struct udf_regid_s udf_regid_t;
184 
186 #define ENTITYID_FLAGS_DIRTY 0x00
187 #define ENTITYID_FLAGS_PROTECTED 0x01
188 
191 {
195  udf_Uint8_t struct_data[2041];
196 } GNUC_PACKED;
197 
199 #define VSD_STD_ID_NSR02 "NSR02" /* (3/9.1) */
200 
203 /* The below const definitions are to faciltate debugging of the
204  values #define'd below. */
205 extern const char VSD_STD_ID_BEA01[sizeof("BEA01")-1];
206 extern const char VSD_STD_ID_BOOT2[sizeof("BOOT2")-1];
207 extern const char VSD_STD_ID_CD001[sizeof("CD001")-1];
208 extern const char VSD_STD_ID_CDW01[sizeof("CDW02")-1];
209 extern const char VSD_STD_ID_NSR03[sizeof("NSR03")-1];
210 extern const char VSD_STD_ID_TEA01[sizeof("TEA01")-1];
211 
212 #define VSD_STD_ID_BEA01 "BEA01"
213 #define VSD_STD_ID_BOOT2 "BOOT2"
214 #define VSD_STD_ID_CD001 "CD001"
215 #define VSD_STD_ID_CDW02 "CDW02"
216 #define VSD_STD_ID_NSR02 "NSR02"
218 #define VSD_STD_ID_NSR03 "NSR03"
219 #define VSD_STD_ID_TEA01 "TEA01"
222 struct beginning_extended_area_desc_s
223 {
224  udf_Uint8_t struct_type;
226  udf_Uint8_t struct_version;
227  udf_Uint8_t struct_data[2041];
229 
232 {
233  udf_Uint8_t struct_type;
235  udf_Uint8_t struct_version;
236  udf_Uint8_t struct_data[2041];
238 
240 struct boot_desc_s
241 {
242  udf_Uint8_t struct_type;
244  udf_Uint8_t struct_version;
245  udf_Uint8_t reserved1;
246  udf_regid_t arch_type;
247  udf_regid_t boot_ident;
248  udf_Uint32_t bool_ext_location;
249  udf_Uint32_t bool_ext_length;
250  udf_Uint64_t load_address;
251  udf_Uint64_t start_address;
252  udf_timestamp_t desc_creation_time;
254  udf_Uint8_t reserved2[32];
255  udf_Uint8_t boot_use[1906];
257 
259 #define BOOT_FLAGS_ERASE 0x01
262 struct udf_extent_ad_s
263 {
264  udf_Uint32_t len;
267 
268 typedef struct udf_extent_ad_s udf_extent_ad_t;
271 struct udf_tag_s
272 {
273  udf_Uint16_t id;
274  udf_Uint16_t desc_version;
275  udf_Uint8_t cksum;
276  udf_Uint8_t reserved;
277  udf_Uint16_t i_serial;
278  udf_Uint16_t desc_CRC;
279  udf_Uint16_t desc_CRC_len;
282 
283 typedef struct udf_tag_s udf_tag_t;
286 struct NSR_desc_s
287 {
288  udf_Uint8_t struct_type;
290  udf_Uint8_t struct_version;
291  udf_Uint8_t reserved;
292  udf_Uint8_t struct_data[2040];
294 
296 struct udf_pvd_s
297 {
298  udf_tag_t tag;
299  udf_Uint32_t vol_desc_seq_num;
300  udf_Uint32_t primary_vol_desc_num;
302  udf_Uint16_t vol_seq_num;
303  udf_Uint16_t max_vol_seqnum;
304  udf_Uint16_t interchange_lvl;
305  udf_Uint16_t max_interchange_lvl;
306  udf_Uint32_t charset_list;
307  udf_Uint32_t max_charset_list;
309  udf_charspec_t desc_charset;
310  udf_charspec_t explanatory_charset;
311  udf_extent_ad_t vol_abstract;
312  udf_extent_ad_t vol_copyright;
313  udf_regid_t app_ident;
314  udf_timestamp_t recording_time;
315  udf_regid_t imp_ident;
316  udf_Uint8_t imp_use[64];
317  udf_Uint32_t predecessor_vol_desc_seq_location;
319  udf_Uint8_t reserved[22];
321 
322 typedef struct udf_pvd_s udf_pvd_t;
325 #define PVD_FLAGS_VSID_COMMON 0x0001
329 {
330  udf_tag_t tag;
331  udf_extent_ad_t main_vol_desc_seq_ext;
332  udf_extent_ad_t reserve_vol_desc_seq_ext;
333  udf_Uint8_t reserved[480];
335 
339 struct vol_desc_ptr_s
340 {
341  udf_tag_t tag;
342  udf_Uint32_t vol_desc_seq_num;
343  udf_extent_ad_t next_vol_desc_set_ext;
344  udf_Uint8_t reserved[484];
346 
348 struct imp_use_vol_desc_s
349 {
350  udf_tag_t tag;
351  udf_Uint32_t vol_desc_seq_num;
352  udf_regid_t imp_id;
353  udf_Uint8_t imp_use[460];
355 
357 struct partition_desc_s
358 {
359  udf_tag_t tag;
360  udf_Uint32_t vol_desc_seq_num;
362  udf_Uint16_t number;
363  udf_regid_t contents;
364  udf_Uint8_t contents_use[128];
365  udf_Uint32_t access_type;
366  udf_Uint32_t start_loc;
367  udf_Uint32_t part_len;
368  udf_regid_t imp_id;
369  udf_Uint8_t imp_use[128];
370  udf_Uint8_t reserved[156];
372 
373 typedef struct partition_desc_s partition_desc_t;
376 #define PD_PARTITION_FLAGS_ALLOC 0x0001
379 #define PD_PARTITION_CONTENTS_NSR02 "+NSR02"
382 #define PD_PARTITION_CONTENTS_FDC01 "+FDC01"
383 #define PD_PARTITION_CONTENTS_CD001 "+CD001"
384 #define PD_PARTITION_CONTENTS_CDW02 "+CDW02"
385 #define PD_PARTITION_CONTENTS_NSR03 "+NSR03"
388 #define PD_ACCESS_TYPE_NONE 0x00000000
389 #define PD_ACCESS_TYPE_READ_ONLY 0x00000001
390 #define PD_ACCESS_TYPE_WRITE_ONCE 0x00000002
391 #define PD_ACCESS_TYPE_REWRITABLE 0x00000003
392 #define PD_ACCESS_TYPE_OVERWRITABLE 0x00000004
395 struct udf_lb_addr_s
396 {
397  udf_Uint32_t lba;
398  udf_Uint16_t partitionReferenceNum;
400 
401 typedef struct udf_lb_addr_s udf_lb_addr_t;
404 struct udf_short_ad_s
405 {
406  udf_Uint32_t len;
409 
410 typedef struct udf_short_ad_s udf_short_ad_t;
413 struct udf_long_ad_s
414 {
415  udf_Uint32_t len;
417  udf_Uint8_t imp_use[6];
419 
420 typedef struct udf_long_ad_s udf_long_ad_t;
423 struct logical_vol_desc_s
424 {
425  udf_tag_t tag;
426  udf_Uint32_t seq_num;
427  udf_charspec_t desc_charset;
428  udf_dstring logvol_id[128];
429  udf_Uint32_t logical_blocksize;
430  udf_regid_t domain_id;
431  union {
432  udf_long_ad_t fsd_loc;
433  udf_Uint8_t logvol_content_use[16];
434  } lvd_use;
435  udf_Uint8_t logvol_contents_use[16];
436  udf_Uint32_t maptable_len;
437  udf_Uint32_t i_partition_maps;
438  udf_regid_t imp_id;
439  udf_Uint8_t imp_use[128];
440  udf_extent_ad_t integrity_seq_ext;
441  udf_Uint8_t partition_maps[0];
443 
448 {
449  udf_Uint8_t partition_map_type;
450  udf_Uint8_t partition_map_length;
451  udf_Uint8_t partition_mapping[0];
453 
455 #define GP_PARTITION_MAP_TYPE_UNDEF 0x00
456 #define GP_PARTIITON_MAP_TYPE_1 0x01
457 #define GP_PARTITION_MAP_TYPE_2 0x02
461 {
462  udf_Uint8_t partition_map_type;
463  udf_Uint8_t partition_map_length;
464  udf_Uint16_t vol_seq_num;
465  udf_Uint16_t i_partition;
467 
470 {
471  udf_Uint8_t partition_map_type;
472  udf_Uint8_t partition_map_length;
473  udf_Uint8_t partition_id[62];
475 
478 {
479  udf_tag_t tag;
480  udf_Uint32_t vol_desc_seq_num;
481  udf_Uint32_t i_alloc_descs;
482  udf_extent_ad_t allocDescs[0];
484 
486 struct terminating_desc_s
487 {
488  udf_tag_t tag;
489  udf_Uint8_t reserved[496];
491 
494 {
495  udf_tag_t tag;
496  udf_timestamp_t recording_time;
497  udf_Uint32_t integrity_type;
498  udf_extent_ad_t next_integrity_ext;
499  udf_Uint8_t logvol_contents_use[32];
500  udf_Uint32_t i_partitions;
501  union { /* Same MSVC workaround as with struct udf_fileid_desc_s */
502  udf_Uint32_t imp_use_len;
503  struct {
504  udf_Uint32_t unused;
505  udf_Uint32_t data[0];
506  } freespace_table;
507  struct {
508  udf_Uint32_t unused;
509  udf_Uint32_t data[0];
510  } size_table;
511  struct {
512  udf_Uint32_t unused;
513  udf_Uint32_t data[0];
514  } imp_use;
515  } u;
516 } GNUC_PACKED;
517 
519 #define LVID_INTEGRITY_TYPE_OPEN 0x00000000
520 #define LVID_INTEGRITY_TYPE_CLOSE 0x00000001
523 struct udf_ext_ad_s
524 {
525  udf_Uint32_t len;
526  udf_Uint32_t recorded_len;
527  udf_Uint32_t information_len;
528  udf_lb_addr_t ext_loc;
530 
531 typedef struct udf_ext_ad_s udf_ext_ad_t;
538 struct udf_fsd_s
539 {
540  udf_tag_t tag;
541  udf_timestamp_t recording_time;
542  udf_Uint16_t interchange_lvl;
543  udf_Uint16_t maxInterchange_lvl;
544  udf_Uint32_t charset_list;
545  udf_Uint32_t max_charset_list;
546  udf_Uint32_t fileset_num;
547  udf_Uint32_t udf_fsd_num;
548  udf_charspec_t logical_vol_id_charset;
549  udf_dstring logical_vol_id[128];
550  udf_charspec_t fileset_charset;
551  udf_dstring fileSet_id[32];
552  udf_dstring copyright_file_id[32];
553  udf_dstring abstract_file_id[32];
554  udf_long_ad_t root_icb;
555  udf_regid_t domain_id;
556  udf_long_ad_t next_ext;
557  udf_long_ad_t stream_directory_ICB;
558  udf_Uint8_t reserved[32];
560 
561 typedef struct udf_fsd_s udf_fsd_t;
565 {
566  udf_short_ad_t unalloc_space_table;
567  udf_short_ad_t unalloc_space_bitmap;
568  udf_short_ad_t partition_integrity_table;
569  udf_short_ad_t freed_space_table;
570  udf_short_ad_t freed_space_bitmap;
571  udf_Uint8_t reserved[88];
573 
577 struct udf_fileid_desc_s
578 {
579  udf_tag_t tag;
580  udf_Uint16_t file_version_num;
581  udf_Uint8_t file_characteristics;
582  udf_Uint8_t i_file_id;
584  /* MSVC workaround for multiple zero sized arrays
585  Unlike what is the case with GNU, and against logic, an union of zero
586  sized arrays in the Microsoft world is not zero bytes but one byte!
587  Thus, for sizeof() to be consistent across platforms, we must use an
588  ugly workaround that attaches the union to the last non-zero member. */
589  union {
590  udf_Uint16_t i_imp_use;
591  struct {
592  udf_Uint16_t unused;
593  udf_Uint8_t data[0];
594  } imp_use;
595  struct {
596  udf_Uint16_t unused;
597  udf_Uint8_t data[0];
598  } file_id;
599  struct {
600  udf_Uint16_t unused;
601  udf_Uint8_t data[0];
602  } padding;
603  } u;
604 } GNUC_PACKED;
605 
606 typedef struct udf_fileid_desc_s udf_fileid_desc_t;
613 typedef enum {
614  UDF_FILE_HIDDEN = (1 << 0),
615  UDF_FILE_DIRECTORY = (1 << 1),
616  UDF_FILE_DELETED = (1 << 2),
617  UDF_FILE_PARENT = (1 << 3),
618  UDF_FILE_METADATA = (1 << 4)
620 
622 struct allocExtDesc
623 {
624  udf_tag_t tag;
625  udf_Uint32_t previous_alloc_ext_loc;
626  udf_Uint32_t i_alloc_descs;
628 
630 struct udf_icbtag_s
631 {
632  udf_Uint32_t prev_num_dirs;
633  udf_Uint16_t strat_type;
634  udf_Uint16_t strat_param;
635  udf_Uint16_t max_num_entries;
636  udf_Uint8_t reserved;
637  udf_Uint8_t file_type;
638  udf_lb_addr_t parent_ICB;
641 
642 typedef struct udf_icbtag_s udf_icbtag_t;
644 #define UDF_ICB_TAG_FLAGS_SETUID 0x40
645 #define UDF_ICB_TAG_FLAGS_SETGID 0x80
646 #define UDF_ICB_TAG_FLAGS_STICKY 0x100
650 #define ICBTAG_STRATEGY_TYPE_UNDEF 0x0000
651 #define ICBTAG_STRATEGY_TYPE_1 0x0001
652 #define ICBTAG_STRATEGY_TYPE_2 0x0002
653 #define ICBTAG_STRATEGY_TYPE_3 0x0003
654 #define ICBTAG_STRATEGY_TYPE_4 0x0004
664 typedef enum {
665  ICBTAG_FILE_TYPE_UNDEF = 0x00,
666  ICBTAG_FILE_TYPE_USE = 0x01,
667  ICBTAG_FILE_TYPE_PIE = 0x02,
682 typedef enum {
683  ICBTAG_FLAG_AD_MASK = 0x0007,
685  ICBTAG_FLAG_AD_SHORT = 0x0000,
691  ICBTAG_FLAG_AD_LONG = 0x0001,
697  ICBTAG_FLAG_AD_EXTENDED = 0x0002,
698  ICBTAG_FLAG_AD_IN_ICB = 0x0003,
704  ICBTAG_FLAG_ARCHIVE = 0x0020,
705  ICBTAG_FLAG_SETUID = 0x0040,
714 
717 {
718  udf_tag_t tag;
719  udf_icbtag_t icb_tag;
720  udf_long_ad_t indirect_ICB;
721 } GNUC_PACKED;
725 {
726  udf_tag_t tag;
727  udf_icbtag_t icb_tag;
729 
732 {
733  udf_tag_t tag;
734  udf_icbtag_t icb_tag;
736  udf_Uint32_t gid;
737  udf_Uint32_t permissions;
738  udf_Uint16_t link_count;
739  udf_Uint8_t rec_format;
740  udf_Uint8_t rec_disp_attr;
741  udf_Uint32_t rec_len;
742  udf_Uint64_t info_len;
743  udf_Uint64_t logblks_recorded;
744  udf_timestamp_t access_time;
747  udf_timestamp_t modification_time;
750  udf_timestamp_t attribute_time;
751  udf_Uint32_t checkpoint;
752  udf_long_ad_t ext_attr_ICB;
753  udf_regid_t imp_id;
754  udf_Uint64_t unique_ID;
755  udf_Uint32_t i_extended_attr;
756  udf_Uint32_t i_alloc_descs;
757  /* The following union allows file entry reuse without worrying
758  about overflows, by ensuring the struct is always the
759  maximum possible size allowed by the specs: one UDF block. */
760  union {
761  udf_Uint8_t ext_attr[0];
762  udf_Uint8_t alloc_descs[0];
763  udf_Uint8_t pad_to_one_block[2048-176];
764  } u;
768 
769 #define UDF_FENTRY_SIZE 176
770 #define UDF_FENTRY_PERM_USER_MASK 0x07
771 #define UDF_FENTRY_PERM_GRP_MASK 0xE0
772 #define UDF_FENTRY_PERM_OWNER_MASK 0x1C00
775 #define FE_PERM_O_EXEC 0x00000001U
776 #define FE_PERM_O_WRITE 0x00000002U
777 #define FE_PERM_O_READ 0x00000004U
778 #define FE_PERM_O_CHATTR 0x00000008U
779 #define FE_PERM_O_DELETE 0x00000010U
780 #define FE_PERM_G_EXEC 0x00000020U
781 #define FE_PERM_G_WRITE 0x00000040U
782 #define FE_PERM_G_READ 0x00000080U
783 #define FE_PERM_G_CHATTR 0x00000100U
784 #define FE_PERM_G_DELETE 0x00000200U
785 #define FE_PERM_U_EXEC 0x00000400U
786 #define FE_PERM_U_WRITE 0x00000800U
787 #define FE_PERM_U_READ 0x00001000U
788 #define FE_PERM_U_CHATTR 0x00002000U
789 #define FE_PERM_U_DELETE 0x00004000U
792 #define FE_RECORD_FMT_UNDEF 0x00
793 #define FE_RECORD_FMT_FIXED_PAD 0x01
794 #define FE_RECORD_FMT_FIXED 0x02
795 #define FE_RECORD_FMT_VARIABLE8 0x03
796 #define FE_RECORD_FMT_VARIABLE16 0x04
797 #define FE_RECORD_FMT_VARIABLE16_MSB 0x05
798 #define FE_RECORD_FMT_VARIABLE32 0x06
799 #define FE_RECORD_FMT_PRINT 0x07
800 #define FE_RECORD_FMT_LF 0x08
801 #define FE_RECORD_FMT_CR 0x09
802 #define FE_RECORD_FMT_CRLF 0x0A
803 #define FE_RECORD_FMT_LFCR 0x0B
806 #define FE_RECORD_DISPLAY_ATTR_UNDEF 0x00
807 #define FE_RECORD_DISPLAY_ATTR_1 0x01
808 #define FE_RECORD_DISPLAY_ATTR_2 0x02
809 #define FE_RECORD_DISPLAY_ATTR_3 0x03
813 {
814  udf_tag_t tag;
815  udf_Uint32_t imp_attr_location;
816  udf_Uint32_t app_attr_location;
817 } GNUC_PACKED;
821 {
822  udf_Uint32_t attr_type;
823  udf_Uint8_t attr_subtype;
824  udf_Uint8_t reserved[3];
825  udf_Uint32_t attrLength;
826  udf_Uint8_t attrData[0];
831 {
832  udf_Uint32_t attr_type;
833  udf_Uint8_t attr_subtype;
834  udf_Uint8_t reserved[3];
835  udf_Uint32_t attrLength;
836  udf_Uint32_t escapeSeqLength;
837  udf_Uint8_t charSetType;
838  udf_Uint8_t escapeSeq[0];
841 /* Alternate Permissions (ECMA 167r3 4/14.10.4) */
843 {
844  udf_Uint32_t attr_type;
845  udf_Uint8_t attr_subtype;
846  udf_Uint8_t reserved[3];
847  udf_Uint32_t attrLength;
848  udf_Uint16_t owner_id;
849  udf_Uint16_t group_id;
850  udf_Uint16_t permission;
855 {
856  udf_Uint32_t attr_type;
857  udf_Uint8_t attr_subtype;
858  udf_Uint8_t reserved[3];
859  udf_Uint32_t attrLength;
860  udf_Uint32_t dataLength;
861  udf_Uint32_t fileTimeExistence;
862  udf_Uint8_t fileTimes;
866 #define FTE_CREATION 0x00000001
867 #define FTE_DELETION 0x00000004
868 #define FTE_EFFECTIVE 0x00000008
869 #define FTE_BACKUP 0x00000002
873 {
874  udf_Uint32_t attr_type;
875  udf_Uint8_t attr_subtype;
876  udf_Uint8_t reserved[3];
877  udf_Uint32_t attrLength;
878  udf_Uint32_t dataLength;
879  udf_Uint32_t infoTimeExistence;
880  udf_Uint8_t infoTimes[0];
885 {
886  udf_Uint32_t attr_type;
887  udf_Uint8_t attr_subtype;
888  udf_Uint8_t reserved[3];
889  udf_Uint32_t attrLength;
890  udf_Uint32_t imp_useLength;
891  udf_Uint32_t majorDevice_id;
892  udf_Uint32_t minorDevice_id;
893  udf_Uint8_t imp_use[0];
898 {
899  udf_Uint32_t attr_type;
900  udf_Uint8_t attr_subtype;
901  udf_Uint8_t reserved[3];
902  udf_Uint32_t attrLength;
903  udf_Uint32_t imp_useLength;
904  udf_regid_t imp_id;
905  udf_Uint8_t imp_use[0];
910 {
911  udf_Uint32_t attr_type;
912  udf_Uint8_t attr_subtype;
913  udf_Uint8_t reserved[3];
914  udf_Uint32_t attrLength;
915  udf_Uint32_t appUseLength;
916  udf_regid_t app_id;
917  udf_Uint8_t appUse[0];
920 #define EXTATTR_CHAR_SET 1
921 #define EXTATTR_ALT_PERMS 3
922 #define EXTATTR_FILE_TIMES 5
923 #define EXTATTR_INFO_TIMES 6
924 #define EXTATTR_DEV_SPEC 12
925 #define EXTATTR_IMP_USE 2048
926 #define EXTATTR_APP_USE 65536
931 {
932  udf_tag_t tag;
933  udf_icbtag_t icb_tag;
934  udf_Uint32_t lengthAllocDescs;
935  udf_Uint8_t allocDescs[0];
940 {
941  udf_tag_t tag;
942  udf_Uint32_t i_bits;
943  udf_Uint32_t i_bytes;
944  udf_Uint8_t bitmap[0];
949 {
950  udf_tag_t tag;
951  udf_icbtag_t icb_tag;
952  udf_timestamp_t recording_time;
953  udf_Uint8_t integrityType;
954  udf_Uint8_t reserved[175];
955  udf_regid_t imp_id;
956  udf_Uint8_t imp_use[256];
962 #define EXT_RECORDED_ALLOCATED 0x00000000
963 #define EXT_NOT_RECORDED_ALLOCATED 0x40000000
964 #define EXT_NOT_RECORDED_NOT_ALLOCATED 0x80000000
965 #define EXT_NEXT_EXTENT_ALLOCDECS 0xC0000000
973 {
974  udf_Uint64_t uniqueID;
975  udf_Uint8_t reserved[24];
977 
981 struct pathComponent
982 {
983  udf_Uint8_t component_type;
984  udf_Uint8_t lengthComponent_id;
985  udf_Uint16_t componentFileVersionNum;
986  udf_dstring component_id[0];
991 {
992  udf_tag_t tag;
993  udf_icbtag_t icb_tag;
995  udf_Uint32_t gid;
996  udf_Uint32_t permissions;
997  udf_Uint16_t link_count;
998  udf_Uint8_t rec_format;
999  udf_Uint8_t rec_display_attr;
1000  udf_Uint32_t record_len;
1001  udf_Uint64_t info_len;
1002  udf_Uint64_t object_size;
1003  udf_Uint64_t logblks_recorded;
1004  udf_timestamp_t access_time;
1006  udf_timestamp_t modification_time;
1009  udf_timestamp_t create_time;
1010  udf_timestamp_t attribute_time;
1013  udf_Uint32_t checkpoint;
1014  udf_Uint32_t reserved;
1015  udf_long_ad_t ext_attr_ICB;
1016  udf_long_ad_t stream_directory_ICB;
1017  udf_regid_t imp_id;
1018  udf_Uint64_t unique_ID;
1019  udf_Uint32_t length_extended_attr;
1020  udf_Uint32_t length_alloc_descs;
1021  union { /* MSVC workaround for multiple zero sized arrays */
1022  udf_Uint8_t ext_attr[0];
1023  udf_Uint8_t alloc_descs[0];
1024  udf_Uint8_t pad_to_one_block[2048-216];
1025  } u;
1029 
1035 extern tag_id_t debug_tagid;
1041 
1042 #endif /* CDIO_ECMA_167_H */
Definition: ecma_167.h:65
Definition: ecma_167.h:424
Definition: ecma_167.h:349
Definition: ecma_167.h:816
Definition: ecma_167.h:702
Definition: ecma_167.h:232
Definition: ecma_167.h:80
Definition: ecma_167.h:913
ecma_167_timezone_enum_t
Definition: ecma_167.h:150
udf_Uint8_t charset_type
Definition: ecma_167.h:122
Definition: ecma_167.h:976
Definition: ecma_167.h:672
Definition: ecma_167.h:414
Common type definitions used pervasively in libcdio.
Definition: ecma_167.h:679
Definition: ecma_167.h:176
#define PRAGMA_END_PACKED
Definition: types.h:169
#define VSD_STD_ID_NSR03
Definition: ecma_167.h:219
Definition: ecma_167.h:103
udf_Uint8_t hundreds_of_microseconds
Definition: ecma_167.h:139
Definition: ecma_167.h:329
Definition: ecma_167.h:985
udf_Uint16_t year
Definition: ecma_167.h:132
Definition: ecma_167.h:97
Definition: ecma_167.h:669
udf_Uint8_t os_identifier
Definition: ecma_167.h:169
udf_Uint8_t minute
Definition: ecma_167.h:136
Definition: ecma_167.h:994
Definition: ecma_167.h:678
ecma_167_timezone_enum_t debug_ecma_167_timezone_enum
Definition: ecma_167.h:677
Definition: ecma_167.h:681
Definition: ecma_167.h:714
Definition: ecma_167.h:631
Definition: ecma_167.h:676
Definition: ecma_167.h:619
Definition: ecma_167.h:858
Definition: ecma_167.h:712
Definition: ecma_167.h:461
#define PRAGMA_BEGIN_PACKED
Definition: types.h:168
Definition: ecma_167.h:689
udf_Uint8_t second
Definition: ecma_167.h:137
Definition: ecma_167.h:396
Definition: ecma_167.h:616
Definition: ecma_167.h:83
PRAGMA_END_PACKED tag_id_t debug_tagid
Definition: ecma_167.h:695
Definition: ecma_167.h:104
Definition: ecma_167.h:711
udf_Uint16_t udf_revision
Definition: ecma_167.h:167
Definition: ecma_167.h:615
udf_Uint8_t os_class
Definition: ecma_167.h:168
Definition: ecma_167.h:73
Definition: ecma_167.h:707
Definition: ecma_167.h:448
Definition: ecma_167.h:934
udf_Uint8_t charset_info[63]
Definition: ecma_167.h:123
#define TIMESTAMP_TIMEZONE_MASK
Definition: ecma_167.h:163
Definition: ecma_167.h:91
Definition: ecma_167.h:84
Definition: ecma_167.h:102
PRAGMA_BEGIN_PACKED struct udf_charspec_s GNUC_PACKED
const char VSD_STD_ID_CDW01[sizeof("CDW02") -1]
Definition: ecma_167.h:671
Definition: ecma_167.h:565
Definition: ecma_167.h:89
ecma_167_enum1_t debug_ecma_167_enum1
uint8_t udf_Uint8_t
Definition: ecma_167.h:109
Definition: ecma_167.h:77
Definition: ecma_167.h:75
icbtag_file_type_enum_t debug_icbtag_file_type_enum
udf_Uint8_t flags
Definition: ecma_167.h:178
Definition: ecma_167.h:720
Definition: ecma_167.h:709
Definition: ecma_167.h:670
uint64_t udf_Uint64_t
Definition: ecma_167.h:112
Definition: ecma_167.h:470
Definition: ecma_167.h:82
Definition: ecma_167.h:675
Definition: ecma_167.h:241
Definition: ecma_167.h:494
icbtag_file_type_enum_t
Definition: ecma_167.h:668
char udf_dstring
Definition: ecma_167.h:113
udf_Uint16_t type_tz
Definition: ecma_167.h:131
uint32_t udf_Uint32_t
Definition: ecma_167.h:111
Definition: ecma_167.h:64
Definition: ecma_167.h:66
Definition: ecma_167.h:674
Definition: ecma_167.h:888
Definition: ecma_167.h:120
Definition: ecma_167.h:78
uint16_t udf_Uint16_t
Definition: ecma_167.h:110
Definition: ecma_167.h:706
ecma_167_enum1_t
Definition: ecma_167.h:61
Definition: ecma_167.h:106
Definition: ecma_167.h:87
#define TIMESTAMP_TYPE_MASK
Definition: ecma_167.h:159
file_characteristics_t debug_file_characteristics
#define VSD_STD_ID_BEA01
Definition: ecma_167.h:212
Definition: ecma_167.h:79
icbtag_flag_enum_t
Definition: ecma_167.h:686
udf_Uint8_t struct_type
Definition: ecma_167.h:192
Definition: ecma_167.h:99
Definition: ecma_167.h:165
Definition: ecma_167.h:715
Definition: ecma_167.h:358
Definition: ecma_167.h:190
Definition: ecma_167.h:901
Definition: ecma_167.h:88
#define VSD_STD_ID_TEA01
Definition: ecma_167.h:220
Definition: ecma_167.h:86
Definition: ecma_167.h:287
tag_id_t
Definition: ecma_167.h:72
Definition: ecma_167.h:272
Definition: ecma_167.h:708
Definition: ecma_167.h:834
#define VSD_STD_ID_BOOT2
Definition: ecma_167.h:213
Definition: ecma_167.h:617
file_characteristics_t
Definition: ecma_167.h:614
#define TIMESTAMP_TYPE_AGREEMENT
Definition: ecma_167.h:162
#define TIMESTAMP_TYPE_LOCAL
Definition: ecma_167.h:161
Definition: ecma_167.h:539
Definition: ecma_167.h:846
Definition: ecma_167.h:876
udf_Uint8_t centiseconds
Definition: ecma_167.h:138
Definition: ecma_167.h:673
Definition: ecma_167.h:76
#define VSD_STD_ID_CD001
Definition: ecma_167.h:214
Definition: ecma_167.h:62
Definition: ecma_167.h:710
Definition: ecma_167.h:67
udf_Uint8_t struct_version
Definition: ecma_167.h:194
Definition: ecma_167.h:340
#define TIMESTAMP_TYPE_CUT
Definition: ecma_167.h:160
Definition: ecma_167.h:297
Definition: ecma_167.h:682
udf_Uint8_t day
Definition: ecma_167.h:134
Definition: ecma_167.h:85
Definition: ecma_167.h:728
Definition: ecma_167.h:716
Definition: ecma_167.h:100
Definition: ecma_167.h:701
Definition: ecma_167.h:74
Definition: ecma_167.h:735
icbtag_flag_enum_t debug_flag_enum
Definition: ecma_167.h:618
Definition: ecma_167.h:92
Definition: ecma_167.h:263
Definition: ecma_167.h:405
udf_Uint8_t hour
Definition: ecma_167.h:135
udf_Uint8_t month
Definition: ecma_167.h:133
Definition: ecma_167.h:623
udf_charspec_enum_t
Definition: ecma_167.h:96
Definition: ecma_167.h:680
Definition: ecma_167.h:90
Definition: ecma_167.h:713
Definition: ecma_167.h:687
Definition: ecma_167.h:487
udf_Uint8_t microseconds
Definition: ecma_167.h:140
Definition: ecma_167.h:129
Definition: ecma_167.h:101
Definition: ecma_167.h:98
Definition: ecma_167.h:952
Definition: ecma_167.h:943
udf_id_suffix_t id_suffix
Definition: ecma_167.h:180
Definition: ecma_167.h:524
Definition: ecma_167.h:824
Definition: ecma_167.h:478
Definition: ecma_167.h:81
Definition: ecma_167.h:578