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