summaryrefslogtreecommitdiff
path: root/genisoimage/genisoimage.h
diff options
context:
space:
mode:
Diffstat (limited to 'genisoimage/genisoimage.h')
-rw-r--r--genisoimage/genisoimage.h802
1 files changed, 802 insertions, 0 deletions
diff --git a/genisoimage/genisoimage.h b/genisoimage/genisoimage.h
new file mode 100644
index 0000000..bbedfb0
--- /dev/null
+++ b/genisoimage/genisoimage.h
@@ -0,0 +1,802 @@
+/*
+ * This file has been modified for the cdrkit suite.
+ *
+ * The behaviour and appearence of the program code below can differ to a major
+ * extent from the version distributed by the original author(s).
+ *
+ * For details, see Changelog file distributed with the cdrkit package. If you
+ * received this file from another source then ask the distributing person for
+ * a log of modifications.
+ *
+ */
+
+/* @(#)genisoimage.h 1.95 05/05/01 joerg */
+/*
+ * Header file genisoimage.h - assorted structure definitions and typecasts.
+ *
+ * Written by Eric Youngdale (1993).
+ *
+ * Copyright 1993 Yggdrasil Computing, Incorporated
+ * Copyright (c) 1999,2000-2003 J. Schilling
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* APPLE_HYB James Pearson j.pearson@ge.ucl.ac.uk 23/2/2000 */
+
+#define APPID_DEFAULT "GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM"
+
+
+#include <mconfig.h> /* Must be before stdio.h for LARGEFILE support */
+#include <stdio.h>
+#include <statdefs.h>
+#include <stdxlib.h>
+#include <unixstd.h> /* Needed for for LARGEFILE support */
+#include <strdefs.h>
+#include <dirdefs.h>
+#include <utypes.h>
+#include <standard.h>
+#include <libport.h>
+#include "scsi.h"
+#ifdef JIGDO_TEMPLATE
+#include "jte.h"
+#endif
+
+#ifdef DVD_VIDEO
+#ifndef UDF
+#define UDF
+#endif
+#endif
+
+/*#if _LFS_LARGEFILE*/
+#ifdef HAVE_LARGEFILES
+/*
+ * XXX Hack until fseeko()/ftello() are available everywhere or until
+ * XXX we know a secure way to let autoconf ckeck for fseeko()/ftello()
+ * XXX without defining FILE_OFFSETBITS to 64 in confdefs.h
+ */
+# define fseek fseeko
+# define ftell ftello
+#endif
+
+#ifndef HAVE_LSTAT
+#ifndef VMS
+#define lstat stat
+#endif
+#endif
+
+#include "iso9660.h"
+#include "defaults.h"
+#include <unls.h>
+
+extern struct unls_table *in_nls; /* input UNICODE conversion table */
+extern struct unls_table *out_nls; /* output UNICODE conversion table */
+extern struct unls_table *hfs_inls; /* input HFS UNICODE conversion table */
+extern struct unls_table *hfs_onls; /* output HFS UNICODE conversion table */
+
+#ifdef APPLE_HYB
+#include "mactypes.h"
+#include "hfs.h"
+
+struct hfs_info {
+ unsigned char finderinfo[32];
+ char name[HFS_MAX_FLEN + 1];
+ /* should have fields for dates here as well */
+ char *keyname;
+ struct hfs_info *next;
+};
+
+#endif /* APPLE_HYB */
+
+struct directory_entry {
+ struct directory_entry *next;
+ struct directory_entry *jnext;
+ struct iso_directory_record isorec;
+ unsigned int starting_block;
+ off_t size;
+ unsigned short priority;
+ unsigned char jreclen; /* Joliet record len */
+ char *name;
+ char *table;
+ char *whole_name;
+ struct directory *filedir;
+ struct directory_entry *parent_rec;
+ unsigned int de_flags;
+ ino_t inode; /* Used in the hash table */
+ dev_t dev; /* Used in the hash table */
+ unsigned char *rr_attributes;
+ unsigned int rr_attr_size;
+ unsigned int total_rr_attr_size;
+ unsigned int got_rr_name;
+#ifdef APPLE_HYB
+ struct directory_entry *assoc; /* entry has a resource fork */
+ hfsdirent *hfs_ent; /* HFS parameters */
+ off_t hfs_off; /* offset to real start of fork */
+ int hfs_type; /* type of HFS Unix file */
+#endif /* APPLE_HYB */
+#ifdef SORTING
+ int sort; /* sort weight for entry */
+#endif /* SORTING */
+#ifdef UDF
+ int udf_file_entry_sector; /* also used as UDF unique ID */
+#endif
+ uint64_t realsize;
+};
+
+struct file_hash {
+ struct file_hash *next;
+ ino_t inode; /* Used in the hash table */
+ dev_t dev; /* Used in the hash table */
+ nlink_t nlink; /* Used to compute new link count */
+ unsigned int starting_block;
+ off_t size;
+#ifdef SORTING
+ struct directory_entry *de;
+#endif /* SORTING */
+};
+
+
+/*
+ * This structure is used to control the output of fragments to the cdrom
+ * image. Everything that will be written to the output image will eventually
+ * go through this structure. There are two pieces - first is the sizing where
+ * we establish extent numbers for everything, and the second is when we actually
+ * generate the contents and write it to the output image.
+ *
+ * This makes it trivial to extend genisoimage to write special things in the image.
+ * All you need to do is hook an additional structure in the list, and the rest
+ * works like magic.
+ *
+ * The three passes each do the following:
+ *
+ * The 'size' pass determines the size of each component and assigns the extent number
+ * for that component.
+ *
+ * The 'generate' pass will adjust the contents and pointers as required now that extent
+ * numbers are assigned. In some cases, the contents of the record are also generated.
+ *
+ * The 'write' pass actually writes the data to the disc.
+ */
+struct output_fragment {
+ struct output_fragment *of_next;
+ int (*of_size)(int);
+ int (*of_generate)(void);
+ int (*of_write)(FILE *);
+ char *of_name; /* Textual description */
+ unsigned int of_start_extent; /* For consist check */
+};
+
+extern struct output_fragment *out_list;
+extern struct output_fragment *out_tail;
+
+extern struct output_fragment startpad_desc;
+extern struct output_fragment voldesc_desc;
+extern struct output_fragment xvoldesc_desc;
+extern struct output_fragment joliet_desc;
+extern struct output_fragment torito_desc;
+extern struct output_fragment end_vol;
+extern struct output_fragment version_desc;
+extern struct output_fragment pathtable_desc;
+extern struct output_fragment jpathtable_desc;
+extern struct output_fragment dirtree_desc;
+extern struct output_fragment dirtree_clean;
+extern struct output_fragment jdirtree_desc;
+extern struct output_fragment extension_desc;
+extern struct output_fragment files_desc;
+extern struct output_fragment interpad_desc;
+extern struct output_fragment endpad_desc;
+extern struct output_fragment sunboot_desc;
+extern struct output_fragment sunlabel_desc;
+extern struct output_fragment genboot_desc;
+extern struct output_fragment strfile_desc;
+extern struct output_fragment strdir_desc;
+extern struct output_fragment strpath_desc;
+extern struct output_fragment alphaboot_desc;
+extern struct output_fragment hppaboot_desc;
+extern struct output_fragment alpha_hppa_boot_desc;
+extern struct output_fragment mipsboot_desc;
+extern struct output_fragment mipselboot_desc;
+
+#ifdef APPLE_HYB
+extern struct output_fragment hfs_desc;
+
+#endif /* APPLE_HYB */
+#ifdef DVD_VIDEO
+/*
+ * This structure holds the information necessary to create a valid
+ * DVD-Video image. Basically it's how much to pad the files so the
+ * file offsets described in the video_ts.ifo and vts_xx_0.ifo are
+ * the correct one in the image that we create.
+ */
+typedef struct {
+ int realsize_ifo;
+ int realsize_menu;
+ int realsize_bup;
+ int size_ifo;
+ int size_menu;
+ int size_title;
+ int size_bup;
+ int pad_ifo;
+ int pad_menu;
+ int pad_title;
+ int pad_bup;
+ int number_of_vob_files;
+ int realsize_vob[10];
+} title_set_t;
+
+typedef struct {
+ int num_titles;
+ title_set_t *title_set;
+} title_set_info_t;
+#endif /* DVD_VIDEO */
+
+/*
+ * This structure describes one complete directory. It has pointers
+ * to other directories in the overall tree so that it is clear where
+ * this directory lives in the tree, and it also must contain pointers
+ * to the contents of the directory. Note that subdirectories of this
+ * directory exist twice in this stucture. Once in the subdir chain,
+ * and again in the contents chain.
+ */
+struct directory {
+ struct directory *next; /* Next directory at same level as this one */
+ struct directory *subdir; /* First subdirectory in this directory */
+ struct directory *parent;
+ struct directory_entry *contents;
+ struct directory_entry *jcontents;
+ struct directory_entry *self;
+ char *whole_name; /* Entire path */
+ char *de_name; /* Entire path */
+ unsigned int ce_bytes; /* Number of bytes of CE entries read */
+ /* for this dir */
+ unsigned int depth;
+ unsigned int size;
+ unsigned int extent;
+ unsigned int jsize;
+ unsigned int jextent;
+ unsigned int path_index;
+ unsigned int jpath_index;
+ unsigned short dir_flags;
+ unsigned short dir_nlink;
+#ifdef APPLE_HYB
+ hfsdirent *hfs_ent; /* HFS parameters */
+ struct hfs_info *hfs_info; /* list of info for all entries in dir */
+#endif /* APPLE_HYB */
+#ifdef SORTING
+ int sort; /* sort weight for child files */
+#endif /* SORTING */
+};
+
+struct deferred_write {
+ struct deferred_write *next;
+ char *table;
+ unsigned int extent;
+ off_t size;
+ char *name;
+ struct directory_entry *s_entry;
+ unsigned int pad;
+ off_t off;
+};
+
+struct eltorito_boot_entry_info {
+ struct eltorito_boot_entry_info *next;
+ char *boot_image;
+ int not_bootable;
+ int no_emul_boot;
+ int hard_disk_boot;
+ int boot_info_table;
+ int load_size;
+ int load_addr;
+};
+
+extern int goof;
+extern struct directory *root;
+extern struct directory *reloc_dir;
+extern unsigned int next_extent;
+extern unsigned int last_extent;
+extern unsigned int last_extent_written;
+extern unsigned int session_start;
+
+extern unsigned int path_table_size;
+extern unsigned int path_table[4];
+extern unsigned int path_blocks;
+extern char *path_table_l;
+extern char *path_table_m;
+
+extern unsigned int jpath_table_size;
+extern unsigned int jpath_table[4];
+extern unsigned int jpath_blocks;
+extern char *jpath_table_l;
+extern char *jpath_table_m;
+
+extern struct iso_directory_record root_record;
+extern struct iso_directory_record jroot_record;
+
+extern int check_oldnames;
+extern int check_session;
+extern int use_eltorito;
+extern int hard_disk_boot;
+extern int not_bootable;
+extern int no_emul_boot;
+extern int load_addr;
+extern int load_size;
+extern int boot_info_table;
+extern int use_RockRidge;
+extern int osecsize;
+extern int use_XA;
+extern int use_Joliet;
+extern int rationalize;
+extern int rationalize_uid;
+extern int rationalize_gid;
+extern int rationalize_filemode;
+extern int rationalize_dirmode;
+extern uid_t uid_to_use;
+extern gid_t gid_to_use;
+extern int filemode_to_use;
+extern int dirmode_to_use;
+extern int new_dir_mode;
+extern int follow_links;
+extern int cache_inodes;
+extern int verbose;
+extern int debug;
+extern int gui;
+extern int all_files;
+extern int generate_tables;
+extern int print_size;
+extern int split_output;
+extern int use_graft_ptrs;
+extern int jhide_trans_tbl;
+extern int hide_rr_moved;
+extern int omit_period;
+extern int omit_version_number;
+extern int no_rr;
+extern int transparent_compression;
+extern Uint RR_relocation_depth;
+extern int iso9660_level;
+extern int iso9660_namelen;
+extern int full_iso9660_filenames;
+extern int relaxed_filenames;
+extern int allow_lowercase;
+extern int allow_multidot;
+extern int iso_translate;
+extern int allow_leading_dots;
+extern int use_fileversion;
+extern int split_SL_component;
+extern int split_SL_field;
+extern char *trans_tbl;
+char *outfile;
+
+#define JMAX 64 /* maximum Joliet file name length (spec) */
+#define JLONGMAX 103 /* out of spec Joliet file name length */
+extern int jlen; /* selected maximum Joliet file name length */
+
+#ifdef DVD_VIDEO
+extern int dvd_video;
+#endif /* DVD_VIDEO */
+
+
+#ifdef APPLE_HYB
+extern int apple_hyb; /* create HFS hybrid */
+extern int apple_ext; /* use Apple extensions */
+extern int apple_both; /* common flag (for above) */
+extern int hfs_extra; /* extra ISO extents (hfs_ce_size) */
+extern hce_mem *hce; /* libhfs/genisoimage extras */
+extern int use_mac_name; /* use Mac name for ISO9660/Joliet/RR */
+extern int create_dt; /* create the Desktp files */
+extern char *hfs_boot_file; /* name of HFS boot file */
+extern char *magic_filename; /* magic file for CREATOR/TYPE matching */
+extern int hfs_last; /* order in which to process map/magic files */
+extern char *deftype; /* default Apple TYPE */
+extern char *defcreator; /* default Apple CREATOR */
+extern int gen_pt; /* generate HFS partition table */
+extern char *autoname; /* Autostart filename */
+extern int afe_size; /* Apple File Exchange block size */
+extern char *hfs_volume_id; /* HFS volume ID */
+extern int icon_pos; /* Keep Icon position */
+extern int hfs_lock; /* lock HFS volume (read-only) */
+extern char *hfs_bless; /* name of folder to 'bless' (System Folder) */
+extern char *hfs_parms; /* low level HFS parameters */
+
+#define MAP_LAST 1 /* process magic then map file */
+#define MAG_LAST 2 /* process map then magic file */
+
+#ifndef PREP_BOOT
+#define PREP_BOOT
+#endif /* PREP_BOOT */
+
+#ifdef PREP_BOOT
+extern char *prep_boot_image[4];
+extern int use_prep_boot;
+extern int use_chrp_boot;
+
+#endif /* PREP_BOOT */
+#endif /* APPLE_HYB */
+
+#ifdef SORTING
+extern int do_sort;
+#endif /* SORTING */
+
+/* tree.c */
+extern int stat_filter(char *, struct stat *);
+extern int lstat_filter(char *, struct stat *);
+extern int sort_tree(struct directory *);
+extern struct directory *
+find_or_create_directory(struct directory *, const char *,
+ struct directory_entry *self,
+ int,
+ struct stat *stat_template);
+extern void finish_cl_pl_entries(void);
+extern int scan_directory_tree(struct directory *this_dir, char *path,
+ struct directory_entry *self);
+
+#ifdef APPLE_HYB
+extern int insert_file_entry(struct directory *, char *, char *, int);
+#else
+extern int insert_file_entry(struct directory *, char *, char *);
+#endif /* APPLE_HYB */
+
+extern void generate_iso9660_directories(struct directory *, FILE *);
+extern void dump_tree(struct directory * node);
+extern struct directory_entry *
+search_tree_file(struct directory * node, char *filename);
+extern void update_nlink_field(struct directory * node);
+extern void init_fstatbuf(void);
+extern struct stat root_statbuf;
+extern struct stat fstatbuf;
+
+/* eltorito.c */
+extern void init_boot_catalog(const char *path);
+extern void insert_boot_cat(void);
+extern void get_boot_entry(void);
+extern void new_boot_entry(void);
+
+/* boot.c */
+extern void sparc_boot_label(char *label);
+extern void sunx86_boot_label(char *label);
+extern void scan_sparc_boot(char *files);
+extern void scan_sunx86_boot(char *files);
+extern int make_sun_label(void);
+extern int make_sunx86_label(void);
+
+/* boot-alpha.c */
+extern int add_boot_alpha_filename(char *filename);
+
+/* boot-hppa.c */
+extern int add_boot_hppa_cmdline(char *cmdline);
+extern int add_boot_hppa_kernel_32(char *filename);
+extern int add_boot_hppa_kernel_64(char *filename);
+extern int add_boot_hppa_bootloader(char *filename);
+extern int add_boot_hppa_ramdisk(char *filename);
+
+/* boot-mips.c */
+extern int add_boot_mips_filename(char *filename);
+
+/* boot-mipsel.c */
+extern int add_boot_mipsel_filename(char *filename);
+
+/* rsync.c */
+extern unsigned long long rsync64(unsigned char *mem, size_t size);
+
+/* write.c */
+extern int get_731(char *);
+extern int get_732(char *);
+extern int get_733(char *);
+extern int isonum_733(unsigned char *);
+extern void set_723(char *, unsigned int);
+extern void set_731(char *, unsigned int);
+extern void set_721(char *, unsigned int);
+extern void set_733(char *, unsigned int);
+extern int sort_directory(struct directory_entry **, int);
+extern void generate_one_directory(struct directory *, FILE *);
+extern void memcpy_max(char *, char *, int);
+extern int oneblock_size(int starting_extent);
+extern struct iso_primary_descriptor vol_desc;
+extern void xfwrite(void *buffer, int size, int count, FILE *file, int submode,
+ BOOL islast);
+extern void set_732(char *pnt, unsigned int i);
+extern void set_722(char *pnt, unsigned int i);
+extern void outputlist_insert(struct output_fragment * frag);
+
+#ifdef APPLE_HYB
+extern Ulong get_adj_size(int Csize);
+extern int adj_size(int Csize, int start_extent, int extra);
+extern void adj_size_other(struct directory * dpnt);
+extern int insert_padding_file(int size);
+extern int gen_mac_label(struct deferred_write *);
+
+#ifdef PREP_BOOT
+extern void gen_prepboot_label(unsigned char *);
+
+#endif /* PREP_BOOT */
+#endif /* APPLE_HYB */
+
+/* multi.c */
+
+extern FILE *in_image;
+extern int open_merge_image(char *path);
+extern int close_merge_image(void);
+extern struct iso_directory_record *
+merge_isofs(char *path);
+extern unsigned char *parse_xa(unsigned char *pnt, int *lenp,
+ struct directory_entry *dpnt);
+extern int rr_flags(struct iso_directory_record *idr);
+extern int merge_previous_session(struct directory *,
+ struct iso_directory_record *,
+ char *, char *);
+extern int get_session_start(int *);
+
+/* joliet.c */
+#ifdef UDF
+# ifdef USE_ICONV
+extern size_t convert_to_unicode (unsigned char *buffer,
+ int size, char *source, struct unls_table *inls);
+# else
+extern void convert_to_unicode (unsigned char *buffer,
+ int size, char *source, struct unls_table *inls);
+# endif
+extern int joliet_strlen (const char *string, struct unls_table *inls);
+#endif
+extern unsigned char conv_charset(unsigned char, struct unls_table *,
+ struct unls_table *);
+extern int joliet_sort_tree(struct directory * node);
+
+/* match.c */
+extern int matches(char *);
+extern int add_match(char *);
+
+/* files.c */
+struct dirent *readdir_add_files(char **, char *, DIR *);
+
+/* name.c */
+
+extern void iso9660_check(struct iso_directory_record *idr,
+ struct directory_entry *ndr);
+extern int iso9660_file_length(const char *name,
+ struct directory_entry *sresult, int flag);
+
+/* various */
+extern int iso9660_date(char *, time_t);
+extern void add_hash(struct directory_entry *);
+extern struct file_hash *find_hash(dev_t, ino_t);
+
+extern void flush_hash(void);
+extern void add_directory_hash(dev_t, ino_t);
+extern struct file_hash *find_directory_hash(dev_t, ino_t);
+extern void flush_file_hash(void);
+extern int delete_file_hash(struct directory_entry *);
+extern struct directory_entry *find_file_hash(char *);
+extern void add_file_hash(struct directory_entry *);
+
+extern int generate_xa_rr_attributes(char *, char *, struct directory_entry *,
+ struct stat *, struct stat *,
+ int deep_flag);
+extern char *generate_rr_extension_record(char *id, char *descriptor,
+ char *source, int *size);
+
+extern int check_prev_session(struct directory_entry **, int len,
+ struct directory_entry *, struct stat *,
+ struct stat *, struct directory_entry **);
+
+extern void match_cl_re_entries(void);
+extern void finish_cl_pl_for_prev_session(void);
+extern char *find_rr_attribute(unsigned char *pnt, int len, char *attr_type);
+
+#ifdef APPLE_HYB
+/* volume.c */
+extern int make_mac_volume(struct directory * dpnt, int start_extent);
+extern int write_fork(hfsfile * hfp, long tot);
+
+/* apple.c */
+
+extern void del_hfs_info(struct hfs_info *);
+extern int get_hfs_dir(char *, char *, struct directory_entry *);
+extern int get_hfs_info(char *, char *, struct directory_entry *);
+extern int get_hfs_rname(char *, char *, char *);
+extern int hfs_exclude(char *);
+extern void print_hfs_info(struct directory_entry *);
+extern void hfs_init(char *, unsigned short, unsigned int);
+extern void delete_rsrc_ent(struct directory_entry *);
+extern void clean_hfs(void);
+extern void perr(char *);
+extern void set_root_info(char *);
+
+/* desktop.c */
+
+extern int make_desktop(hfsvol *, int);
+
+/* mac_label.c */
+
+#ifdef _MAC_LABEL_H
+#ifdef PREP_BOOT
+extern void gen_prepboot_label(MacLabel * mac_label);
+#endif
+extern int gen_mac_label(defer *);
+#endif
+extern int autostart(void);
+
+/* libfile */
+
+extern char *get_magic_match(const char *);
+extern void clean_magic(void);
+
+#endif /* APPLE_HYB */
+
+extern char *extension_record;
+extern int extension_record_extent;
+extern int n_data_extents;
+
+/*
+ * These are a few goodies that can be specified on the command line, and are
+ * filled into the root record
+ */
+extern char *preparer;
+extern char *publisher;
+extern char *copyright;
+extern char *biblio;
+extern char *abstract;
+extern char *appid;
+extern char *volset_id;
+extern char *system_id;
+extern char *volume_id;
+extern char *boot_catalog;
+extern char *boot_image;
+extern char *genboot_image;
+extern int ucs_level;
+extern int volume_set_size;
+extern int volume_sequence_number;
+
+extern struct eltorito_boot_entry_info *first_boot_entry;
+extern struct eltorito_boot_entry_info *last_boot_entry;
+extern struct eltorito_boot_entry_info *current_boot_entry;
+
+extern char *findgequal(char *);
+extern void *e_malloc(size_t);
+
+/*
+ * Note: always use these macros to avoid problems.
+ *
+ * ISO_ROUND_UP(X) may cause an integer overflow and thus give
+ * incorrect results. So avoid it if possible.
+ *
+ * ISO_BLOCKS(X) is overflow safe. Prefer this when ever it is possible.
+ */
+#define SECTOR_SIZE (2048)
+#define ISO_ROUND_UP(X) (((X) + (SECTOR_SIZE - 1)) & ~(SECTOR_SIZE - 1))
+#define ISO_BLOCKS(X) (((X) / SECTOR_SIZE) + (((X)%SECTOR_SIZE)?1:0))
+
+#define ROUND_UP(X, Y) (((X + (Y - 1)) / Y) * Y)
+
+#ifdef APPLE_HYB
+/*
+ * ISO blocks == 2048, HFS blocks == 512
+ */
+#define HFS_BLK_CONV (SECTOR_SIZE/HFS_BLOCKSZ)
+
+#define HFS_ROUND_UP(X) ISO_ROUND_UP(((X)*HFS_BLOCKSZ)) /* XXX ??? */
+#define HFS_BLOCKS(X) (ISO_BLOCKS(X) * HFS_BLK_CONV)
+
+#define USE_MAC_NAME(E) (use_mac_name && ((E)->hfs_ent != NULL) && (E)->hfs_type)
+#endif /* APPLE_HYB */
+
+/*
+ * Rock Ridge defines
+ */
+#define NEED_RE 1 /* Need Relocated Direcotry */
+#define NEED_PL 2 /* Need Parent link */
+#define NEED_CL 4 /* Need Child link */
+#define NEED_CE 8 /* Need Continuation Area */
+#define NEED_SP 16 /* Need SUSP record */
+
+#define RR_FLAG_PX 1 /* POSIX attributes */
+#define RR_FLAG_PN 2 /* POSIX device number */
+#define RR_FLAG_SL 4 /* Symlink */
+#define RR_FLAG_NM 8 /* Alternate Name */
+#define RR_FLAG_CL 16 /* Child link */
+#define RR_FLAG_PL 32 /* Parent link */
+#define RR_FLAG_RE 64 /* Relocated Direcotry */
+#define RR_FLAG_TF 128 /* Time stamp */
+
+#define RR_FLAG_SP 1024 /* SUSP record */
+#define RR_FLAG_AA 2048 /* Apple Signature record */
+#define RR_FLAG_XA 4096 /* XA signature record */
+
+#define RR_FLAG_CE 8192 /* SUSP Continuation aerea */
+#define RR_FLAG_ER 16384 /* Extension record for RR signature */
+#define RR_FLAG_RR 32768 /* RR Signature in every file */
+#define RR_FLAG_ZF 65535 /* Linux compression extension */
+
+
+#define PREV_SESS_DEV (sizeof (dev_t) >= 4 ? 0x7ffffffd : 0x7ffd)
+#define TABLE_INODE (sizeof (ino_t) >= 4 ? 0x7ffffffe : 0x7ffe)
+#define UNCACHED_INODE (sizeof (ino_t) >= 4 ? 0x7fffffff : 0x7fff)
+#define UNCACHED_DEVICE (sizeof (dev_t) >= 4 ? 0x7fffffff : 0x7fff)
+
+#ifdef VMS
+#define STAT_INODE(X) (X.st_ino[0])
+#define PATH_SEPARATOR ']'
+#define SPATH_SEPARATOR ""
+#else
+#define STAT_INODE(X) (X.st_ino)
+#define PATH_SEPARATOR '/'
+#define SPATH_SEPARATOR "/"
+#endif
+
+/*
+ * When using multi-session, indicates that we can reuse the
+ * TRANS.TBL information for this directory entry. If this flag
+ * is set for all entries in a directory, it means we can just
+ * reuse the TRANS.TBL and not generate a new one.
+ */
+#define SAFE_TO_REUSE_TABLE_ENTRY 0x01 /* de_flags only */
+#define DIR_HAS_DOT 0x02 /* dir_flags only */
+#define DIR_HAS_DOTDOT 0x04 /* dir_flags only */
+#define INHIBIT_JOLIET_ENTRY 0x08
+#define INHIBIT_RR_ENTRY 0x10 /* not used */
+#define RELOCATED_DIRECTORY 0x20 /* de_flags only */
+#define INHIBIT_ISO9660_ENTRY 0x40
+#define MEMORY_FILE 0x80 /* de_flags only */
+#define HIDDEN_FILE 0x100 /* de_flags only */
+#define DIR_WAS_SCANNED 0x200 /* dir_flags only */
+
+/*
+ * Volume sequence number to use in all of the iso directory records.
+ */
+#define DEF_VSN 1
+
+/*
+ * Make sure we have a definition for this. If not, take a very conservative
+ * guess.
+ * POSIX requires the max pathname component lenght to be defined in limits.h
+ * If variable, it may be undefined. If undefined, there should be
+ * a definition for _POSIX_NAME_MAX in limits.h or in unistd.h
+ * As _POSIX_NAME_MAX is defined to 14, we cannot use it.
+ * XXX Eric's wrong comment:
+ * XXX From what I can tell SunOS is the only one with this trouble.
+ */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef NAME_MAX
+#ifdef FILENAME_MAX
+#define NAME_MAX FILENAME_MAX
+#else
+#define NAME_MAX 256
+#endif
+#endif
+
+#ifndef PATH_MAX
+#ifdef FILENAME_MAX
+#define PATH_MAX FILENAME_MAX
+#else
+#define PATH_MAX 1024
+#endif
+#endif
+
+/*
+ * XXX JS: Some structures have odd lengths!
+ * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length.
+ * For this reason, we cannot use sizeof (struct iso_path_table) or
+ * sizeof (struct iso_directory_record) to compute on disk sizes.
+ * Instead, we use offsetof(..., name) and add the name size.
+ * See iso9660.h
+ */
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+/*
+ * EB: various shared stuff
+ */
+extern char *merge_warn_msg;