LCOV - code coverage report
Current view: top level - isofs/cd9660 - iso.h (source / functions) Hit Total Coverage
Test: 6.4 Lines: 0 6 0.0 %
Date: 2018-10-19 03:25:38 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*      $OpenBSD: iso.h,v 1.15 2013/05/30 17:35:01 guenther Exp $       */
       2             : /*      $NetBSD: iso.h,v 1.20 1997/07/07 22:45:34 cgd Exp $     */
       3             : 
       4             : /*-
       5             :  * Copyright (c) 1994
       6             :  *      The Regents of the University of California.  All rights reserved.
       7             :  *
       8             :  * This code is derived from software contributed to Berkeley
       9             :  * by Pace Willisson (pace@blitz.com).  The Rock Ridge Extension
      10             :  * Support code is derived from software contributed to Berkeley
      11             :  * by Atsushi Murai (amurai@spec.co.jp).
      12             :  *
      13             :  * Redistribution and use in source and binary forms, with or without
      14             :  * modification, are permitted provided that the following conditions
      15             :  * are met:
      16             :  * 1. Redistributions of source code must retain the above copyright
      17             :  *    notice, this list of conditions and the following disclaimer.
      18             :  * 2. Redistributions in binary form must reproduce the above copyright
      19             :  *    notice, this list of conditions and the following disclaimer in the
      20             :  *    documentation and/or other materials provided with the distribution.
      21             :  * 3. Neither the name of the University nor the names of its contributors
      22             :  *    may be used to endorse or promote products derived from this software
      23             :  *    without specific prior written permission.
      24             :  *
      25             :  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      26             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      27             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      28             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      29             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      30             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      31             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      32             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      33             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      34             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      35             :  * SUCH DAMAGE.
      36             :  *
      37             :  *      @(#)iso.h       8.4 (Berkeley) 12/5/94
      38             :  */
      39             : 
      40             : /*
      41             :  * Definitions describing ISO9660 file system structure, as well as
      42             :  * the functions necessary to access fields of ISO9660 file system
      43             :  * structures.
      44             :  */
      45             : 
      46             : typedef uint32_t cdino_t;
      47             : 
      48             : #define ISODCL(from, to) (to - from + 1)
      49             : 
      50             : struct iso_volume_descriptor {
      51             :         char type[ISODCL(1,1)]; /* 711 */
      52             :         char id[ISODCL(2,6)];
      53             :         char version[ISODCL(7,7)];
      54             :         char data[ISODCL(8,2048)];
      55             : };
      56             : 
      57             : /* volume descriptor types */
      58             : #define ISO_VD_PRIMARY 1
      59             : #define ISO_VD_SUPPLEMENTARY 2
      60             : #define ISO_VD_END 255
      61             : 
      62             : #define ISO_STANDARD_ID "CD001"
      63             : #define ISO_ECMA_ID     "CDW01"
      64             : 
      65             : struct iso_primary_descriptor {
      66             :         char type                       [ISODCL (  1,   1)]; /* 711 */
      67             :         char id                         [ISODCL (  2,   6)];
      68             :         char version                    [ISODCL (  7,   7)]; /* 711 */
      69             :         char unused1                    [ISODCL (  8,   8)];
      70             :         char system_id                  [ISODCL (  9,  40)]; /* achars */
      71             :         char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
      72             :         char unused2                    [ISODCL ( 73,  80)];
      73             :         char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
      74             :         char unused3                    [ISODCL ( 89, 120)];
      75             :         char volume_set_size            [ISODCL (121, 124)]; /* 723 */
      76             :         char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
      77             :         char logical_block_size         [ISODCL (129, 132)]; /* 723 */
      78             :         char path_table_size            [ISODCL (133, 140)]; /* 733 */
      79             :         char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
      80             :         char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
      81             :         char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
      82             :         char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
      83             :         char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
      84             :         char volume_set_id              [ISODCL (191, 318)]; /* dchars */
      85             :         char publisher_id               [ISODCL (319, 446)]; /* achars */
      86             :         char preparer_id                [ISODCL (447, 574)]; /* achars */
      87             :         char application_id             [ISODCL (575, 702)]; /* achars */
      88             :         char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
      89             :         char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
      90             :         char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
      91             :         char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
      92             :         char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
      93             :         char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
      94             :         char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
      95             :         char file_structure_version     [ISODCL (882, 882)]; /* 711 */
      96             :         char unused4                    [ISODCL (883, 883)];
      97             :         char application_data           [ISODCL (884, 1395)];
      98             :         char unused5                    [ISODCL (1396, 2048)];
      99             : };
     100             : #define ISO_DEFAULT_BLOCK_SHIFT         11
     101             : #define ISO_DEFAULT_BLOCK_SIZE          (1<<ISO_DEFAULT_BLOCK_SHIFT)
     102             : 
     103             : /*
     104             :  * Used by Microsoft Joliet extension to ISO9660. Almost the same
     105             :  * as PVD, but byte position 8 is a flag, and 89-120 is for escape.
     106             :  */
     107             : 
     108             : struct iso_supplementary_descriptor {
     109             :         char type                       [ISODCL (  1,   1)]; /* 711 */
     110             :         char id                         [ISODCL (  2,   6)];
     111             :         char version                    [ISODCL (  7,   7)]; /* 711 */
     112             :         char flags                      [ISODCL (  8,   8)];
     113             :         char system_id                  [ISODCL (  9,  40)]; /* achars */
     114             :         char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
     115             :         char unused2                    [ISODCL ( 73,  80)];
     116             :         char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
     117             :         char escape                     [ISODCL ( 89, 120)];
     118             :         char volume_set_size            [ISODCL (121, 124)]; /* 723 */
     119             :         char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
     120             :         char logical_block_size         [ISODCL (129, 132)]; /* 723 */
     121             :         char path_table_size            [ISODCL (133, 140)]; /* 733 */
     122             :         char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
     123             :         char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
     124             :         char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
     125             :         char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
     126             :         char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
     127             :         char volume_set_id              [ISODCL (191, 318)]; /* dchars */
     128             :         char publisher_id               [ISODCL (319, 446)]; /* achars */
     129             :         char preparer_id                [ISODCL (447, 574)]; /* achars */
     130             :         char application_id             [ISODCL (575, 702)]; /* achars */
     131             :         char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
     132             :         char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
     133             :         char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
     134             :         char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
     135             :         char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
     136             :         char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
     137             :         char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
     138             :         char file_structure_version     [ISODCL (882, 882)]; /* 711 */
     139             :         char unused4                    [ISODCL (883, 883)];
     140             :         char application_data           [ISODCL (884, 1395)];
     141             :         char unused5                    [ISODCL (1396, 2048)];
     142             : };
     143             : 
     144             : struct iso_directory_record {
     145             :         char length                     [ISODCL (1, 1)]; /* 711 */
     146             :         char ext_attr_length            [ISODCL (2, 2)]; /* 711 */
     147             :         u_char extent                   [ISODCL (3, 10)]; /* 733 */
     148             :         u_char size                     [ISODCL (11, 18)]; /* 733 */
     149             :         char date                       [ISODCL (19, 25)]; /* 7 by 711 */
     150             :         char flags                      [ISODCL (26, 26)];
     151             :         char file_unit_size             [ISODCL (27, 27)]; /* 711 */
     152             :         char interleave                 [ISODCL (28, 28)]; /* 711 */
     153             :         char volume_sequence_number     [ISODCL (29, 32)]; /* 723 */
     154             :         char name_len                   [ISODCL (33, 33)]; /* 711 */
     155             :         char name                       [1];                    /* XXX */
     156             : };
     157             : /* can't take sizeof(iso_directory_record), because of possible alignment
     158             :    of the last entry (34 instead of 33) */
     159             : #define ISO_DIRECTORY_RECORD_SIZE       33
     160             : 
     161             : struct iso_extended_attributes {
     162             :         u_char owner                    [ISODCL (1, 4)]; /* 723 */
     163             :         u_char group                    [ISODCL (5, 8)]; /* 723 */
     164             :         u_char perm                     [ISODCL (9, 10)]; /* 9.5.3 */
     165             :         char ctime                      [ISODCL (11, 27)]; /* 8.4.26.1 */
     166             :         char mtime                      [ISODCL (28, 44)]; /* 8.4.26.1 */
     167             :         char xtime                      [ISODCL (45, 61)]; /* 8.4.26.1 */
     168             :         char ftime                      [ISODCL (62, 78)]; /* 8.4.26.1 */
     169             :         char recfmt                     [ISODCL (79, 79)]; /* 711 */
     170             :         char recattr                    [ISODCL (80, 80)]; /* 711 */
     171             :         u_char reclen                   [ISODCL (81, 84)]; /* 723 */
     172             :         char system_id                  [ISODCL (85, 116)]; /* achars */
     173             :         char system_use                 [ISODCL (117, 180)];
     174             :         char version                    [ISODCL (181, 181)]; /* 711 */
     175             :         char len_esc                    [ISODCL (182, 182)]; /* 711 */
     176             :         char reserved                   [ISODCL (183, 246)];
     177             :         u_char len_au                   [ISODCL (247, 250)]; /* 723 */
     178             : };
     179             : 
     180             : static __inline int isonum_711(u_char *) __attribute__ ((__unused__));
     181             : static __inline int isonum_712(char *) __attribute__ ((__unused__));
     182             : static __inline int isonum_721(u_char *) __attribute__ ((__unused__));
     183             : static __inline int isonum_722(u_char *) __attribute__ ((__unused__));
     184             : static __inline int isonum_723(u_char *) __attribute__ ((__unused__));
     185             : static __inline int isonum_731(u_char *) __attribute__ ((__unused__));
     186             : static __inline int isonum_732(u_char *) __attribute__ ((__unused__));
     187             : static __inline int isonum_733(u_char *) __attribute__ ((__unused__));
     188             : 
     189             : /* 7.1.1: unsigned char */
     190             : static __inline int
     191           0 : isonum_711(u_char *p)
     192             : {
     193           0 :         return *p;
     194             : }
     195             : 
     196             : /* 7.1.2: signed(?) char */
     197             : static __inline int
     198             : isonum_712(char *p)
     199             : {
     200             :         return *p;
     201             : }
     202             : 
     203             : /* 7.2.1: unsigned little-endian 16-bit value.  NOT USED IN KERNEL. */
     204             : static __inline int
     205             : isonum_721(p)
     206             :         u_char *p;
     207             : {
     208             : #if !defined(__STRICT_ALIGNMENT) && (BYTE_ORDER == LITTLE_ENDIAN)
     209             :         return *(u_int16_t *)p;
     210             : #else
     211             :         return *p|((char)p[1] << 8);
     212             : #endif
     213             : }
     214             : 
     215             : /* 7.2.2: unsigned big-endian 16-bit value.  NOT USED IN KERNEL. */
     216             : static __inline int     
     217             : isonum_722(p)
     218             :         unsigned char *p;
     219             : {
     220             : #if !defined(__STRICT_ALIGNMENT) && (BYTE_ORDER == BIG_ENDIAN)
     221             :         return *(u_int16_t *)p;
     222             : #else
     223             :         return ((char)*p << 8)|p[1];
     224             : #endif
     225             : } 
     226             : 
     227             : /* 7.2.3: unsigned both-endian (little, then big) 16-bit value */
     228             : static __inline int
     229           0 : isonum_723(u_char *p)
     230             : {
     231             : #if !defined(__STRICT_ALIGNMENT) && \
     232             :     ((BYTE_ORDER == LITTLE_ENDIAN) || (BYTE_ORDER == BIG_ENDIAN))
     233             : #if BYTE_ORDER == LITTLE_ENDIAN
     234           0 :         return *(u_int16_t *)p;
     235             : #else
     236             :         return *(u_int16_t *)(p + 2);
     237             : #endif
     238             : #else /* __STRICT_ALIGNMENT or weird byte order */
     239             :         return *p|(p[1] << 8);
     240             : #endif
     241             : }
     242             : 
     243             : /* 7.3.1: unsigned little-endian 32-bit value.  NOT USED IN KERNEL. */
     244             : static __inline int
     245             : isonum_731(p)
     246             :         u_char *p;
     247             : {
     248             : #if !defined(__STRICT_ALIGNMENT) && (BYTE_ORDER == LITTLE_ENDIAN)
     249             :         return *(u_int32_t *)p;
     250             : #else
     251             :         return *p|(p[1] << 8)|(p[2] << 16)|(p[3] << 24);
     252             : #endif
     253             : }
     254             : 
     255             : /* 7.3.2: unsigned big-endian 32-bit value.  NOT USED IN KERNEL. */
     256             : static __inline int
     257             : isonum_732(p)
     258             :         unsigned char *p;
     259             : {
     260             : #if !defined(__STRICT_ALIGNMENT) && (BYTE_ORDER == BIG_ENDIAN)
     261             :         return *(u_int32_t *)p;
     262             : #else
     263             :         return (*p << 24)|(p[1] << 16)|(p[2] << 8)|p[3];
     264             : #endif
     265             : }
     266             : 
     267             : /* 7.3.3: unsigned both-endian (little, then big) 32-bit value */
     268             : static __inline int
     269           0 : isonum_733(u_char *p)
     270             : {
     271             : #if !defined(__STRICT_ALIGNMENT) && \
     272             :     ((BYTE_ORDER == LITTLE_ENDIAN) || (BYTE_ORDER == BIG_ENDIAN))
     273             : #if BYTE_ORDER == LITTLE_ENDIAN
     274           0 :         return *(u_int32_t *)p;
     275             : #else
     276             :         return *(u_int32_t *)(p + 4);
     277             : #endif
     278             : #else /* __STRICT_ALIGNMENT or weird byte order */
     279             :         return *p|(p[1] << 8)|(p[2] << 16)|(p[3] << 24);
     280             : #endif
     281             : }
     282             : 
     283             : /*
     284             :  * Associated files have a leading '='.
     285             :  */
     286             : #define ASSOCCHAR       '='

Generated by: LCOV version 1.13