iso9660.h

Go to the documentation of this file.
00001 /*
00002 ** The Sleuth Kit
00003 **
00004 ** This software is subject to the IBM Public License ver. 1.0,
00005 ** which was displayed prior to download and is included in the readme.txt
00006 ** file accompanying the Sleuth Kit files.  It may also be requested from:
00007 ** Crucial Security Inc.
00008 ** 14900 Conference Center Drive
00009 ** Chantilly, VA 20151
00010 **
00011 ** Wyatt Banks [wbanks@crucialsecurity.com]
00012 ** Copyright (c) 2005 Crucial Security Inc.  All rights reserved.
00013 **
00014 ** Brian Carrier [carrier@sleuthkit.org]
00015 ** Copyright (c) 2003-2005 Brian Carrier.  All rights reserved
00016 **
00017 ** Copyright (c) 1997,1998,1999, International Business Machines
00018 ** Corporation and others. All Rights Reserved.
00019 */
00020 
00021 /* TCT
00022  * LICENSE
00023  *      This software is distributed under the IBM Public License.
00024  * AUTHOR(S)
00025  *      Wietse Venema
00026  *      IBM T.J. Watson Research
00027  *      P.O. Box 704
00028  *      Yorktown Heights, NY 10598, USA
00029  --*/
00030 
00031 /*
00032 ** You may distribute the Sleuth Kit, or other software that incorporates
00033 ** part of all of the Sleuth Kit, in object code form under a license agreement,
00034 ** provided that:
00035 ** a) you comply with the terms and conditions of the IBM Public License
00036 **    ver 1.0; and
00037 ** b) the license agreement
00038 **     i) effectively disclaims on behalf of all Contributors all warranties
00039 **        and conditions, express and implied, including warranties or
00040 **        conditions of title and non-infringement, and implied warranties
00041 **        or conditions of merchantability and fitness for a particular
00042 **        purpose.
00043 **    ii) effectively excludes on behalf of all Contributors liability for
00044 **        damages, including direct, indirect, special, incidental and
00045 **        consequential damages such as lost profits.
00046 **   iii) states that any provisions which differ from IBM Public License
00047 **        ver. 1.0 are offered by that Contributor alone and not by any
00048 **        other party; and
00049 **    iv) states that the source code for the program is available from you,
00050 **        and informs licensees how to obtain it in a reasonable manner on or
00051 **        through a medium customarily used for software exchange.
00052 **
00053 ** When the Sleuth Kit or other software that incorporates part or all of
00054 ** the Sleuth Kit is made available in source code form:
00055 **     a) it must be made available under IBM Public License ver. 1.0; and
00056 **     b) a copy of the IBM Public License ver. 1.0 must be included with
00057 **        each copy of the program.
00058 */
00059 
00064 /* refernece documents used:
00065  * IEEE P1281 - System Use Sharing Protocol, version 1.12
00066  * IEEE P1282 - Rock Ridge Interchange Protocol, version 1.12
00067  * ECMA-119 - Volume and File Structure of CDROM for Information Interchange,
00068  * 2nd Edition
00069  */
00070 
00071 #ifndef _iso9660_h
00072 #define _iso9660_h
00073 
00074 /* This part borrowed from the bsd386 isofs */
00075 #define ISODCL(from, to) (to - from + 1)
00076 
00077 /*
00078  * Constants
00079  */
00080 #define ISO9660_FIRSTINO        0
00081 #define ISO9660_ROOTINO         0
00082 #define ISO9660_NIADDR          0       /* iso9660 doesnt have indirect blocks */
00083 #define ISO9660_NDADDR          1       /* just a single data "block" */
00084 #define ISO9660_SBOFF           32768
00085 #define ISO9660_SSIZE_B         2048
00086 #define ISO9660_MIN_BLOCK_SIZE  512
00087 #define ISO9660_MAX_BLOCK_SIZE  2048
00088 #define ISO9660_MAGIC           "CD001"
00089 
00090 /* values used in volume descriptor type */
00091 #define ISO9660_BOOT_RECORD             0       /* boot record */
00092 #define ISO9660_PRIM_VOL_DESC           1       /* primary volume descriptor */
00093 #define ISO9660_SUPP_VOL_DESC           2       /* supplementary volume descriptor */
00094 #define ISO9660_VOL_PART_DESC           3       /* volume partition descriptor */
00095 #define ISO9660_RESERVE_FLOOR           4       /* 4-254 are reserved */
00096 #define ISO9660_RESERVE_CEIL            254
00097 #define ISO9660_VOL_DESC_SET_TERM       255     /* volume descriptor set terminator */
00098 
00099 #define ISO9660_MAXNAMLEN_STD   128     
00100 #define ISO9660_MAXNAMLEN_JOL   128     
00101 #define ISO9660_MAXNAMLEN   (ISO9660_MAXNAMLEN_JOL << 1)        // mult jol by 2 to account for UTF-16 to UTF-8 conversion
00102 
00103 /* Bits in permissions used in extended attribute records.  */
00104 #define ISO9660_BIT_UR  0x0010
00105 #define ISO9660_BIT_UX  0x0040
00106 #define ISO9660_BIT_GR  0x0100
00107 #define ISO9660_BIT_GX  0x0400
00108 #define ISO9660_BIT_AR  0x1000
00109 #define ISO9660_BIT_AX  0x4000
00110 
00111 /* directory descriptor flags */
00112 #define ISO9660_FLAG_HIDE       0x01    /* Hide file -- called EXISTENCE */
00113 #define ISO9660_FLAG_DIR        0x02    /* Directory */
00114 #define ISO9660_FLAG_ASSOC      0x04    /* File is associated */
00115 #define ISO9660_FLAG_RECORD     0X08    /* Record format in extended attr */
00116 #define ISO9660_FLAG_PROT       0X10    /* No read / exec perm in ext attr */
00117 #define ISO9660_FLAG_RES1       0X20    /* reserved */
00118 #define ISO9660_FLAG_RES2       0x40    /* reserved */
00119 #define ISO9660_FLAG_MULT       0X80    /* not final entry of mult ext file */
00120 
00121 /* POSIX modes used in ISO9660 not already defined */
00122 #define MODE_IFSOCK 0140000     /* socket */
00123 #define MODE_IFLNK  0120000     /* symbolic link */
00124 #define MODE_IFDIR  0040000     /* directory */
00125 #define MODE_IFIFO  0010000     /* pipe or fifo */
00126 #define MODE_IFBLK  0060000     /* block special */
00127 #define MODE_IFCHR  0020000     /* character special */
00128 
00129 /* used to determine if get directory entry function needs to handle Joliet */
00130 #define ISO9660_TYPE_PVD        0
00131 #define ISO9660_TYPE_SVD        1
00132 
00133 #define ISO9660_CTYPE_ASCII 0
00134 #define ISO9660_CTYPE_UTF16 1
00135 
00136 /* recording date and time */
00137 typedef struct {
00138     uint8_t year;               /* years since 1900 */
00139     uint8_t month;              /* 1-12 */
00140     uint8_t day;                /* 1-31 */
00141     uint8_t hour;               /* 0-23 */
00142     uint8_t min;                /* 0-59 */
00143     uint8_t sec;                /* 0-59 */
00144     uint8_t gmt_off;            /* greenwich mean time offset */
00145 } record_data;
00146 
00147 /* data and time format
00148  * all are stored as "digits" according to specifications for iso9660
00149  */
00150 typedef struct {
00151     uint8_t year[4];            /* 1 to 9999 */
00152     uint8_t month[2];           /* 1 to 12 */
00153     uint8_t day[2];             /* 1 to 31 */
00154     uint8_t hour[2];            /* 0 to 23 */
00155     uint8_t min[2];             /* 0 to 59 */
00156     uint8_t sec[2];             /* 0 to 59 */
00157     uint8_t hun[2];             /* hundredths of a second */
00158     uint8_t gmt_off;            /* GMT offset */
00159 } date_time;
00160 
00161 /* iso 9660 directory record */
00162 typedef struct {
00163     uint8_t entry_len;          /* length of directory record */
00164     uint8_t ext_len;            /* extended attribute record length */
00165     uint8_t ext_loc_l[4];       /* location of extent - le */
00166     uint8_t ext_loc_m[4];       /* location of extent - be */
00167     uint8_t data_len_l[4];      /* data length - le */
00168     uint8_t data_len_m[4];      /* data length - be */
00169     record_data rec_time;       /* recording date and time */
00170     int8_t flags;               /* file flags */
00171     uint8_t unit_sz;            /* file unit size */
00172     uint8_t gap_sz;             /* interleave gap size */
00173     uint8_t seq[4];             /* volume sequence number (2|16) */
00174     uint8_t fi_len;             /* length of file identifier in bytes */
00175 } iso9660_dentry;
00176 
00177 /* This is a dummy struct used to make reading an entire PVD easier,
00178  * due to the fact that the root directory has a 1 byte name that
00179  * wouldn't be worth adding to the regular struct.
00180  */
00181 typedef struct {
00182     uint8_t length;             /* length of directory record */
00183     uint8_t ext_len;            /* extended attribute record length */
00184     uint8_t ext_loc_l[4];       /* location of extent - le */
00185     uint8_t ext_loc_m[4];       /* location of extent - be */
00186     uint8_t data_len_l[4];      /* data length - le */
00187     uint8_t data_len_m[4];      /* data length - be */
00188     record_data rec;            /* recording date and time */
00189     int8_t flags;               /* file flags */
00190     uint8_t unit_sz;            /* file unit size */
00191     uint8_t gap_sz;             /* interleave gap size */
00192     uint8_t seq[4];             /* volume sequence number (2|16) */
00193     uint8_t len;                /* length of file identifier */
00194     char name;
00195 } iso9660_root_dentry;
00196 
00197 /* generic volume descriptor */
00198 typedef struct {
00199     uint8_t type;               
00200     char magic[ISODCL(2, 6)];   
00201     char ver[ISODCL(7, 7)];     
00202     char x[ISODCL(8, 2048)];    
00203 } iso9660_gvd;
00204 
00205 /* primary volume descriptor */
00206 typedef struct {
00207     char unused1[ISODCL(1, 8)]; /* should be 0.  unused. */
00208     char sys_id[ISODCL(9, 40)]; /* system identifier */
00209     char vol_id[ISODCL(41, 72)];        /* volume identifier */
00210     char unused2[ISODCL(73, 80)];       /* should be 0.  unused. */
00211     uint8_t vs_sz_l[ISODCL(81, 84)];    /* volume space size in blocks - le */
00212     uint8_t vs_sz_m[ISODCL(85, 88)];    /* volume space size in blocks - be */
00213     char unused3[ISODCL(89, 120)];      /* should be 0.  unused. */
00214     uint8_t vol_set_l[ISODCL(121, 122)];        /* volume set size - le */
00215     uint8_t vol_set_m[ISODCL(123, 124)];        /* volume set size - be */
00216     uint8_t vol_seq_l[ISODCL(125, 126)];        /* volume sequence number -le  */
00217     uint8_t vol_seq_m[ISODCL(127, 128)];        /* volume sequence number - be */
00218     uint8_t blk_sz_l[ISODCL(129, 130)]; /* logical block size - le */
00219     uint8_t blk_sz_m[ISODCL(131, 132)]; /* logical block size - be */
00220     uint8_t pt_size_l[ISODCL(133, 136)];        /* path table size in bytes - le */
00221     uint8_t pt_size_m[ISODCL(137, 140)];        /* path table size in bytes - be  */
00222     uint8_t pt_loc_l[ISODCL(141, 144)]; /* log block addr of type L path tbl. */
00223     uint8_t pt_opt_loc_l[ISODCL(145, 148)];     /* log block addr of optional L path tbl */
00224     uint8_t pt_loc_m[ISODCL(149, 152)]; /* log block addr of type M path tbl. */
00225     uint8_t pt_opt_loc_m[ISODCL(153, 156)];     /* log block addr of optional M path tbl */
00226     iso9660_root_dentry dir_rec;        /* directory record for root dir */
00227     char vol_setid[ISODCL(191, 318)];   /* volume set identifier */
00228     unsigned char pub_id[ISODCL(319, 446)];     /* publisher identifier */
00229     unsigned char prep_id[ISODCL(447, 574)];    /* data preparer identifier */
00230     unsigned char app_id[ISODCL(575, 702)];     /* application identifier */
00231     unsigned char copy_id[ISODCL(703, 739)];    /* copyright file identifier */
00232     unsigned char abs_id[ISODCL(740, 776)];     /* abstract file identifier */
00233     unsigned char bib_id[ISODCL(777, 813)];     /* bibliographic file identifier */
00234     date_time make_date;        /* volume creation date/time */
00235     date_time mod_date;         /* volume modification date/time */
00236     date_time exp_date;         /* volume expiration date/time */
00237     date_time ef_date;          /* volume effective date/time */
00238     uint8_t fs_ver;             /* file structure version */
00239     char res[ISODCL(883, 883)]; /* reserved */
00240     char app_use[ISODCL(884, 1395)];    /* application use */
00241     char reserv[ISODCL(1396, 2048)];    /* reserved */
00242 } iso9660_pvd;
00243 
00244 /* supplementary volume descriptor */
00245 typedef struct {
00246     uint8_t flags[ISODCL(1, 8)];        /* volume flags */
00247     char sys_id[ISODCL(9, 40)]; /* system identifier */
00248     char vol_id[ISODCL(41, 72)];        /* volume identifier */
00249     char unused2[ISODCL(73, 80)];       /* should be 0.  unused. */
00250     uint8_t vs_sz_l[ISODCL(81, 84)];    /* volume space size in blocks - le */
00251     uint8_t vs_sz_m[ISODCL(85, 88)];    /* volume space size in blocks - be */
00252     uint8_t esc_seq[ISODCL(89, 120)];   /* escape sequences */
00253     uint8_t vol_set_l[ISODCL(121, 122)];        /* volume set size - le */
00254     uint8_t vol_set_m[ISODCL(123, 124)];        /* volume set size - be */
00255     uint8_t vol_seq_l[ISODCL(125, 126)];        /* volume sequence number -le  */
00256     uint8_t vol_seq_m[ISODCL(127, 128)];        /* volume sequence number - be */
00257     uint8_t blk_sz_l[ISODCL(129, 130)]; /* logical block size - le */
00258     uint8_t blk_sz_m[ISODCL(131, 132)]; /* logical block size - be */
00259     uint8_t pt_size_l[ISODCL(133, 136)];        /* path table size in bytes - le */
00260     uint8_t pt_size_m[ISODCL(137, 140)];        /* path table size in bytes - be  */
00261     uint8_t pt_loc_l[ISODCL(141, 144)]; /* log block addr of type L path tbl. */
00262     uint8_t pt_opt_loc_l[ISODCL(145, 148)];     /* log block addr of optional type L path tbl. */
00263     uint8_t pt_loc_m[ISODCL(149, 152)]; /* log block addr of type M path tbl. */
00264     uint8_t pt_opt_loc_m[ISODCL(153, 156)];     /* log block addr of optional type M path tbl. */
00265     iso9660_root_dentry dir_rec;        /* directory record for root dir */
00266     char vol_setid[ISODCL(191, 318)];   /* volume set identifier */
00267     unsigned char pub_id[ISODCL(319, 446)];     /* publisher identifier */
00268     unsigned char prep_id[ISODCL(447, 574)];    /* data preparer identifier */
00269     unsigned char app_id[ISODCL(575, 702)];     /* application identifier */
00270     unsigned char copy_id[ISODCL(703, 739)];    /* copyright file identifier */
00271     unsigned char abs_id[ISODCL(740, 776)];     /* abstract file identifier */
00272     unsigned char bib_id[ISODCL(777, 813)];     /* bibliographic file identifier */
00273     date_time make_date;        /* volume creation date/time */
00274     date_time mod_date;         /* volume modification date/time */
00275     date_time exp_date;         /* volume expiration date/time */
00276     date_time ef_date;          /* volume effective date/time */
00277     char fs_ver[ISODCL(882, 882)];      /* file structure version */
00278     char res[ISODCL(883, 883)]; /* reserved */
00279     char app_use[ISODCL(884, 1395)];    /* application use */
00280     char reserv[ISODCL(1396, 2048)];    /* reserved */
00281 } iso9660_svd;
00282 
00283 /* iso 9660 boot record */
00284 typedef struct {
00285     char boot_sys_id[ISODCL(8, 39)];    /* boot system identifier */
00286     char boot_id[ISODCL(40, 71)];       /* boot identifier */
00287     char system_use[ISODCL(72, 2048)];  /* system use */
00288 } iso_bootrec;
00289 
00290 /* path table record */
00291 typedef struct {
00292     uint8_t len_di;             /* length of directory identifier */
00293     uint8_t attr_len;           /* extended attribute record length */
00294     uint8_t ext_loc[4];         /* location of extent */
00295     uint8_t par_dir[2];         /* parent directory number */
00296 } path_table_rec;
00297 
00298 /* extended attribute record */
00299 typedef struct {
00300     uint8_t uid[ISODCL(1, 4)];  /* owner identification */
00301     uint8_t gid[ISODCL(5, 8)];  /* group identification */
00302     uint8_t mode[ISODCL(9, 10)];        /* permissions */
00303     uint8_t cre[ISODCL(11, 27)];        /* file creation date/time */
00304     uint8_t mod[ISODCL(28, 44)];        /* file modification d/t */
00305     uint8_t exp[ISODCL(45, 61)];        /* file expiration d/t */
00306     uint8_t eff[ISODCL(62, 78)];        /* file effective d/t */
00307     uint8_t fmt[ISODCL(79, 79)];        /* record format */
00308     uint8_t attr[ISODCL(80, 80)];       /* record attributes */
00309     uint8_t len[ISODCL(81, 84)];        /* record length */
00310     uint8_t sys_id[ISODCL(85, 116)];    /* system identifier */
00311     uint8_t uns[ISODCL(117, 180)];      /* system use, not specified */
00312     uint8_t e_ver[ISODCL(181, 181)];    /* extended attribute record version */
00313     uint8_t len_esc[ISODCL(182, 182)];  /* length of escape sequences */
00314 } ext_attr_rec;
00315 
00316 /* primary volume descriptor linked list node */
00317 typedef struct iso9660_pvd_node {
00318     iso9660_pvd pvd;
00319     struct iso9660_pvd_node *next;
00320 } iso9660_pvd_node;
00321 
00322 /* supplementary volume descriptor linked list node */
00323 typedef struct iso9660_svd_node {
00324     iso9660_svd svd;
00325     struct iso9660_svd_node *next;
00326 } iso9660_svd_node;
00327 
00328 /* RockRidge extension info */
00329 typedef struct {
00330     uid_t uid /* owner */ ;
00331     gid_t gid;                  /* group */
00332     uint16_t mode;              /* posix file mode */
00333     uint32_t nlink;             /* number of links */
00334     char fn[ISO9660_MAXNAMLEN_STD];     /* alternate filename */
00335 } rockridge_ext;
00336 
00341 typedef struct {
00342     iso9660_dentry dr;          /* directory record */
00343     ext_attr_rec *ea;           /* extended attribute record */
00344     char fn[ISO9660_MAXNAMLEN + 1];     /* file name */
00345     rockridge_ext *rr;          /* RockRidge Extensions */
00346     int version;
00347     OFF_T susp_off;             
00348     OFF_T susp_len;             
00349 } iso9660_inode;
00350 
00351 /* inode linked list node */
00352 typedef struct iso9660_inode_node {
00353     iso9660_inode inode;
00354     OFF_T offset;               /* byte offset of inode into disk */
00355     INUM_T inum;                /* identifier of inode */
00356     int size;                   /* kludge: used to flag fifos, etc */
00357     int ea_size;                /* length of ext attributes */
00358     struct iso9660_inode_node *next;
00359 } iso9660_inode_node;
00360 
00361 /* The all important ISO_INFO struct */
00362 typedef struct {
00363     TSK_FS_INFO fs_info;        /* SUPER CLASS */
00364     INUM_T dinum;               /* cached inode number */
00365     iso9660_inode *dinode;      /* cached disk inode */
00366     uint32_t path_tab_addr;     /* address of path table */
00367     uint32_t root_addr;         /* address of root dir extent */
00368     iso9660_pvd_node *pvd;      
00369     iso9660_svd_node *svd;      
00370     iso9660_inode_node *in_list;        /* list of inodes */
00371     uint8_t rr_found;           /* 1 if rockridge found */
00372 } ISO_INFO;
00373 
00374 extern uint8_t iso9660_dent_walk(TSK_FS_INFO * fs, INUM_T inode,
00375     TSK_FS_DENT_FLAG_ENUM flags, TSK_FS_DENT_TYPE_WALK_CB action,
00376     void *ptr);
00377 
00378 extern uint8_t iso9660_dinode_load(ISO_INFO * iso, INUM_T inum);
00379 
00380 /**********************************************************
00381  *
00382  * RockRidge Extensions
00383  *
00384  **********************************************************/
00385 
00386 
00387 typedef struct {
00388     char sig[2];
00389     uint8_t len;
00390     char ver;
00391 } iso9660_susp_head;
00392 
00393 
00395 typedef struct {
00396     char sig[2];
00397     uint8_t len;
00398     char ver;
00399     uint8_t blk_l[4];           
00400     uint8_t blk_m[4];
00401     uint8_t offset_l[4];        
00402     uint8_t offset_m[4];
00403     uint8_t celen_l[4];         
00404     uint8_t celen_m[4];
00405 } iso9660_susp_ce;
00406 
00408 typedef struct {
00409     char sig[2];
00410     uint8_t len;
00411     char ver;
00412     uint8_t chk[2];
00413     uint8_t skip;
00414 } iso9660_susp_sp;
00415 
00416 typedef struct {
00417     char sig[2];
00418     uint8_t len;
00419     char ver;
00420     uint8_t len_id;             
00421     uint8_t len_des;            
00422     uint8_t len_src;            
00423     uint8_t ext_ver;            
00424     char ext_id[1];             
00425     // next is the extension descriptor text
00426     // next is the extension source text
00427 } iso9660_susp_er;
00428 
00429 
00430 /* Rockridge ISO9660 system use field entry */
00431 typedef struct {
00432     char sig[ISODCL(1, 2)];     /* signature, should be "RR" */
00433     uint8_t len[ISODCL(3, 3)];  /* length of system use entry */
00434     uint8_t ver[ISODCL(4, 4)];  /* system use entry version */
00435     uint8_t foo[ISODCL(5, 5)];  /* foo */
00436 } rr_sys_use;
00437 
00438 /* Rockridge PX entry */
00439 typedef struct {
00440     char sig[ISODCL(1, 2)];     /* signature, should be "PX" */
00441     uint8_t len;                /* length, should be 44 */
00442     uint8_t ver;                /* system use entry version (1) */
00443     uint8_t mode_l[ISODCL(5, 8)];       /* POSIX file mode - le */
00444     uint8_t mode_m[ISODCL(9, 12)];      /* POSIX file mode - be */
00445     uint8_t links_l[ISODCL(13, 16)];    /* POSIX file links - le */
00446     uint8_t links_m[ISODCL(17, 20)];    /* POSIX file links - be */
00447     uint8_t uid_l[ISODCL(21, 24)];      /* POSIX user id - le */
00448     uint8_t uid_m[ISODCL(25, 28)];      /* POSIX user id - be */
00449     uint8_t gid_l[ISODCL(29, 32)];      /* POSIX group id - le */
00450     uint8_t gid_m[ISODCL(23, 36)];      /* POSIX group id - be */
00451     /* rockridge docs say this is here, k3b disagrees... hmmmm */
00452     //      uint8_t serial[ISODCL(37,44)];  /* POSIX file serial number */
00453 } iso9660_rr_px_entry;
00454 
00455 /* Rockridge PN entry */
00456 typedef struct {
00457     char sig[ISODCL(1, 2)];     /* signature, should be "PN" */
00458     uint8_t len;                /* length, should be 20 */
00459     uint8_t ver;                /* system use entry version (1) */
00460     uint8_t dev_h_l[ISODCL(5, 8)];      /* top 32 bits of device # */
00461     uint8_t dev_h_m[ISODCL(9, 12)];     /* top 32 bits of device # */
00462     uint8_t dev_l_l[ISODCL(13, 16)];    /* low 32 bits of device # */
00463     uint8_t dev_l_m[ISODCL(17, 20)];    /* low 32 bits of device # */
00464 } iso9660_rr_pn_entry;
00465 
00466 /* Rockridge SL entry */
00467 typedef struct {
00468     char sig[ISODCL(1, 2)];     /* signature, should be "SL" */
00469     uint8_t len;                /* length */
00470     uint8_t ver;                /* system use entry version (1) */
00471     uint8_t flags;              /* flags */
00472 } iso9660_rr_sl_entry;
00473 
00474 /* Rockridge NM entry */
00475 typedef struct {
00476     char sig[ISODCL(1, 2)];     /* signature, should be "NM" */
00477     uint8_t len;                /* length of alternate name */
00478     uint8_t ver[ISODCL(4, 4)];  /* system use entry version (1) */
00479     uint8_t flags[ISODCL(5, 5)];        /* flags */
00480     char name[1];               // start of the name
00481 } iso9660_rr_nm_entry;
00482 
00483 /* Rockridge CL entry */
00484 typedef struct {
00485     char sig[ISODCL(1, 2)];     /* signature, should be "CL" */
00486     uint8_t len[ISODCL(3, 3)];  /* length, should be 12 */
00487     uint8_t ver[ISODCL(4, 4)];  /* system use entry version (1) */
00488     uint8_t par_loc[ISODCL(5, 12)];     /* location of parent directory */
00489 } iso9660_rr_cl_entry;
00490 
00491 /* Rockridge RE entry */
00492 typedef struct {
00493     char sig[ISODCL(1, 2)];     /* signature, should be "RE" */
00494     uint8_t len[ISODCL(3, 3)];  /* length, should be 4 */
00495     uint8_t ver[ISODCL(4, 4)];  /* system use entry version (1) */
00496 } iso9660_rr_re_entry;
00497 
00498 /* Rockridge TF entry */
00499 typedef struct {
00500     char sig[ISODCL(1, 2)];     /* signature, should be "TF" */
00501     uint8_t len[ISODCL(3, 3)];  /* length of TF entry */
00502     uint8_t ver[ISODCL(4, 4)];  /* system use entry version (1) */
00503     uint8_t flags[ISODCL(5, 5)];        /* flags */
00504 } iso9660_rr_tf_entry;
00505 
00506 /* Rockridge SF entry */
00507 typedef struct {
00508     char sig[ISODCL(1, 2)];     /* signature, should be "SF" */
00509     uint8_t len[ISODCL(3, 3)];  /* length, should be 21 */
00510     uint8_t ver[ISODCL(4, 4)];  /* system use entry version (1) */
00511     uint8_t vfs_h[ISODCL(5, 12)];       /* virtual file size high */
00512     uint8_t vfs_l[ISODCL(13, 20)];      /* virtual file size low */
00513     uint8_t depth[ISODCL(21, 21)];      /* table depth */
00514 } iso9660_rr_sf_entry;
00515 
00516 #endif

Generated on Wed Nov 28 16:11:15 2007 for The Sleuth Kit (Incomplete) by  doxygen 1.5.1