ecma_167.h

Go to the documentation of this file.
00001  /* 
00002   Copyright (c) 2005, 2006 Rocky Bernstein <rocky@cpan.org>
00003   Copyright (c) 2001-2002  Ben Fennema <bfennema@falcon.csc.calpoly.edu>
00004     This program is free software; you can redistribute it and/or modify
00005     it under the terms of the GNU General Public License as published by
00006     the Free Software Foundation; either version 2 of the License, or
00007     (at your option) any later version.
00008 
00009     This program is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with this program; if not, write to the Free Software
00016     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 */
00018 /*
00019  * Some portions taken from FreeBSD ecma167-udf.h which states:
00020  * Copyright (c) 2001, 2002 Scott Long <scottl@freebsd.org>
00021  * All rights reserved.
00022  *
00023  * Redistribution and use in source and binary forms, with or without
00024  * modification, are permitted provided that the following conditions
00025  * are met:
00026  * 1. Redistributions of source code must retain the above copyright
00027  *    notice, this list of conditions and the following disclaimer.
00028  * 2. Redistributions in binary form must reproduce the above copyright
00029  *    notice, this list of conditions and the following disclaimer in the
00030  *    documentation and/or other materials provided with the distribution.
00031  *
00032  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00033  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00034  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00035  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00036  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00037  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00038  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00039  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00040  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00041  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00042  * SUCH DAMAGE.
00043  */
00044 
00052 #ifndef _ECMA_167_H
00053 #define _ECMA_167_H 1
00054 
00055 #include <cdio/types.h>
00056 
00061 typedef enum {
00062   VSD_STD_ID_SIZE    =    5, 
00064   UDF_REGID_ID_SIZE  =   23, 
00065   UDF_VOLID_SIZE     =   32,
00066   UDF_FID_SIZE       =   38,
00067   UDF_VOLSET_ID_SIZE =  128
00068 } ecma_167_enum1_t ;
00069 
00072 typedef enum {
00073   TAGID_PRI_VOL          = 0x0001,
00074   TAGID_ANCHOR           = 0x0002,
00075   TAGID_VOL              = 0x0003,
00076   TAGID_IMP_VOL          = 0x0004,
00077   TAGID_PARTITION        = 0x0005,
00078   TAGID_LOGVOL           = 0x0006,
00079   TAGID_UNALLOC_SPACE    = 0x0007,
00080   TAGID_TERM             = 0x0008,
00081   TAGID_LOGVOL_INTEGRITY = 0x0009,
00082   TAGID_FSD              = 0x0100,
00083   TAGID_FID              = 0x0101,
00084   TAGID_AED              = 0x0102,
00085   TAGID_IE               = 0x0103,
00086   TAGID_TE               = 0x0104,
00087   TAGID_FILE_ENTRY       = 0x0105,
00088   TAGID_EAHD             = 0x0106,
00089   TAGID_USE              = 0x0107,
00090   TAGID_SBD              = 0x0108,
00091   TAGID_PIE              = 0x0109,
00092   TAGID_EFE              = 0x010A,
00093 } tag_id_t ;
00094 
00096 typedef enum {
00097   CHARSPEC_TYPE_CS0 = 0x00,     
00098   CHARSPEC_TYPE_CS1 = 0x01,     
00099   CHARSPEC_TYPE_CS2 = 0x02,     
00100   CHARSPEC_TYPE_CS3 = 0x03,     
00101   CHARSPEC_TYPE_CS4 = 0x04,     
00102   CHARSPEC_TYPE_CS5 = 0x05,     
00103   CHARSPEC_TYPE_CS6 = 0x06,     
00104   CHARSPEC_TYPE_CS7 = 0x07,     
00106   CHARSPEC_TYPE_CS8 = 0x08,     
00107 } udf_charspec_enum_t;
00108   
00109 typedef uint8_t  udf_Uint8_t;  
00110 typedef uint16_t udf_Uint16_t; 
00111 typedef uint32_t udf_Uint32_t; 
00112 typedef uint64_t udf_Uint64_t; 
00113 typedef char     udf_dstring;  
00115 #define UDF_LENGTH_MASK 0x3fffffff
00116 
00117 PRAGMA_BEGIN_PACKED
00118 
00120 struct udf_charspec_s
00121 {
00122   udf_Uint8_t   charset_type;
00123   udf_Uint8_t   charset_info[63];
00124 } GNUC_PACKED;
00125 
00126 typedef struct udf_charspec_s udf_charspec_t;
00127 
00129 struct udf_timestamp_s
00130 {
00131   udf_Uint16_t          type_tz;
00132   udf_Uint16_t          year;
00133   udf_Uint8_t           month;
00134   udf_Uint8_t           day;
00135   udf_Uint8_t           hour;
00136   udf_Uint8_t           minute;
00137   udf_Uint8_t           second;
00138   udf_Uint8_t           centiseconds;
00139   udf_Uint8_t           hundreds_of_microseconds;
00140   udf_Uint8_t           microseconds;
00141 } GNUC_PACKED;
00142 
00143 typedef struct udf_timestamp_s udf_timestamp_t;
00144 
00150 typedef enum { 
00151   TIMESTAMP_TYPE_CUT        =   0x0000,
00152   TIMESTAMP_TYPE_LOCAL      =   0x1000,
00153   TIMESTAMP_TYPE_AGREEMENT  =   0x2000,
00154   TIMESTAMP_TYPE_MASK       =   0xF000,
00155   TIMESTAMP_TIMEZONE_MASK   =   0x0FFF,
00156 } ecma_167_timezone_enum_t ;
00157 
00158 
00159 #define TIMESTAMP_TYPE_MASK             0xF000
00160 #define TIMESTAMP_TYPE_CUT              0x0000
00161 #define TIMESTAMP_TYPE_LOCAL            0x1000
00162 #define TIMESTAMP_TYPE_AGREEMENT        0x2000
00163 #define TIMESTAMP_TIMEZONE_MASK         0x0FFF
00164 
00165 struct udf_id_suffix_s
00166 {
00167   udf_Uint16_t  udf_revision;
00168   udf_Uint8_t   os_class;
00169   udf_Uint8_t   os_identifier;
00170   udf_Uint8_t   reserved[4];
00171 } GNUC_PACKED;
00172 
00173 typedef struct udf_id_suffix_s udf_id_suffix_t;
00174 
00176 struct udf_regid_s
00177 {
00178   udf_Uint8_t           flags;
00179   udf_Uint8_t           id[UDF_REGID_ID_SIZE];
00180   udf_id_suffix_t       id_suffix;
00181 } GNUC_PACKED;
00182 
00183 typedef struct udf_regid_s udf_regid_t;
00184 
00186 #define ENTITYID_FLAGS_DIRTY            0x00
00187 #define ENTITYID_FLAGS_PROTECTED        0x01
00188 
00190 struct vol_struct_desc_s
00191 {
00192   udf_Uint8_t           struct_type;
00193   udf_Uint8_t           std_id[VSD_STD_ID_SIZE];
00194   udf_Uint8_t           struct_version;
00195   udf_Uint8_t           struct_data[2041];
00196 } GNUC_PACKED;
00197 
00199 #define VSD_STD_ID_NSR02                "NSR02" /* (3/9.1) */
00200 
00203 /* The below const definitions are to faciltate debugging of the
00204    values #define'd below. */
00205 extern const char VSD_STD_ID_BEA01[sizeof("BEA01")-1];
00206 extern const char VSD_STD_ID_BOOT2[sizeof("BOOT2")-1];
00207 extern const char VSD_STD_ID_CD001[sizeof("CD001")-1];
00208 extern const char VSD_STD_ID_CDW01[sizeof("CDW02")-1];
00209 extern const char VSD_STD_ID_NSR03[sizeof("NSR03")-1];
00210 extern const char VSD_STD_ID_TEA01[sizeof("TEA01")-1];
00211 
00212 #define VSD_STD_ID_BEA01                "BEA01" 
00213 #define VSD_STD_ID_BOOT2                "BOOT2" 
00214 #define VSD_STD_ID_CD001                "CD001" 
00215 #define VSD_STD_ID_CDW02                "CDW02" 
00216 #define VSD_STD_ID_NSR02                "NSR02" 
00218 #define VSD_STD_ID_NSR03                "NSR03" 
00219 #define VSD_STD_ID_TEA01                "TEA01" 
00222 struct beginning_extended_area_desc_s
00223 {
00224   udf_Uint8_t           struct_type;
00225   udf_Uint8_t           std_id[VSD_STD_ID_SIZE];
00226   udf_Uint8_t           struct_version;
00227   udf_Uint8_t           struct_data[2041];
00228 } GNUC_PACKED;
00229 
00231 struct terminating_extended_area_desc_s
00232 {
00233   udf_Uint8_t           struct_type;
00234   udf_Uint8_t           std_id[VSD_STD_ID_SIZE];
00235   udf_Uint8_t           struct_version;
00236   udf_Uint8_t           struct_data[2041];
00237 } GNUC_PACKED;
00238 
00240 struct boot_desc_s
00241 {
00242   udf_Uint8_t           struct_type;
00243   udf_Uint8_t           std_ident[VSD_STD_ID_SIZE];
00244   udf_Uint8_t           struct_version;
00245   udf_Uint8_t           reserved1;
00246   udf_regid_t           arch_type;
00247   udf_regid_t           boot_ident;
00248   udf_Uint32_t          bool_ext_location;
00249   udf_Uint32_t          bool_ext_length;
00250   udf_Uint64_t          load_address;
00251   udf_Uint64_t          start_address;
00252   udf_timestamp_t       desc_creation_time;
00253   udf_Uint16_t          flags;
00254   udf_Uint8_t           reserved2[32];
00255   udf_Uint8_t           boot_use[1906];
00256 } GNUC_PACKED;
00257 
00259 #define BOOT_FLAGS_ERASE                0x01
00260 
00262 struct udf_extent_ad_s
00263 {
00264   udf_Uint32_t          len;
00265   udf_Uint32_t          loc;
00266 } GNUC_PACKED;
00267 
00268 typedef struct udf_extent_ad_s udf_extent_ad_t;
00269 
00271 struct udf_tag_s
00272 {
00273   udf_Uint16_t          id;
00274   udf_Uint16_t          desc_version;
00275   udf_Uint8_t           cksum;
00276   udf_Uint8_t           reserved;
00277   udf_Uint16_t          i_serial;
00278   udf_Uint16_t          desc_CRC;
00279   udf_Uint16_t          desc_CRC_len;
00280   udf_Uint32_t          loc;
00281 } GNUC_PACKED;
00282 
00283 typedef struct udf_tag_s udf_tag_t;
00284 
00286 struct NSR_desc_s
00287 {
00288   udf_Uint8_t   struct_type;
00289   udf_Uint8_t   std_id[VSD_STD_ID_SIZE];
00290   udf_Uint8_t   struct_version;
00291   udf_Uint8_t   reserved;
00292   udf_Uint8_t   struct_data[2040];
00293 } GNUC_PACKED;
00294 
00296 struct udf_pvd_s
00297 {
00298   udf_tag_t       tag;
00299   udf_Uint32_t    vol_desc_seq_num;
00300   udf_Uint32_t    primary_vol_desc_num;
00301   udf_dstring     vol_ident[UDF_VOLID_SIZE];
00302   udf_Uint16_t    vol_seq_num;
00303   udf_Uint16_t    max_vol_seqnum;
00304   udf_Uint16_t    interchange_lvl;
00305   udf_Uint16_t    max_interchange_lvl;
00306   udf_Uint32_t    charset_list;
00307   udf_Uint32_t    max_charset_list;
00308   udf_dstring     volset_id[UDF_VOLSET_ID_SIZE];
00309   udf_charspec_t  desc_charset;
00310   udf_charspec_t  explanatory_charset;
00311   udf_extent_ad_t vol_abstract;
00312   udf_extent_ad_t vol_copyright;
00313   udf_regid_t     app_ident;
00314   udf_timestamp_t recording_time;
00315   udf_regid_t     imp_ident;
00316   udf_Uint8_t     imp_use[64];
00317   udf_Uint32_t    predecessor_vol_desc_seq_location;
00318   udf_Uint16_t    flags;
00319   udf_Uint8_t     reserved[22];
00320 } GNUC_PACKED;
00321 
00322 typedef struct udf_pvd_s udf_pvd_t;
00323 
00325 #define PVD_FLAGS_VSID_COMMON           0x0001
00326 
00328 struct anchor_vol_desc_ptr_s
00329 {
00330   udf_tag_t       tag;
00331   udf_extent_ad_t main_vol_desc_seq_ext;
00332   udf_extent_ad_t reserve_vol_desc_seq_ext;
00333   udf_Uint8_t     reserved[480];
00334 } GNUC_PACKED;
00335 
00336 typedef struct anchor_vol_desc_ptr_s anchor_vol_desc_ptr_t;
00337 
00339 struct vol_desc_ptr_s
00340 {
00341   udf_tag_t       tag;
00342   udf_Uint32_t    vol_desc_seq_num;
00343   udf_extent_ad_t next_vol_desc_set_ext;
00344   udf_Uint8_t     reserved[484];
00345 } GNUC_PACKED;
00346 
00348 struct imp_use_vol_desc_s
00349 {
00350   udf_tag_t    tag;
00351   udf_Uint32_t vol_desc_seq_num;
00352   udf_regid_t  imp_id;
00353   udf_Uint8_t  imp_use[460];
00354 } GNUC_PACKED;
00355 
00357 struct partition_desc_s
00358 {
00359   udf_tag_t     tag;
00360   udf_Uint32_t  vol_desc_seq_num;
00361   udf_Uint16_t  flags;
00362   udf_Uint16_t  number;             
00363   udf_regid_t   contents;
00364   udf_Uint8_t   contents_use[128];
00365   udf_Uint32_t  access_type;
00366   udf_Uint32_t  start_loc;
00367   udf_Uint32_t  part_len;
00368   udf_regid_t   imp_id;
00369   udf_Uint8_t   imp_use[128];
00370   udf_Uint8_t   reserved[156];
00371 } GNUC_PACKED;
00372 
00373 typedef struct partition_desc_s partition_desc_t;
00374 
00376 #define PD_PARTITION_FLAGS_ALLOC        0x0001
00377 
00379 #define PD_PARTITION_CONTENTS_NSR02     "+NSR02"
00380 
00382 #define PD_PARTITION_CONTENTS_FDC01     "+FDC01"
00383 #define PD_PARTITION_CONTENTS_CD001     "+CD001"
00384 #define PD_PARTITION_CONTENTS_CDW02     "+CDW02"
00385 #define PD_PARTITION_CONTENTS_NSR03     "+NSR03"
00386 
00388 #define PD_ACCESS_TYPE_NONE             0x00000000
00389 #define PD_ACCESS_TYPE_READ_ONLY        0x00000001
00390 #define PD_ACCESS_TYPE_WRITE_ONCE       0x00000002
00391 #define PD_ACCESS_TYPE_REWRITABLE       0x00000003
00392 #define PD_ACCESS_TYPE_OVERWRITABLE     0x00000004
00393 
00395 struct udf_lb_addr_s
00396 {
00397   udf_Uint32_t  lba;
00398   udf_Uint16_t  partitionReferenceNum;
00399 } GNUC_PACKED;
00400 
00401 typedef struct udf_lb_addr_s udf_lb_addr_t;
00402 
00404 struct udf_short_ad_s
00405 {
00406   udf_Uint32_t  len;
00407   udf_Uint32_t  pos;
00408 } GNUC_PACKED;
00409 
00410 typedef struct udf_short_ad_s udf_short_ad_t;
00411 
00413 struct udf_long_ad_s
00414 {
00415   udf_Uint32_t  len;
00416   udf_lb_addr_t loc;
00417   udf_Uint8_t   imp_use[6];
00418 } GNUC_PACKED;
00419 
00420 typedef struct udf_long_ad_s udf_long_ad_t;
00421 
00423 struct logical_vol_desc_s
00424 {
00425   udf_tag_t       tag;
00426   udf_Uint32_t    seq_num;
00427   udf_charspec_t  desc_charset;
00428   udf_dstring     logvol_id[128];
00429   udf_Uint32_t    logical_blocksize;
00430   udf_regid_t     domain_id;
00431   union {
00432     udf_long_ad_t fsd_loc;
00433     udf_Uint8_t   logvol_content_use[16];
00434   } lvd_use;
00435   udf_Uint8_t     logvol_contents_use[16];
00436   udf_Uint32_t    maptable_len;
00437   udf_Uint32_t    i_partition_maps;
00438   udf_regid_t     imp_id;
00439   udf_Uint8_t     imp_use[128];
00440   udf_extent_ad_t integrity_seq_ext;
00441   udf_Uint8_t     partition_maps[0];
00442 } GNUC_PACKED;
00443 
00444 typedef struct logical_vol_desc_s logical_vol_desc_t;
00445 
00447 struct generic_partition_map
00448 {
00449   udf_Uint8_t   partition_map_type;
00450   udf_Uint8_t   partition_map_length;
00451   udf_Uint8_t   partition_mapping[0];
00452 } GNUC_PACKED;
00453 
00455 #define GP_PARTITION_MAP_TYPE_UNDEF     0x00
00456 #define GP_PARTIITON_MAP_TYPE_1         0x01
00457 #define GP_PARTITION_MAP_TYPE_2         0x02
00458 
00460 struct generic_partition_map1
00461 {
00462   udf_Uint8_t   partition_map_type;
00463   udf_Uint8_t   partition_map_length;
00464   udf_Uint16_t  vol_seq_num;
00465   udf_Uint16_t  i_partition;
00466 } GNUC_PACKED;
00467 
00469 struct generic_partition_map2
00470 {
00471   udf_Uint8_t   partition_map_type;
00472   udf_Uint8_t   partition_map_length; 
00473   udf_Uint8_t   partition_id[62];
00474 } GNUC_PACKED;
00475 
00477 struct unalloc_space_desc_s
00478 {
00479   udf_tag_t       tag;
00480   udf_Uint32_t    vol_desc_seq_num;
00481   udf_Uint32_t    i_alloc_descs;
00482   udf_extent_ad_t allocDescs[0];
00483 } GNUC_PACKED;
00484 
00486 struct terminating_desc_s
00487 {
00488   udf_tag_t    tag;
00489   udf_Uint8_t   reserved[496];
00490 } GNUC_PACKED;
00491 
00493 struct logvol_integrity_desc_s
00494 {
00495   udf_tag_t       tag;
00496   udf_timestamp_t recording_time;
00497   udf_Uint32_t    integrity_type;
00498   udf_extent_ad_t next_integrity_ext;
00499   udf_Uint8_t     logvol_contents_use[32];
00500   udf_Uint32_t    i_partitions;
00501   udf_Uint32_t    imp_use_len;
00502   udf_Uint32_t    freespace_table[0];
00503   udf_Uint32_t    size_table[0];
00504   udf_Uint8_t     imp_use[0];
00505 } GNUC_PACKED;
00506 
00508 #define LVID_INTEGRITY_TYPE_OPEN        0x00000000
00509 #define LVID_INTEGRITY_TYPE_CLOSE       0x00000001
00510 
00512 struct udf_ext_ad_s
00513 {
00514   udf_Uint32_t  len;
00515   udf_Uint32_t  recorded_len;
00516   udf_Uint32_t  information_len;
00517   udf_lb_addr_t ext_loc;
00518 } GNUC_PACKED;
00519 
00520 typedef struct udf_ext_ad_s udf_ext_ad_t;
00521 
00527 struct udf_fsd_s
00528 {
00529   udf_tag_t       tag;
00530   udf_timestamp_t recording_time;
00531   udf_Uint16_t    interchange_lvl;
00532   udf_Uint16_t    maxInterchange_lvl;
00533   udf_Uint32_t    charset_list;
00534   udf_Uint32_t    max_charset_list;
00535   udf_Uint32_t    fileset_num;
00536   udf_Uint32_t    udf_fsd_num;
00537   udf_charspec_t  logical_vol_id_charset;
00538   udf_dstring     logical_vol_id[128];
00539   udf_charspec_t  fileset_charset;
00540   udf_dstring     fileSet_id[32];
00541   udf_dstring     copyright_file_id[32];
00542   udf_dstring     abstract_file_id[32];
00543   udf_long_ad_t   root_icb;
00544   udf_regid_t     domain_id;
00545   udf_long_ad_t   next_ext;
00546   udf_long_ad_t   stream_directory_ICB;
00547   udf_Uint8_t     reserved[32];
00548 } GNUC_PACKED;
00549 
00550 typedef struct udf_fsd_s udf_fsd_t;
00551 
00553 struct partition_header_desc_s
00554 {
00555   udf_short_ad_t unalloc_space_table;
00556   udf_short_ad_t unalloc_space_bitmap;
00557   udf_short_ad_t partition_integrity_table;
00558   udf_short_ad_t freed_space_table;
00559   udf_short_ad_t freed_space_bitmap;
00560   udf_Uint8_t    reserved[88];
00561 } GNUC_PACKED;
00562 
00563 typedef struct partition_header_desc_s partition_header_desc_t;
00564 
00566 struct udf_fileid_desc_s
00567 {
00568   udf_tag_t     tag;
00569   udf_Uint16_t  file_version_num;
00570   udf_Uint8_t   file_characteristics;
00571   udf_Uint8_t   i_file_id;
00572   udf_long_ad_t icb;
00573   udf_Uint16_t  i_imp_use;
00574   udf_Uint8_t   imp_use[0];
00575   udf_Uint8_t   file_id[0];
00576   udf_Uint8_t   padding[0];
00577 } GNUC_PACKED;
00578 
00579 typedef struct udf_fileid_desc_s udf_fileid_desc_t;
00580 
00586 typedef enum {
00587   UDF_FILE_HIDDEN       = (1 << 0),
00588   UDF_FILE_DIRECTORY    = (1 << 1),
00589   UDF_FILE_DELETED      = (1 << 2),
00590   UDF_FILE_PARENT       = (1 << 3),
00591   UDF_FILE_METADATA     = (1 << 4)
00592 } file_characteristics_t;
00593 
00595 struct allocExtDesc
00596 {
00597   udf_tag_t    tag;
00598   udf_Uint32_t previous_alloc_ext_loc;
00599   udf_Uint32_t i_alloc_descs;
00600 } GNUC_PACKED;
00601 
00603 struct udf_icbtag_s
00604 {
00605   udf_Uint32_t  prev_num_dirs;
00606   udf_Uint16_t  strat_type;
00607   udf_Uint16_t  strat_param;
00608   udf_Uint16_t  max_num_entries;
00609   udf_Uint8_t   reserved;
00610   udf_Uint8_t   file_type;
00611   udf_lb_addr_t parent_ICB;
00612   udf_Uint16_t  flags;
00613 } GNUC_PACKED;
00614 
00615 typedef struct udf_icbtag_s udf_icbtag_t;
00616 
00617 #define UDF_ICB_TAG_FLAGS_SETUID        0x40
00618 #define UDF_ICB_TAG_FLAGS_SETGID        0x80
00619 #define UDF_ICB_TAG_FLAGS_STICKY        0x100
00620 
00623 #define ICBTAG_STRATEGY_TYPE_UNDEF 0x0000 
00624 #define ICBTAG_STRATEGY_TYPE_1     0x0001 
00625 #define ICBTAG_STRATEGY_TYPE_2     0x0002 
00626 #define ICBTAG_STRATEGY_TYPE_3     0x0003 
00627 #define ICBTAG_STRATEGY_TYPE_4     0x0004 
00637 typedef enum {
00638   ICBTAG_FILE_TYPE_UNDEF =      0x00,
00639   ICBTAG_FILE_TYPE_USE =        0x01,
00640   ICBTAG_FILE_TYPE_PIE =        0x02,
00641   ICBTAG_FILE_TYPE_IE =         0x03,
00642   ICBTAG_FILE_TYPE_DIRECTORY =  0x04,
00643   ICBTAG_FILE_TYPE_REGULAR =    0x05,
00644   ICBTAG_FILE_TYPE_BLOCK =      0x06,
00645   ICBTAG_FILE_TYPE_CHAR =       0x07,
00646   ICBTAG_FILE_TYPE_EA =         0x08,
00647   ICBTAG_FILE_TYPE_FIFO =       0x09,
00648   ICBTAG_FILE_TYPE_SOCKET =     0x0A,
00649   ICBTAG_FILE_TYPE_TE =         0x0B,
00650   ICBTAG_FILE_TYPE_SYMLINK =    0x0C,
00651   ICBTAG_FILE_TYPE_STREAMDIR =  0x0D
00652 } icbtag_file_type_enum_t;
00653 
00655 typedef enum {
00656   ICBTAG_FLAG_AD_MASK        =  0x0007, 
00658   ICBTAG_FLAG_AD_SHORT       =  0x0000, 
00664   ICBTAG_FLAG_AD_LONG        =  0x0001, 
00670   ICBTAG_FLAG_AD_EXTENDED    =  0x0002,
00671   ICBTAG_FLAG_AD_IN_ICB      =  0x0003, 
00675   ICBTAG_FLAG_SORTED         =  0x0008,
00676   ICBTAG_FLAG_NONRELOCATABLE =  0x0010,
00677   ICBTAG_FLAG_ARCHIVE        =  0x0020,
00678   ICBTAG_FLAG_SETUID         =  0x0040,
00679   ICBTAG_FLAG_SETGID         =  0x0080,
00680   ICBTAG_FLAG_STICKY         =  0x0100,
00681   ICBTAG_FLAG_CONTIGUOUS     =  0x0200,
00682   ICBTAG_FLAG_SYSTEM         =  0x0400,
00683   ICBTAG_FLAG_TRANSFORMED    =  0x0800,
00684   ICBTAG_FLAG_MULTIVERSIONS  =  0x1000,
00685   ICBTAG_FLAG_STREAM =          0x2000
00686 } icbtag_flag_enum_t;
00687   
00689 struct indirect_entry_s
00690 {
00691   udf_tag_t       tag;
00692   udf_icbtag_t    icb_tag;
00693   udf_long_ad_t   indirect_ICB;
00694 } GNUC_PACKED;
00695 
00697 struct terminal_entry_s
00698 {
00699   udf_tag_t       tag;
00700   udf_icbtag_t    icb_tag;
00701 } GNUC_PACKED;
00702 
00704 struct udf_file_entry_s
00705 {
00706   udf_tag_t       tag;                   
00707   udf_icbtag_t    icb_tag;                
00708   udf_Uint32_t    uid;                    
00709   udf_Uint32_t    gid;                    
00710   udf_Uint32_t    permissions;            
00711   udf_Uint16_t    link_count;             
00712   udf_Uint8_t     rec_format;             
00713   udf_Uint8_t     rec_disp_attr;          
00714   udf_Uint32_t    rec_len;                
00715   udf_Uint64_t    info_len;               
00716   udf_Uint64_t    logblks_recorded;       
00717   udf_timestamp_t access_time;            
00720   udf_timestamp_t modification_time;      
00723   udf_timestamp_t attribute_time;
00724   udf_Uint32_t    checkpoint;
00725   udf_long_ad_t   ext_attr_ICB;
00726   udf_regid_t     imp_id;
00727   udf_Uint64_t    unique_ID;
00728   udf_Uint32_t    i_extended_attr;
00729   udf_Uint32_t    i_alloc_descs;
00730   udf_Uint8_t     ext_attr[0];
00731   udf_Uint8_t     alloc_descs[0];
00732 } GNUC_PACKED;
00733 
00734 typedef struct udf_file_entry_s udf_file_entry_t;
00735 
00736 #define UDF_FENTRY_SIZE 176
00737 #define UDF_FENTRY_PERM_USER_MASK       0x07
00738 #define UDF_FENTRY_PERM_GRP_MASK        0xE0
00739 #define UDF_FENTRY_PERM_OWNER_MASK      0x1C00
00740 
00742 #define FE_PERM_O_EXEC                  0x00000001U
00743 #define FE_PERM_O_WRITE                 0x00000002U
00744 #define FE_PERM_O_READ                  0x00000004U
00745 #define FE_PERM_O_CHATTR                0x00000008U
00746 #define FE_PERM_O_DELETE                0x00000010U
00747 #define FE_PERM_G_EXEC                  0x00000020U
00748 #define FE_PERM_G_WRITE                 0x00000040U
00749 #define FE_PERM_G_READ                  0x00000080U
00750 #define FE_PERM_G_CHATTR                0x00000100U
00751 #define FE_PERM_G_DELETE                0x00000200U
00752 #define FE_PERM_U_EXEC                  0x00000400U
00753 #define FE_PERM_U_WRITE                 0x00000800U
00754 #define FE_PERM_U_READ                  0x00001000U
00755 #define FE_PERM_U_CHATTR                0x00002000U
00756 #define FE_PERM_U_DELETE                0x00004000U
00757 
00759 #define FE_RECORD_FMT_UNDEF             0x00
00760 #define FE_RECORD_FMT_FIXED_PAD         0x01
00761 #define FE_RECORD_FMT_FIXED             0x02
00762 #define FE_RECORD_FMT_VARIABLE8         0x03
00763 #define FE_RECORD_FMT_VARIABLE16        0x04
00764 #define FE_RECORD_FMT_VARIABLE16_MSB    0x05
00765 #define FE_RECORD_FMT_VARIABLE32        0x06
00766 #define FE_RECORD_FMT_PRINT             0x07
00767 #define FE_RECORD_FMT_LF                0x08
00768 #define FE_RECORD_FMT_CR                0x09
00769 #define FE_RECORD_FMT_CRLF              0x0A
00770 #define FE_RECORD_FMT_LFCR              0x0B
00771 
00773 #define FE_RECORD_DISPLAY_ATTR_UNDEF    0x00
00774 #define FE_RECORD_DISPLAY_ATTR_1        0x01
00775 #define FE_RECORD_DISPLAY_ATTR_2        0x02
00776 #define FE_RECORD_DISPLAY_ATTR_3        0x03
00777 
00779 struct extended_attr_header_desc_s
00780 {
00781   udf_tag_t       tag;
00782   udf_Uint32_t    imp_attr_location;
00783   udf_Uint32_t    app_attr_location;
00784 } GNUC_PACKED;
00785 
00787 struct generic_format_s
00788 {
00789   udf_Uint32_t  attr_type;
00790   udf_Uint8_t   attr_subtype;
00791   udf_Uint8_t   reserved[3];
00792   udf_Uint32_t  attrLength;
00793   udf_Uint8_t   attrData[0];
00794 } GNUC_PACKED;
00795 
00797 struct charSet_info_s
00798 {
00799   udf_Uint32_t  attr_type;
00800   udf_Uint8_t   attr_subtype;
00801   udf_Uint8_t   reserved[3];
00802   udf_Uint32_t  attrLength;
00803   udf_Uint32_t  escapeSeqLength;
00804   udf_Uint8_t   charSetType;
00805   udf_Uint8_t   escapeSeq[0];
00806 } GNUC_PACKED;
00807 
00808 /* Alternate Permissions (ECMA 167r3 4/14.10.4) */
00809 struct alt_perms_s
00810 {
00811   udf_Uint32_t  attr_type;
00812   udf_Uint8_t   attr_subtype;
00813   udf_Uint8_t   reserved[3];
00814   udf_Uint32_t  attrLength;
00815   udf_Uint16_t  owner_id;
00816   udf_Uint16_t  group_id;
00817   udf_Uint16_t  permission;
00818 } GNUC_PACKED;
00819 
00821 struct filetimes_ext_attr_s
00822 {
00823   udf_Uint32_t  attr_type;
00824   udf_Uint8_t   attr_subtype;
00825   udf_Uint8_t   reserved[3];
00826   udf_Uint32_t  attrLength;
00827   udf_Uint32_t  dataLength;
00828   udf_Uint32_t  fileTimeExistence;
00829   udf_Uint8_t   fileTimes;
00830 } GNUC_PACKED;
00831 
00833 #define FTE_CREATION                    0x00000001
00834 #define FTE_DELETION                    0x00000004
00835 #define FTE_EFFECTIVE                   0x00000008
00836 #define FTE_BACKUP                      0x00000002
00837 
00839 struct infoTimesExtAttr
00840 {
00841   udf_Uint32_t  attr_type;
00842   udf_Uint8_t   attr_subtype;
00843   udf_Uint8_t   reserved[3];
00844   udf_Uint32_t  attrLength;
00845   udf_Uint32_t  dataLength;
00846   udf_Uint32_t  infoTimeExistence;
00847   udf_Uint8_t   infoTimes[0];
00848 } GNUC_PACKED;
00849 
00851 struct deviceSpec
00852 {
00853   udf_Uint32_t  attr_type;
00854   udf_Uint8_t   attr_subtype;
00855   udf_Uint8_t   reserved[3];
00856   udf_Uint32_t  attrLength;
00857   udf_Uint32_t  imp_useLength;
00858   udf_Uint32_t  majorDevice_id;
00859   udf_Uint32_t  minorDevice_id;
00860   udf_Uint8_t   imp_use[0];
00861 } GNUC_PACKED;
00862 
00864 struct impUseExtAttr
00865 {
00866   udf_Uint32_t  attr_type;
00867   udf_Uint8_t   attr_subtype;
00868   udf_Uint8_t   reserved[3];
00869   udf_Uint32_t  attrLength;
00870   udf_Uint32_t  imp_useLength;
00871   udf_regid_t   imp_id;
00872   udf_Uint8_t   imp_use[0];
00873 } GNUC_PACKED;
00874 
00876 struct appUseExtAttr
00877 {
00878   udf_Uint32_t  attr_type;
00879   udf_Uint8_t   attr_subtype;
00880   udf_Uint8_t   reserved[3];
00881   udf_Uint32_t  attrLength;
00882   udf_Uint32_t  appUseLength;
00883   udf_regid_t   app_id;
00884   udf_Uint8_t   appUse[0];
00885 } GNUC_PACKED;
00886 
00887 #define EXTATTR_CHAR_SET                1
00888 #define EXTATTR_ALT_PERMS               3
00889 #define EXTATTR_FILE_TIMES              5
00890 #define EXTATTR_INFO_TIMES              6
00891 #define EXTATTR_DEV_SPEC                12
00892 #define EXTATTR_IMP_USE                 2048
00893 #define EXTATTR_APP_USE                 65536
00894 
00895 
00897 struct unallocSpaceEntry
00898 {
00899   udf_tag_t     tag;
00900   udf_icbtag_t  icb_tag;
00901   udf_Uint32_t  lengthAllocDescs;
00902   udf_Uint8_t   allocDescs[0];
00903 } GNUC_PACKED;
00904 
00906 struct spaceBitmapDesc
00907 {
00908   udf_tag_t     tag;
00909   udf_Uint32_t  i_bits;
00910   udf_Uint32_t  i_bytes;
00911   udf_Uint8_t   bitmap[0];
00912 } GNUC_PACKED;
00913 
00915 struct partitionIntegrityEntry
00916 {
00917   udf_tag_t       tag;
00918   udf_icbtag_t    icb_tag;
00919   udf_timestamp_t recording_time;
00920   udf_Uint8_t     integrityType;
00921   udf_Uint8_t     reserved[175];
00922   udf_regid_t     imp_id;
00923   udf_Uint8_t     imp_use[256];
00924 } GNUC_PACKED;
00925 
00929 #define EXT_RECORDED_ALLOCATED          0x00000000
00930 #define EXT_NOT_RECORDED_ALLOCATED      0x40000000
00931 #define EXT_NOT_RECORDED_NOT_ALLOCATED  0x80000000
00932 #define EXT_NEXT_EXTENT_ALLOCDECS       0xC0000000
00933 
00939 struct logical_vol_header_desc_s 
00940 {
00941   udf_Uint64_t  uniqueID;
00942   udf_Uint8_t   reserved[24];
00943 } GNUC_PACKED;
00944 
00945 typedef struct logical_vol_header_desc_s logical_vol_header_desc_t;
00946 
00948 struct pathComponent
00949 {
00950   udf_Uint8_t   component_type;
00951   udf_Uint8_t   lengthComponent_id;
00952   udf_Uint16_t  componentFileVersionNum;
00953   udf_dstring   component_id[0];
00954 } GNUC_PACKED;
00955 
00957 struct extended_file_entry
00958 {
00959   udf_tag_t       tag;                     
00960   udf_icbtag_t    icb_tag;                 
00961   udf_Uint32_t    uid;                     
00962   udf_Uint32_t    gid;                     
00963   udf_Uint32_t    permissions;             
00964   udf_Uint16_t    link_count;              
00965   udf_Uint8_t     rec_format;              
00966   udf_Uint8_t     rec_display_attr;        
00967   udf_Uint32_t    record_len;              
00968   udf_Uint64_t    info_len;                
00969   udf_Uint64_t    object_size;             
00970   udf_Uint64_t    logblks_recorded;        
00971   udf_timestamp_t access_time;             
00973   udf_timestamp_t modification_time;       
00976   udf_timestamp_t create_time;             
00977   udf_timestamp_t attribute_time;          
00980   udf_Uint32_t    checkpoint;
00981   udf_Uint32_t    reserved;                
00982   udf_long_ad_t   ext_attr_ICB;
00983   udf_long_ad_t   stream_directory_ICB;
00984   udf_regid_t     imp_id;
00985   udf_Uint64_t    unique_ID;
00986   udf_Uint32_t    length_extended_attr;
00987   udf_Uint32_t    length_alloc_descs;
00988   udf_Uint8_t     ext_attr[0];
00989   udf_Uint8_t     alloc_descs[0];
00990 } GNUC_PACKED;
00991 
00992 PRAGMA_END_PACKED
00993 
00999 extern tag_id_t                 debug_tagid;
01000 extern file_characteristics_t   debug_file_characteristics;
01001 extern icbtag_file_type_enum_t  debug_icbtag_file_type_enum;
01002 extern icbtag_flag_enum_t       debug_flag_enum;
01003 extern ecma_167_enum1_t         debug_ecma_167_enum1;
01004 extern ecma_167_timezone_enum_t debug_ecma_167_timezone_enum;
01005   
01006 #endif /* _ECMA_167_H */

Generated on Fri Oct 27 06:38:08 2006 for libcdio by  doxygen 1.4.6