iso9660.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:6k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /*
  2.  * Header file iso9660.h - assorted structure definitions and typecasts.
  3.  * specific to iso9660 filesystem.
  4.    Written by Eric Youngdale (1993).
  5.    Copyright 1993 Yggdrasil Computing, Incorporated
  6.    This program is free software; you can redistribute it and/or modify
  7.    it under the terms of the GNU General Public License as published by
  8.    the Free Software Foundation; either version 2, or (at your option)
  9.    any later version.
  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.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17. /*
  18.  *  $Id: iso9660.h,v 1.2 1997/05/17 15:46:44 eric Exp $
  19.  */
  20. #ifndef _ISOFS_FS_H
  21. #define _ISOFS_FS_H
  22. /*
  23.  * The isofs filesystem constants/structures
  24.  */
  25. /* This part borrowed from the bsd386 isofs */
  26. #define ISODCL(from, to) (to - from + 1)
  27. struct iso_volume_descriptor {
  28. char type[ISODCL(1,1)]; /* 711 */
  29. char id[ISODCL(2,6)];
  30. char version[ISODCL(7,7)];
  31. char data[ISODCL(8,2048)];
  32. };
  33. /* volume descriptor types */
  34. #define ISO_VD_PRIMARY       1
  35. #define ISO_VD_SUPPLEMENTARY 2     /* Used by Joliet */
  36. #define ISO_VD_END           255
  37. #define ISO_STANDARD_ID "CD001"
  38. #define EL_TORITO_ID "EL TORITO SPECIFICATION"
  39. #define EL_TORITO_ARCH_x86 0
  40. #define EL_TORITO_ARCH_PPC 1
  41. #define EL_TORITO_ARCH_MAC 2
  42. #define EL_TORITO_BOOTABLE 0x88
  43. #define EL_TORITO_NOT_BOOTABLE 0
  44. #define EL_TORITO_MEDIA_NOEMUL  0
  45. #define EL_TORITO_MEDIA_12FLOP  1
  46. #define EL_TORITO_MEDIA_144FLOP 2
  47. #define EL_TORITO_MEDIA_288FLOP 3
  48. #define EL_TORITO_MEDIA_HD      4
  49. struct iso_primary_descriptor {
  50. char type [ISODCL (  1,   1)]; /* 711 */
  51. char id [ISODCL (  2,   6)];
  52. char version [ISODCL (  7,   7)]; /* 711 */
  53. char unused1 [ISODCL (  8,   8)];
  54. char system_id [ISODCL (  9,  40)]; /* achars */
  55. char volume_id [ISODCL ( 41,  72)]; /* dchars */
  56. char unused2 [ISODCL ( 73,  80)];
  57. char volume_space_size [ISODCL ( 81,  88)]; /* 733 */
  58. char escape_sequences [ISODCL ( 89, 120)];
  59. char volume_set_size [ISODCL (121, 124)]; /* 723 */
  60. char volume_sequence_number [ISODCL (125, 128)]; /* 723 */
  61. char logical_block_size [ISODCL (129, 132)]; /* 723 */
  62. char path_table_size [ISODCL (133, 140)]; /* 733 */
  63. char type_l_path_table [ISODCL (141, 144)]; /* 731 */
  64. char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
  65. char type_m_path_table [ISODCL (149, 152)]; /* 732 */
  66. char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
  67. char root_directory_record [ISODCL (157, 190)]; /* 9.1 */
  68. char volume_set_id [ISODCL (191, 318)]; /* dchars */
  69. char publisher_id [ISODCL (319, 446)]; /* achars */
  70. char preparer_id [ISODCL (447, 574)]; /* achars */
  71. char application_id [ISODCL (575, 702)]; /* achars */
  72. char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
  73. char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
  74. char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
  75. char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
  76. char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
  77. char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
  78. char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
  79. char file_structure_version [ISODCL (882, 882)]; /* 711 */
  80. char unused4 [ISODCL (883, 883)];
  81. char application_data [ISODCL (884, 1395)];
  82. char unused5 [ISODCL (1396, 2048)];
  83. };
  84. /* El Torito Boot Record Volume Descriptor */
  85. struct eltorito_boot_descriptor {
  86.         char type [ISODCL (  1,    1)]; /* 711 */
  87. char id [ISODCL (  2,    6)];
  88. char version [ISODCL (  7,    7)]; /* 711 */
  89. char system_id [ISODCL (  8,   39)];
  90. char unused2 [ISODCL ( 40,   71)];
  91.         char bootcat_ptr                [ISODCL ( 72 ,  75)];
  92. char unused5 [ISODCL ( 76, 2048)];
  93. };
  94. /* Validation entry for El Torito */
  95. struct eltorito_validation_entry {
  96.         char headerid           [ISODCL (  1,    1)]; /* 711 */
  97. char arch [ISODCL (  2,    2)];
  98. char pad1 [ISODCL (  3,    4)]; /* 711 */
  99. char id   [ISODCL (  5,   28)]; /* CD devel/man*/
  100. char cksum [ISODCL ( 29,   30)];
  101.         char key1                       [ISODCL ( 31,   31)];
  102. char key2 [ISODCL ( 32,   32)];
  103. };
  104. /* El Torito initial/default entry in boot catalog */
  105. struct eltorito_defaultboot_entry {
  106.         char boot_id            [ISODCL (  1,    1)]; /* 711 */
  107. char boot_media [ISODCL (  2,    2)];
  108. char loadseg [ISODCL (  3,    4)]; /* 711 */
  109. char sys_type   [ISODCL (  5,    5)];
  110. char pad1 [ISODCL (  6,    6)];
  111.         char nsect                      [ISODCL (  7,    8)];
  112. char bootoff [ISODCL (  9,   12)];
  113.         char pad2                       [ISODCL ( 13,   32)];
  114. };
  115. /*
  116.  * XXX JS: The next two structures have odd lengths!
  117.  * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length.
  118.  * For this reason, we cannot use sizeof (struct iso_path_table) or
  119.  * sizeof (struct iso_directory_record) to compute on disk sizes.
  120.  * Instead, we use offsetof(..., name) and add the name size.
  121.  * See mkisofs.h
  122.  */
  123. /* We use this to help us look up the parent inode numbers. */
  124. struct iso_path_table {
  125. unsigned char  name_len[2]; /* 721 */
  126. char extent[4]; /* 731 */
  127. char  parent[2]; /* 721 */
  128. char name[1];
  129. };
  130. struct iso_directory_record {
  131. unsigned char length [ISODCL (1, 1)];   /* 711 */
  132. char ext_attr_length [ISODCL (2, 2)];   /* 711 */
  133. char extent [ISODCL (3, 10)];  /* 733 */
  134. char size [ISODCL (11, 18)]; /* 733 */
  135. char date [ISODCL (19, 25)]; /* 7 by 711 */
  136. char flags [ISODCL (26, 26)];
  137. char file_unit_size [ISODCL (27, 27)]; /* 711 */
  138. char interleave [ISODCL (28, 28)]; /* 711 */
  139. char volume_sequence_number [ISODCL (29, 32)]; /* 723 */
  140. unsigned char name_len [ISODCL (33, 33)]; /* 711 */
  141. char name [34]; /* Not really, but we need something here */
  142. };
  143. #endif