15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader) 35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * including Rock Ridge Extensions support 45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Copyright (C) 1998, 1999 Kousuke Takai <tak@kmc.kyoto-u.ac.jp> 65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * This program is free software; you can redistribute it and/or modify 85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * it under the terms of the GNU General Public License as published by 95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * the Free Software Foundation; either version 2 of the License, or 105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * (at your option) any later version. 115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * This program is distributed in the hope that it will be useful, 135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * GNU General Public License for more details. 165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * 175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * You should have received a copy of the GNU General Public License 185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * along with this program; if not, write to the Free Software 195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * References: 235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * linux/fs/isofs/rock.[ch] 245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * mkisofs-1.11.1/diag/isoinfo.c 255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * mkisofs-1.11.1/iso9660.h 265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * (all are written by Eric Youngdale) 275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */ 285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef _ISO9660_H_ 305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define _ISO9660_H_ 315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_SECTOR_BITS (11) 335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_SECTOR_SIZE (1<<ISO_SECTOR_BITS) 345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_REGULAR 1 /* regular file */ 365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_DIRECTORY 2 /* directory */ 375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_OTHER 0 /* other file (with Rock Ridge) */ 385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_PX 0x01 /* have POSIX file attributes */ 405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_PN 0x02 /* POSIX devices */ 415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_SL 0x04 /* Symbolic link */ 425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_NM 0x08 /* have alternate file name */ 435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_CL 0x10 /* Child link */ 445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_PL 0x20 /* Parent link */ 455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_RE 0x40 /* Relocation directory */ 465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RR_FLAG_TF 0x80 /* Timestamps */ 475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* POSIX file attributes for Rock Ridge extensions */ 495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define POSIX_S_IFMT 0xF000 505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define POSIX_S_IFREG 0x8000 515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define POSIX_S_IFDIR 0x4000 525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* volume descriptor types */ 545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_VD_PRIMARY 1 555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_VD_END 255 565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ISO_STANDARD_ID "CD001" 585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef ASM_FILE 605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef __BIT_TYPES_DEFINED__ 625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef int int8_t __attribute__((mode(QI))); 635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned int u_int8_t __attribute__((mode(QI))); 645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef int int16_t __attribute__((mode(HI))); 655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned int u_int16_t __attribute__((mode(HI))); 665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef int int32_t __attribute__((mode(SI))); 675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned int u_int32_t __attribute__((mode(SI))); 685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif 695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef union { 715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t l,b; 725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} iso_8bit_t; 735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct __iso_16bit { 755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int16_t l, b; 765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} iso_16bit_t __attribute__ ((packed)); 775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct __iso_32bit { 795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int32_t l, b; 805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} iso_32bit_t __attribute__ ((packed)); 815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef u_int8_t iso_date_t[7]; 835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct iso_directory_record { 855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t length; 865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t ext_attr_length; 875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t extent; 885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t size; 895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_date_t date; 905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t file_unit_size; 925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t interleave; 935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_16bit_t volume_seq_number; 945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t name_len; 955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t name[1]; 965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed)); 975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct iso_primary_descriptor { 995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t type; 1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t id[5]; 1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t version; 1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t _unused1[1]; 1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t system_id[32]; 1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t volume_id[32]; 1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t _unused2[8]; 1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t volume_space_size; 1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t _unused3[32]; 1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_16bit_t volume_set_size; 1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_16bit_t volume_seq_number; 1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_16bit_t logical_block_size; 1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t path_table_size; 1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t type_l_path_table[4]; 1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t opt_type_l_path_table[4]; 1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t type_m_path_table[4]; 1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t opt_type_m_path_table[4]; 1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct iso_directory_record root_directory_record; 1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t volume_set_id[128]; 1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t publisher_id[128]; 1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t preparer_id[128]; 1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t application_id[128]; 1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t copyright_file_id[37]; 1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t abstract_file_id[37]; 1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t bibliographic_file_id[37]; 1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t creation_date[17]; 1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t modification_date[17]; 1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t expiration_date[17]; 1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t effective_date[17]; 1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t file_structure_version; 1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t _unused4[1]; 1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t application_data[512]; 1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t _unused5[653]; 1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed)); 1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct rock_ridge { 1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int16_t signature; 1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t len; 1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t version; 1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project union { 1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct SP { 1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int16_t magic; 1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t skip; 1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } sp; 1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct CE { 1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t extent; 1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t offset; 1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t size; 1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } ce; 1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct ER { 1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t len_id; 1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t len_des; 1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t len_src; 1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t ext_ver; 1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t data[0]; 1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } er; 1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct RR { 1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } rr; 1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct PX { 1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t mode; 1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t nlink; 1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t uid; 1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t gid; 1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } px; 1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct PN { 1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t dev_high; 1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t dev_low; 1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } pn; 1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct SL { 1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct SL_component { 1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t len; 1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t text[0]; 1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } link; 1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } sl; 1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct NM { 1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project u_int8_t name[0]; 1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } nm; 1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct CL { 1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t location; 1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } cl; 1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct PL { 1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_32bit_t location; 1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } pl; 1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct TF { 1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_8bit_t flags; 1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project iso_date_t times[0]; 1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } tf; 1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project } u; 1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed)); 1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef union RR_ptr { 1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project struct rock_ridge *rr; 1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project char *ptr; 1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project int i; 1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} RR_ptr_t; 1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define RRMAGIC(c1, c2) ((c1)|(c2) << 8) 2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define CHECK2(ptr, c1, c2) \ 2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (*(unsigned short *)(ptr) == (((c1) | (c2) << 8) & 0xFFFF)) 2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* !ASM_FILE */ 2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* _ISO9660_H_ */ 207