[Debburn-changes] r450 - in cdrkit/trunk: 3rd-party/zisofs_tools debian icedax mkisoimage mkisoimage/diag readom wodim

Eduard Bloch blade at alioth.debian.org
Thu Nov 23 22:37:34 CET 2006


Author: blade
Date: 2006-11-23 22:37:32 +0100 (Thu, 23 Nov 2006)
New Revision: 450

Added:
   cdrkit/trunk/mkisoimage/build_mkisoimage.com
   cdrkit/trunk/mkisoimage/mkisoimage.8
   cdrkit/trunk/mkisoimage/mkisoimage.c
   cdrkit/trunk/mkisoimage/mkisoimage.h
Removed:
   cdrkit/trunk/3rd-party/zisofs_tools/Makefile.man
   cdrkit/trunk/icedax/Makefile.man
   cdrkit/trunk/mkisoimage/Makefile.man
   cdrkit/trunk/mkisoimage/build_mkisofs.com
   cdrkit/trunk/mkisoimage/diag/Makefile.man
   cdrkit/trunk/mkisoimage/mkisofs.8
   cdrkit/trunk/mkisoimage/mkisofs.c
   cdrkit/trunk/mkisoimage/mkisofs.h
   cdrkit/trunk/readom/Makefile.man
   cdrkit/trunk/wodim/Makefile.man
Modified:
   cdrkit/trunk/debian/control
   cdrkit/trunk/mkisoimage/CMakeLists.txt
   cdrkit/trunk/mkisoimage/apple.c
   cdrkit/trunk/mkisoimage/apple_driver.8
   cdrkit/trunk/mkisoimage/apple_driver.c
   cdrkit/trunk/mkisoimage/boot-alpha.c
   cdrkit/trunk/mkisoimage/boot-hppa.c
   cdrkit/trunk/mkisoimage/boot-mips.c
   cdrkit/trunk/mkisoimage/boot-mipsel.c
   cdrkit/trunk/mkisoimage/boot.c
   cdrkit/trunk/mkisoimage/bootinfo.h
   cdrkit/trunk/mkisoimage/bswap.h
   cdrkit/trunk/mkisoimage/desktop.c
   cdrkit/trunk/mkisoimage/diag/README
   cdrkit/trunk/mkisoimage/diag/isodebug.8
   cdrkit/trunk/mkisoimage/diag/isoinfo.8
   cdrkit/trunk/mkisoimage/dvd_file.c
   cdrkit/trunk/mkisoimage/dvd_reader.c
   cdrkit/trunk/mkisoimage/dvd_reader.h
   cdrkit/trunk/mkisoimage/eltorito.c
   cdrkit/trunk/mkisoimage/files.c
   cdrkit/trunk/mkisoimage/hash.c
   cdrkit/trunk/mkisoimage/ifo_read.c
   cdrkit/trunk/mkisoimage/ifo_read.h
   cdrkit/trunk/mkisoimage/ifo_types.h
   cdrkit/trunk/mkisoimage/iso9660.h
   cdrkit/trunk/mkisoimage/joliet.c
   cdrkit/trunk/mkisoimage/jte.c
   cdrkit/trunk/mkisoimage/mac_label.c
   cdrkit/trunk/mkisoimage/mac_label.h
   cdrkit/trunk/mkisoimage/mkhybrid.8
   cdrkit/trunk/mkisoimage/multi.c
   cdrkit/trunk/mkisoimage/name.c
   cdrkit/trunk/mkisoimage/rock.c
   cdrkit/trunk/mkisoimage/rsync.c
   cdrkit/trunk/mkisoimage/scsi.c
   cdrkit/trunk/mkisoimage/stream.c
   cdrkit/trunk/mkisoimage/sunlabel.h
   cdrkit/trunk/mkisoimage/tree.c
   cdrkit/trunk/mkisoimage/udf.c
   cdrkit/trunk/mkisoimage/udf.h
   cdrkit/trunk/mkisoimage/udf_fs.h
   cdrkit/trunk/mkisoimage/vms.c
   cdrkit/trunk/mkisoimage/vms.h
   cdrkit/trunk/mkisoimage/volume.c
   cdrkit/trunk/mkisoimage/write.c
Log:
mkisoimage, contents replacement, and removed obsolete Makefile.man files

Deleted: cdrkit/trunk/3rd-party/zisofs_tools/Makefile.man
===================================================================
--- cdrkit/trunk/3rd-party/zisofs_tools/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/3rd-party/zisofs_tools/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,30 +0,0 @@
-#ident @(#)Makefile.man	1.3 00/11/19 
-###########################################################################
-# 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; see the file COPYING.  If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-###########################################################################
-SRCROOT=	..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-MANDIR=		man
-TARGETMAN=	mkzftree
-MANSECT=	$(MANSECT_ADMIN)
-MANSUFFIX=	$(MANSUFF_ADMIN)
-MANFILE=	mkzftree.8
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################

Modified: cdrkit/trunk/debian/control
===================================================================
--- cdrkit/trunk/debian/control	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/debian/control	2006-11-23 21:37:32 UTC (rev 450)
@@ -53,8 +53,8 @@
 Suggests: vorbis-tools, cdrkit-doc
 Depends: ${shlibs:Depends}
 Section: sound
-Provides: cdda2wav
 Replaces: cdda2wav
+Conflicts: cdda2wav (<< 9:1.0)
 Description: Creates WAV files from audio CDs
  cdda2wav lets you digitally copy audio tracks from a CD-ROM, avoiding
  the distortion that is introduced when recording via a sound card. Data 

Deleted: cdrkit/trunk/icedax/Makefile.man
===================================================================
--- cdrkit/trunk/icedax/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/icedax/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,18 +0,0 @@
-#ident @(#)Makefile.man	1.2 00/03/26 
-###########################################################################
-# Sample makefile for installing manual pages
-###########################################################################
-SRCROOT=	..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-MANDIR=		man
-TARGETMAN=	cdda2wav
-MANSECT=	$(MANSECT_CMD)
-MANSUFFIX=	$(MANSUFF_CMD)
-MANFILE=	cdda2wav.1
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################

Modified: cdrkit/trunk/mkisoimage/CMakeLists.txt
===================================================================
--- cdrkit/trunk/mkisoimage/CMakeLists.txt	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/CMakeLists.txt	2006-11-23 21:37:32 UTC (rev 450)
@@ -30,10 +30,10 @@
 #SET_SOURCE_FILES_PROPERTIES(${MKISOFS_MOST_SRCS} PROPERTIES )
 LINK_DIRECTORIES(../libhfs_iso ../libschily ../libusal ../libunls ../libdeflt)
 
-ADD_EXECUTABLE (mkisofs mkisofs.c ${MKISOFS_MOST_SRCS})
-TARGET_LINK_LIBRARIES(mkisofs hfs_iso deflt ${MAGICLIBS} c unls z ${EXTRA_LIBICONV} ${EXTRA_LIBS})
+ADD_EXECUTABLE (mkisoimage mkisoimage.c ${MKISOFS_MOST_SRCS})
+TARGET_LINK_LIBRARIES(mkisoimage hfs_iso deflt ${MAGICLIBS} c unls z ${EXTRA_LIBICONV} ${EXTRA_LIBS})
 
-# common lib set and mkisofs source parts for the rest
+# common lib set and mkisoimage source parts for the rest
 LINK_LIBRARIES(${EXTRA_LIBS} deflt unls ${EXTRA_LIBICONV} )
 SET(MI_COMMON scsi.c scsi_cdr.c cd_misc.c modes.c defaults.c getnum.c)
 ADD_EXECUTABLE(devdump diag/dump.c  ${MI_COMMON})
@@ -43,11 +43,11 @@
 ADD_EXECUTABLE(isovfy	diag/isovfy.c	 ${MI_COMMON})
 
 
-SET_TARGET_PROPERTIES(mkisofs devdump isodebug isodump isoinfo isovfy PROPERTIES  SKIP_BUILD_RPATH TRUE)
+SET_TARGET_PROPERTIES(mkisoimage devdump isodebug isodump isoinfo isovfy PROPERTIES  SKIP_BUILD_RPATH TRUE)
 
-INSTALL(TARGETS mkisofs devdump isodebug isodump isoinfo isovfy DESTINATION bin)
+INSTALL(TARGETS mkisoimage devdump isodebug isodump isoinfo isovfy DESTINATION bin)
 INSTALL(FILES 
-mkisofs.8
+mkisoimage.8
 diag/devdump.8
 diag/isodebug.8
 diag/isodump.8

Deleted: cdrkit/trunk/mkisoimage/Makefile.man
===================================================================
--- cdrkit/trunk/mkisoimage/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,29 +0,0 @@
-#ident @(#)Makefile.man	1.3 00/11/19 
-###########################################################################
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2
-# as published by the Free Software Foundation.
-#
-# 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; see the file COPYING.  If not, write to the Free Software
-# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-###########################################################################
-SRCROOT=	..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-MANDIR=		man
-TARGETMAN=	mkisofs
-MANSECT=	$(MANSECT_ADMIN)
-MANSUFFIX=	$(MANSUFF_ADMIN)
-MANFILE=	mkisofs.8
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################

Modified: cdrkit/trunk/mkisoimage/apple.c
===================================================================
--- cdrkit/trunk/mkisoimage/apple.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/apple.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -52,7 +52,7 @@
 #ifdef APPLE_HYB
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <errno.h>
 #include <fctldefs.h>
 #include <utypes.h>
@@ -66,7 +66,7 @@
 magic_t magic_state = NULL;
 #endif /* USE_MAGIC */
 
-/* tidy up mkisofs definition ... */
+/* tidy up mkisoimage definition ... */
 typedef struct directory_entry dir_ent;
 
 /* routines for getting HFS names and info */

Modified: cdrkit/trunk/mkisoimage/apple_driver.8
===================================================================
--- cdrkit/trunk/mkisoimage/apple_driver.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/apple_driver.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -45,9 +45,9 @@
 .PP
 The driver code (both extracting the driver and creating partitions etc.
 is based on code from 
-.I mkisofs 1.05 PLUS
+.I mkisoimage 1.05 PLUS
 by Andy Polyakov <appro at fy.chalmers.se>
-(see http://fy.chalmers.se/~appro/mkisofs_plus.html)
+(see http://fy.chalmers.se/~appro/mkisoimage_plus.html)
 .PP
 This manpage describes the program implementation of
 .B

Modified: cdrkit/trunk/mkisoimage/apple_driver.c
===================================================================
--- cdrkit/trunk/mkisoimage/apple_driver.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/apple_driver.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -18,9 +18,9 @@
 /*
  *	apple_driver.c: extract Mac partition label, maps and boot driver
  *
- *	Based on Apple_Driver.pl, part of "mkisofs 1.05 PLUS" by Andy Polyakov
+ *	Based on Apple_Driver.pl, part of "mkisoimage 1.05 PLUS" by Andy Polyakov
  *	<appro at fy.chalmers.se> (I don't know Perl, so I rewrote it C ...)
- *	(see http://fy.chalmers.se/~appro/mkisofs_plus.html for details)
+ *	(see http://fy.chalmers.se/~appro/mkisoimage_plus.html for details)
  *
  *	usage: apple_driver CDROM_device > HFS_driver_file
  *
@@ -40,7 +40,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <mac_label.h>
 #include <schily.h>
 

Modified: cdrkit/trunk/mkisoimage/boot-alpha.c
===================================================================
--- cdrkit/trunk/mkisoimage/boot-alpha.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/boot-alpha.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -35,7 +35,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/boot-hppa.c
===================================================================
--- cdrkit/trunk/mkisoimage/boot-hppa.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/boot-hppa.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -43,7 +43,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/boot-mips.c
===================================================================
--- cdrkit/trunk/mkisoimage/boot-mips.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/boot-mips.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -188,7 +188,7 @@
 };
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/boot-mipsel.c
===================================================================
--- cdrkit/trunk/mkisoimage/boot-mipsel.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/boot-mipsel.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -56,7 +56,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/boot.c
===================================================================
--- cdrkit/trunk/mkisoimage/boot.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/boot.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -37,7 +37,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/bootinfo.h
===================================================================
--- cdrkit/trunk/mkisoimage/bootinfo.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/bootinfo.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -12,7 +12,7 @@
 
 /* @(#)bootinfo.h	1.3 04/03/02 Copyright 1999, 2004 J. Schilling */
 /*
- *	Header file bootinfo.h - mkisofs-defined boot information table
+ *	Header file bootinfo.h - mkisoimage-defined boot information table
  *	useful for an El Torito-loaded disk image.
  *
  *	Copyright (c) 1999, 2004 J. Schilling
@@ -35,7 +35,7 @@
 #ifndef	_BOOTINFO_H
 #define	_BOOTINFO_H
 
-struct mkisofs_boot_info {
+struct mkisoimage_boot_info {
 	char bi_pvd	 [ISODCL(1,   4)]; /* LBA of PVD */
 	char bi_file	 [ISODCL(5,   8)]; /* LBA of boot image */
 	char bi_length	 [ISODCL(9,  12)]; /* Length of boot image */

Modified: cdrkit/trunk/mkisoimage/bswap.h
===================================================================
--- cdrkit/trunk/mkisoimage/bswap.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/bswap.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -19,7 +19,7 @@
  *	These macros should better be avoided as in place conversion in
  *	general only works on processors like Motorola 68000 and Intel x86.
  *	Modern processors usually have alignement restrictions that may
- *	cause problems. The stripped down libdvdread for mkisofs is known
+ *	cause problems. The stripped down libdvdread for mkisoimage is known
  *	not to have these alignement problems, so we may use the macros
  *	as they have been introduced by the authors of libdvdread.
  *

Deleted: cdrkit/trunk/mkisoimage/build_mkisofs.com
===================================================================
--- cdrkit/trunk/mkisoimage/build_mkisofs.com	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/build_mkisofs.com	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,49 +0,0 @@
-$ defs = "/define=("USE_LARGEFILES","ABORT_DEEP_ISO_ONLY","APPLE_HYB","UDF","DVD_VIDEO","SORTING","USE_LIBSCHILY","USE_SCG","HAVE_DIRENT_H","HAVE_STRCASECMP")
-$ incs = "/include=([-.include],[-.libhfs_iso],[-.cdrecord],[])"
-$ opts = "/float=ieee/prefix=all"
-$ define/nolog scg [-.LIBSCG.scg]
-$ copy [-.cdrecord]scsi_cdr.c *.*
-$ copy [-.cdrecord]cd_misc.c *.*
-$ copy [-.cdrecord]modes.c *.*
-$ cc 'defs' 'incs'  'opts' mkisofs.c
-$ cc 'defs' 'incs'  'opts' tree.c
-$ cc 'defs' 'incs'  'opts' write.c
-$ cc 'defs' 'incs'  'opts' hash.c
-$ cc 'defs' 'incs'  'opts' rock.c
-$ cc 'defs' 'incs'  'opts' udf.c
-$ cc 'defs' 'incs'  'opts' multi.c
-$ cc 'defs' 'incs'  'opts' joliet.c
-$ cc 'defs' 'incs'  'opts' match.c
-$ cc 'defs' 'incs'  'opts' name.c
-$ cc 'defs' 'incs'  'opts' fnmatch.c
-$ cc 'defs' 'incs'  'opts' eltorito.c
-$ cc 'defs' 'incs'  'opts' boot.c
-$ cc 'defs' 'incs'  'opts' getopt.c
-$ cc 'defs' 'incs'  'opts' getopt1.c
-$ cc 'defs' 'incs'  'opts' scsi.c
-$ cc 'defs' 'incs'  'opts' scsi_cdr.c
-$ cc 'defs' 'incs'  'opts' cd_misc.c
-$ cc 'defs' 'incs'  'opts' modes.c
-$ cc 'defs' 'incs'  'opts' apple.c
-$ cc 'defs' 'incs'  'opts' volume.c
-$ cc 'defs' 'incs'  'opts' desktop.c
-$ cc 'defs' 'incs'  'opts' mac_label.c
-$ cc 'defs' 'incs'  'opts' stream.c
-$ cc 'defs' 'incs'  'opts' ifo_read.c
-$ cc 'defs' 'incs'  'opts' dvd_file.c
-$ cc 'defs' 'incs'  'opts' dvd_reader.c
-$ cc 'defs' 'incs'  'opts' vms.c
-$ libr/crea mkisofs.olb
-$ libr/ins mkisofs.olb *.obj
-$ link/nosysshr/exe=[-.bins]mkisofs.exe sys$input/option
-cluster=myclu,,,mkisofs.obj,mkisofs.olb/libr, -
-[-.libs]LIBHFS_Iso.olb/lib, -
-LIBUNLS.olb/lib, -
-libfile.olb/lib, -
-libscg.olb/lib, -
-libschily.olb/lib, -
-STDIO.OLB/lib
-sys$library:decc$shr/share/selective
-sys$library:cma$tis_shr/share/selective
-$ delete *.obj;*
-$ purge/nolog *.olb

Copied: cdrkit/trunk/mkisoimage/build_mkisoimage.com (from rev 449, cdrkit/trunk/mkisoimage/build_mkisofs.com)
===================================================================
--- cdrkit/trunk/mkisoimage/build_mkisofs.com	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/build_mkisoimage.com	2006-11-23 21:37:32 UTC (rev 450)
@@ -0,0 +1,49 @@
+$ defs = "/define=("USE_LARGEFILES","ABORT_DEEP_ISO_ONLY","APPLE_HYB","UDF","DVD_VIDEO","SORTING","USE_LIBSCHILY","USE_SCG","HAVE_DIRENT_H","HAVE_STRCASECMP")
+$ incs = "/include=([-.include],[-.libhfs_iso],[-.cdrecord],[])"
+$ opts = "/float=ieee/prefix=all"
+$ define/nolog scg [-.LIBSCG.scg]
+$ copy [-.cdrecord]scsi_cdr.c *.*
+$ copy [-.cdrecord]cd_misc.c *.*
+$ copy [-.cdrecord]modes.c *.*
+$ cc 'defs' 'incs'  'opts' mkisoimage.c
+$ cc 'defs' 'incs'  'opts' tree.c
+$ cc 'defs' 'incs'  'opts' write.c
+$ cc 'defs' 'incs'  'opts' hash.c
+$ cc 'defs' 'incs'  'opts' rock.c
+$ cc 'defs' 'incs'  'opts' udf.c
+$ cc 'defs' 'incs'  'opts' multi.c
+$ cc 'defs' 'incs'  'opts' joliet.c
+$ cc 'defs' 'incs'  'opts' match.c
+$ cc 'defs' 'incs'  'opts' name.c
+$ cc 'defs' 'incs'  'opts' fnmatch.c
+$ cc 'defs' 'incs'  'opts' eltorito.c
+$ cc 'defs' 'incs'  'opts' boot.c
+$ cc 'defs' 'incs'  'opts' getopt.c
+$ cc 'defs' 'incs'  'opts' getopt1.c
+$ cc 'defs' 'incs'  'opts' scsi.c
+$ cc 'defs' 'incs'  'opts' scsi_cdr.c
+$ cc 'defs' 'incs'  'opts' cd_misc.c
+$ cc 'defs' 'incs'  'opts' modes.c
+$ cc 'defs' 'incs'  'opts' apple.c
+$ cc 'defs' 'incs'  'opts' volume.c
+$ cc 'defs' 'incs'  'opts' desktop.c
+$ cc 'defs' 'incs'  'opts' mac_label.c
+$ cc 'defs' 'incs'  'opts' stream.c
+$ cc 'defs' 'incs'  'opts' ifo_read.c
+$ cc 'defs' 'incs'  'opts' dvd_file.c
+$ cc 'defs' 'incs'  'opts' dvd_reader.c
+$ cc 'defs' 'incs'  'opts' vms.c
+$ libr/crea mkisoimage.olb
+$ libr/ins mkisoimage.olb *.obj
+$ link/nosysshr/exe=[-.bins]mkisoimage.exe sys$input/option
+cluster=myclu,,,mkisoimage.obj,mkisoimage.olb/libr, -
+[-.libs]LIBHFS_Iso.olb/lib, -
+LIBUNLS.olb/lib, -
+libfile.olb/lib, -
+libscg.olb/lib, -
+libschily.olb/lib, -
+STDIO.OLB/lib
+sys$library:decc$shr/share/selective
+sys$library:cma$tis_shr/share/selective
+$ delete *.obj;*
+$ purge/nolog *.olb

Modified: cdrkit/trunk/mkisoimage/desktop.c
===================================================================
--- cdrkit/trunk/mkisoimage/desktop.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/desktop.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -58,7 +58,7 @@
 #ifdef APPLE_HYB
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 
 #define	DB	"Desktop DB"
 #define	DBFC	"DMGR"
@@ -76,7 +76,7 @@
 int	make_desktop(hfsvol *vol, int end);
 
 
-extern	hce_mem *hce;	/* libhfs/mkisofs extras */
+extern	hce_mem *hce;	/* libhfs/mkisoimage extras */
 
 int
 make_desktop(hfsvol *vol, int end)

Deleted: cdrkit/trunk/mkisoimage/diag/Makefile.man
===================================================================
--- cdrkit/trunk/mkisoimage/diag/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/diag/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,30 +0,0 @@
-#ident @(#)Makefile.man	1.1 98/11/14 
-###########################################################################
-# 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; see the file COPYING.  If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-###########################################################################
-SRCROOT=	../..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-MANDIR=		man
-TARGETMAN=	isoinfo
-MANSECT=	$(MANSECT_ADMIN)
-MANSUFFIX=	$(MANSUFF_ADMIN)
-MANFILE=	isoinfo.8
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################

Modified: cdrkit/trunk/mkisoimage/diag/README
===================================================================
--- cdrkit/trunk/mkisoimage/diag/README	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/diag/README	2006-11-23 21:37:32 UTC (rev 450)
@@ -71,6 +71,6 @@
 it so that this checks the integrity of the tables as well.
 
 	The isovfy program gives warnings about things like files that
-have a size of 0 but have an extent number assigned.  The mkisofs program
+have a size of 0 but have an extent number assigned.  The mkisoimage program
 should never do this, but the YM software does leave these around.
 I think it is probably harmless in the YM case.~

Modified: cdrkit/trunk/mkisoimage/diag/isodebug.8
===================================================================
--- cdrkit/trunk/mkisoimage/diag/isodebug.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/diag/isodebug.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -15,7 +15,7 @@
 .if n .ds s sz
 .TH ISODEBUG 1L "06/02/08" "J\*org Schilling" "Schily\'s USER COMMANDS"
 .SH NAME
-isodebug \- print mkisofs debug info from ISO-9660 image
+isodebug \- print mkisoimage debug info from ISO-9660 image
 .SH SYNOPSIS
 .B
 isodebug
@@ -28,7 +28,7 @@
 .SH DESCRIPTION
 .B Isodebug
 reads the debug info written by 
-.BR mkisofs (8)
+.BR mkisoimage (8)
 from within a ISO-9660 file system image and prints them.
 . \" .SH RETURNS
 . \" .SH ERRORS
@@ -56,7 +56,7 @@
 .SH "SEE ALSO"
 .BR wodim (1),
 .BR usal (7),
-.BR mkisofs (8).
+.BR mkisoimage (8).
 .SH AUTHOR
 .nf
 J\*org Schilling

Modified: cdrkit/trunk/mkisoimage/diag/isoinfo.8
===================================================================
--- cdrkit/trunk/mkisoimage/diag/isoinfo.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/diag/isoinfo.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -104,7 +104,7 @@
 in
 .B isovfy
 were added after bugs were discovered in early versions of
-.B mkisofs.
+.B mkisoimage.
 It isn't all that clear how useful this is anymore, but it doesn't hurt to
 have this around.
 
@@ -211,7 +211,7 @@
 .TP
 .B \-j charset
 Convert Joliet file names (if present) to the supplied charset. See
-.BR mkisofs (8)
+.BR mkisoimage (8)
 for details.
 .TP
 .B \-T sector
@@ -260,7 +260,7 @@
 The user interface really sucks.
 .SH FUTURE IMPROVEMENTS
 These utilities are really quick hacks, which are very useful for debugging
-problems in mkisofs or in an iso9660 filesystem. In the long run, it would
+problems in mkisoimage or in an iso9660 filesystem. In the long run, it would
 be nice to have a daemon that would NFS export a iso9660 image.
 .PP
 The isoinfo program is probably the program that is of the most use to
@@ -351,7 +351,7 @@
 default speed and the default FIFO size.
 .RE
 .SH SEE ALSO
-.BR mkisofs (8),
+.BR mkisoimage (8),
 .BR wodim (1),
 .BR readcd (1),
 .BR usal (7),

Modified: cdrkit/trunk/mkisoimage/dvd_file.c
===================================================================
--- cdrkit/trunk/mkisoimage/dvd_file.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/dvd_file.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -39,7 +39,7 @@
 #ifdef DVD_VIDEO
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <schily.h>
 #include "dvd_reader.h"
 #include "dvd_file.h"

Modified: cdrkit/trunk/mkisoimage/dvd_reader.c
===================================================================
--- cdrkit/trunk/mkisoimage/dvd_reader.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/dvd_reader.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -38,18 +38,18 @@
  */
 
 /*
- * NOTE: This is a cut down version of libdvdread for mkisofs, due
+ * NOTE: This is a cut down version of libdvdread for mkisoimage, due
  * to portability issues with the current libdvdread according to
- * the maintainer of mkisofs.
+ * the maintainer of mkisoimage.
  * This cut down version only reads from a harddisk file structure
  * and it only implements the functions necessary inorder to make
- * mkisofs produce valid DVD-Video images.
+ * mkisoimage produce valid DVD-Video images.
  * DON'T USE THIS LIBRARY IN ANY OTHER PROGRAM GET THE REAL
  * LIBDVDREAD INSTEAD
  */
 #ifdef DVD_VIDEO
 
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <schily.h>
 

Modified: cdrkit/trunk/mkisoimage/dvd_reader.h
===================================================================
--- cdrkit/trunk/mkisoimage/dvd_reader.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/dvd_reader.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -38,12 +38,12 @@
  */
 
 /*
- * NOTE: This is a cut down version of libdvdread for mkisofs, due
+ * NOTE: This is a cut down version of libdvdread for mkisoimage, due
  * to portability issues with the current libdvdread according to
- * the maintainer of mkisofs.
+ * the maintainer of mkisoimage.
  * This cut down version only reads from a harddisk file structure
  * and it only implements the functions necessary inorder to make
- * mkisofs produce valid DVD-Video images.
+ * mkisoimage produce valid DVD-Video images.
  * DON'T USE THIS LIBRARY IN ANY OTHER PROGRAM GET THE REAL
  * LIBDVDREAD INSTEAD
  */

Modified: cdrkit/trunk/mkisoimage/eltorito.c
===================================================================
--- cdrkit/trunk/mkisoimage/eltorito.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/eltorito.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -41,7 +41,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <intcvt.h>
@@ -121,7 +121,7 @@
 }/* init_boot_catalog(... */
 
 /*
- * Create a boot catalog file in memory - mkisofs already uses this type of
+ * Create a boot catalog file in memory - mkisoimage already uses this type of
  * file for the TRANS.TBL files. Therefore the boot catalog is set up in
  * similar way
  */
@@ -595,7 +595,7 @@
 		unsigned int	total_len;
 		static char	csum_buffer[SECTOR_SIZE];
 		int		len;
-		struct mkisofs_boot_info bi_table;
+		struct mkisoimage_boot_info bi_table;
 
 		bootimage = open(de->whole_name, O_RDWR | O_BINARY);
 		if (bootimage == -1) {

Modified: cdrkit/trunk/mkisoimage/files.c
===================================================================
--- cdrkit/trunk/mkisoimage/files.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/files.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -41,7 +41,7 @@
 /* ADD_FILES changes made by Ross Biro biro at yggdrasil.com 2/23/95 */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <errno.h>
 #include <schily.h>
 #include <ctype.h>

Modified: cdrkit/trunk/mkisoimage/hash.c
===================================================================
--- cdrkit/trunk/mkisoimage/hash.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/hash.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -55,11 +55,11 @@
  *		64 bits and available only through an open file handle.
  *
  * The solution is the new options -no-cache-inodes/-cache-inodes that
- * allow to disable the mkisofs inode cache.
+ * allow to disable the mkisoimage inode cache.
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <schily.h>
 
 #define	NR_HASH	1024

Modified: cdrkit/trunk/mkisoimage/ifo_read.c
===================================================================
--- cdrkit/trunk/mkisoimage/ifo_read.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/ifo_read.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -36,19 +36,19 @@
  */
 
 /*
- * NOTE: This is a cut down version of libdvdread for mkisofs, due
+ * NOTE: This is a cut down version of libdvdread for mkisoimage, due
  * to portability issues with the current libdvdread according to
- * the maintainer of mkisofs.
+ * the maintainer of mkisoimage.
  * This cut down version only reads from a harddisk file structure
  * and it only implements the functions necessary inorder to make
- * mkisofs produce valid DVD-Video images.
+ * mkisoimage produce valid DVD-Video images.
  * DON'T USE THIS LIBRARY IN ANY OTHER PROGRAM GET THE REAL
  * LIBDVDREAD INSTEAD
  */
 #ifdef DVD_VIDEO
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <fctldefs.h>
 #include <utypes.h>
 #include <schily.h>

Modified: cdrkit/trunk/mkisoimage/ifo_read.h
===================================================================
--- cdrkit/trunk/mkisoimage/ifo_read.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/ifo_read.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -38,12 +38,12 @@
  */
 
 /*
- * NOTE: This is a cut down version of libdvdread for mkisofs, due
+ * NOTE: This is a cut down version of libdvdread for mkisoimage, due
  * to portability issues with the current libdvdread according to
- * the maintainer of mkisofs.
+ * the maintainer of mkisoimage.
  * This cut down version only reads from a harddisk file structure
  * and it only implements the functions necessary inorder to make
- * mkisofs produce valid DVD-Video images.
+ * mkisoimage produce valid DVD-Video images.
  * DON'T USE THIS LIBRARY IN ANY OTHER PROGRAM GET THE REAL
  * LIBDVDREAD INSTEAD
  */

Modified: cdrkit/trunk/mkisoimage/ifo_types.h
===================================================================
--- cdrkit/trunk/mkisoimage/ifo_types.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/ifo_types.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -37,12 +37,12 @@
  */
 
 /*
- * NOTE: This is a cut down version of libdvdread for mkisofs, due
+ * NOTE: This is a cut down version of libdvdread for mkisoimage, due
  * to portability issues with the current libdvdread according to
- * the maintainer of mkisofs.
+ * the maintainer of mkisoimage.
  * This cut down version only reads from a harddisk file structure
  * and it only implements the functions necessary inorder to make
- * mkisofs produce valid DVD-Video images.
+ * mkisoimage produce valid DVD-Video images.
  * DON'T USE THIS LIBRARY IN ANY OTHER PROGRAM GET THE REAL
  * LIBDVDREAD INSTEAD
  */

Modified: cdrkit/trunk/mkisoimage/iso9660.h
===================================================================
--- cdrkit/trunk/mkisoimage/iso9660.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/iso9660.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -187,7 +187,7 @@
  * 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 mkisofs.h
+ * See mkisoimage.h
  */
 
 /* We use this to help us look up the parent inode numbers. */

Modified: cdrkit/trunk/mkisoimage/joliet.c
===================================================================
--- cdrkit/trunk/mkisoimage/joliet.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/joliet.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -95,7 +95,7 @@
  *	(00)(5c) '\'
  */
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <timedefs.h>
 #include <utypes.h>
 #include <intcvt.h>

Modified: cdrkit/trunk/mkisoimage/jte.c
===================================================================
--- cdrkit/trunk/mkisoimage/jte.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/jte.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -13,7 +13,7 @@
 #undef BZ2_SUPPORT
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <timedefs.h>
 #include <fctldefs.h>
 #include <zlib.h>

Modified: cdrkit/trunk/mkisoimage/mac_label.c
===================================================================
--- cdrkit/trunk/mkisoimage/mac_label.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mac_label.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -36,8 +36,8 @@
 /*
  *	mac_label.c: generate Mactintosh partition maps and label
  *
- *	Taken from "mkisofs 1.05 PLUS" by Andy Polyakov <appro at fy.chalmers.se>
- *	(see http://fy.chalmers.se/~appro/mkisofs_plus.html for details)
+ *	Taken from "mkisoimage 1.05 PLUS" by Andy Polyakov <appro at fy.chalmers.se>
+ *	(see http://fy.chalmers.se/~appro/mkisoimage_plus.html for details)
  *
  *	The format of the HFS driver file:
  *
@@ -57,7 +57,7 @@
 /* PREP_BOOT Troy Benjegerdes 2/4/99 */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include "mac_label.h"
 #include "apple.h"
 

Modified: cdrkit/trunk/mkisoimage/mac_label.h
===================================================================
--- cdrkit/trunk/mkisoimage/mac_label.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mac_label.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -32,8 +32,8 @@
 /*
  *	mac_label.h: defines Macintosh partition maps and label
  *
- *	Taken from "mkisofs 1.05 PLUS" by Andy Polyakov <appro at fy.chalmers.se>
- *	(see http://fy.chalmers.se/~appro/mkisofs_plus.html for details)
+ *	Taken from "mkisoimage 1.05 PLUS" by Andy Polyakov <appro at fy.chalmers.se>
+ *	(see http://fy.chalmers.se/~appro/mkisoimage_plus.html for details)
  *
  *	Much of this is already defined in the libhfs code, but to keep
  *	things simple we stick with these.

Modified: cdrkit/trunk/mkisoimage/mkhybrid.8
===================================================================
--- cdrkit/trunk/mkisoimage/mkhybrid.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkhybrid.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,2 +1,2 @@
-.so man8/mkisofs.8
+.so man8/mkisoimage.8
 .\" %Z%%M%	%I% %E% joerg

Deleted: cdrkit/trunk/mkisoimage/mkisofs.8
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisofs.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,3036 +0,0 @@
-'\" t
-.\" To print, first run through tbl
-.\" -*- nroff -*-
-.\" @(#)mkisofs.8	1.109 05/05/01 joerg
-.\"
-.if t .ds a \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'a
-.if t .ds o \v'-0.55m'\h'0.00n'\z.\h'0.45n'\z.\v'0.55m'\h'-0.45n'o
-.if t .ds u \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'u
-.if t .ds A \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'A
-.if t .ds O \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'O
-.if t .ds U \v'-0.77m'\h'0.30n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.75n'U
-.if t .ds s \\(*b
-.if t .ds S SS
-.if n .ds a ae
-.if n .ds o oe
-.if n .ds u ue
-.if n .ds s sz
-.TH MKISOFS 8 "24 Aug 2006" "Version 2.01"
-.SH NAME
-mkisofs \- create an hybrid ISO9660/JOLIET/HFS filesystem with optional Rock Ridge attributes.
-.SH SYNOPSIS
-.B mkisofs
-[
-.I options
-]
-[
-.B \-o
-.I filename
-]
-.I pathspec [pathspec ...]
-.SH DESCRIPTION
-.B mkisofs
-is a pre-mastering program to generate ISO9660/JOLIET/HFS hybrid
-filesystems.
-.PP
-.B mkisofs
-is capable of generating the 
-.B "System Use Sharing Protocol records (SUSP)
-specified
-by the 
-.B "Rock Ridge Interchange Protocol.
-This is used to further describe the
-files in the ISO9660 filesystem to a Unix host, and provides information such
-as long filenames, UID/GID, POSIX permissions, symbolic links,
-block and character devices.
-.PP
-If Joliet or HFS hybrid command line options are specified, 
-.B mkisofs
-will create the additional filesystem metadata needed for Joliet or HFS.
-If no Joliet or HFS hybrid command line options are given,
-.B mkisofs
-will generate a pure ISO9660 filesystem.
-.PP
-.B mkisofs
-can generate a 
-.I true
-(or
-.IR shared )
-HFS hybrid filesystem. The same files are seen as HFS files when
-accessed from a Macintosh and as ISO9660 files when accessed from other 
-machines. HFS stands for
-.I Hierarchical File System
-and is the native file system used on Macintosh computers.
-.PP
-As an alternative,
-.B mkisofs
-can generate the
-.I Apple Extensions to ISO9660
-for each file. These extensions provide each file with CREATOR, TYPE and
-certain Finder Flags when accessed from a Macintosh. See the
-.B HFS MACINTOSH FILE FORMATS
-section below.
-.PP
-.B mkisofs
-takes a snapshot of a given directory tree, and generates a
-binary image which will correspond to an ISO9660 or HFS filesystem when
-written to a block device.
-.PP
-Each file written to the ISO9660 filesystem must have a filename in the 8.3
-format (8 characters, period, 3 characters, all upper case), even if Rock Ridge
-is in use.  This filename is used on systems that are not able to make use of
-the Rock Ridge extensions (such as MS-DOS), and each filename in each directory
-must be different from the other filenames in the same directory.
-.B mkisofs
-generally tries to form correct names by forcing the Unix filename to upper
-case and truncating as required, but often times this yields unsatisfactory
-results when there are cases where the
-truncated names are not all unique.
-.B mkisofs
-assigns weightings to each filename, and if two names that are otherwise the
-same are found the name with the lower priority is renamed to have a 3 digit
-number as an extension (where the number is guaranteed to be unique).  An
-example of this would be the files foo.bar and
-foo.bar.~1~ - the file foo.bar.~1~ would be written as FOO000.BAR;1 and the file
-foo.bar would be written as FOO.BAR;1
-.PP
-When used with various HFS options,
-.B mkisofs
-will attempt to recognise files stored in a number of Apple/Unix file formats
-and will copy the data and resource forks as well as any
-relevant finder information. See the
-.B HFS MACINTOSH FILE FORMATS
-section below for more about formats
-.B mkisofs
-supports.
-.PP
-Note that
-.B mkisofs
-is not designed to communicate with the writer directly.  Most writers
-have proprietary command sets which vary from one manufacturer to
-another, and you need a specialized tool to actually burn the disk.
-.PP
-The
-.B wodim
-utility is a utility capable of burning an actual disc.  The latest version
-of
-.B wodim
-is available from
-http://alioth.debian.org/projects/debburn/
-.PP
-Also you should know that most cd writers are very particular about timing.
-Once you start to burn a disc, you cannot let their buffer empty before you
-are done, or you will end up with a corrupt disc.  Thus it is critical
-that you be able to maintain an uninterrupted data stream to the writer
-for the entire time that the disc is being written.
-.PP
-.B pathspec
-is the path of the directory tree to be copied into the ISO9660 filesystem.
-Multiple paths can be specified, and
-.B
-mkisofs
-will merge the files found in all of the specified path components to form the cdrom
-image.
-.PP
-If the option
-.I \-graft\-points
-has been specified, 
-it is possible to graft the paths at points other than the root
-directory, and it is possible to graft files or directories onto the
-cdrom image with names different than what they have in the source filesystem.  This is
-easiest to illustrate with a couple of examples.   Let's start by assuming that a local
-file ../old.lis exists, and you wish to include it in the cdrom image.
-
-
-	foo/bar/=../old.lis
-
-will include the file old.lis in the cdrom image at /foo/bar/old.lis, while
-
-	foo/bar/xxx=../old.lis
-
-will include the file old.lis in the cdrom image at /foo/bar/xxx.  The
-same sort of syntax can be used with directories as well.
-.B mkisofs
-will create any directories required such that the graft
-points exist on the cdrom image - the directories do not need to
-appear in one of the paths.  By default, any directories that are created on 
-the fly like this will have permissions 0555 and appear to be owned by the
-person running mkisofs.  If you wish other permissions or owners of
-the intermediate directories, see \-uid, \-gid, \-dir\-mode, \-file\-mode and
-\-new\-dir\-mode.
-.PP
-.B mkisofs
-will also run on Win9X/NT4 machines when compiled with Cygnus' cygwin
-(available from http://sourceware.cygnus.com/cygwin/). Therefore most
-references in this man page to
-.I Unix
-can be replaced with
-.IR Win32 .
-
-.SH OPTIONS
-.TP
-.BI \-abstract " FILE
-Specifies the abstract file name.
-There is space on the disc for 37 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with ABST=filename.
-If specified in both places, the command line version is used.
-.TP
-.BI \-A " application_id
-Specifies a text string that will be written into the volume header.
-This should describe the application that will be on the disc.  There
-is space on the disc for 128 characters of information.  This parameter can
-also be set in the file
-.B \&.m\&kisofsrc
-with APPI=id.
-If specified in both places, the command line version is used.
-.TP
-.B \-allow\-leading\-dots
-.TP
-.B \-ldots
-Allow ISO9660 filenames to begin with a period.  Usually, a leading dot is
-replaced with an underscore in order to maintain MS-DOS compatibility.
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.B \-allow\-lowercase
-This options allows lower case characters to appear in ISO9660 file names.
-.br
-This violates the ISO9660 standard, but it happens to work on some systems.
-Use with caution.
-.TP
-.B \-allow\-multidot
-This options allows more than one dot to appear in ISO9660 filenames.
-A leading dot is not affected by this option, it
-may be allowed separately using the
-.B \-allow\-leading\-dots
-option.
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.BI \-biblio " FILE
-Specifies the bibliographic file name.
-There is space on the disc for 37 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with BIBLO=filename.
-If specified in both places, the command line version is used.
-.TP
-.B \-cache\-inodes
-Cache inode and device numbers to find hard links to files.
-If
-.B mkisofs
-finds a hard link (a file with multiple names), then the file will only
-appear once on the CD. This helps to save space on the CD.
-The option
-.B \-cache\-inodes
-is default on Unix like operating systems.
-Be careful when using this option on a filesystem without unique
-inode numbers as it may result in files containing the wrong content on CD.
-.TP
-.B \-no\-cache\-inodes
-Do not cache inode and device numbers.
-This option is needed whenever a filesystem does not have unique
-inode numbers. It is the default on
-.BR Cygwin .
-As the Microsoft operating system that runs below
-.B Cygwin
-is not POSIX compliant, it does not have unique inode numbers.
-Cygwin creates fake inode numbers from a hash algorithm that
-is not 100% correct.
-If
-.B mkisofs
-would cache inodes on Cygwin, it would believe that some files are
-identical although they are not. The result in this case are files
-that contain the wrong content if a significant amount of different
-files (> ~5000) is in inside the tree that is to be archived.
-This does not happen when the
-.B \-no\-cache\-inodes is used, but the disadvantage is that
-.B mkisofs
-cannot detect hardlinks anymore and the resulting CD image may be larger
-than expected.
-.TP
-.BI \-alpha\-boot " alpha_boot_image
-Specifies the path and filename of the boot image to be used when
-making an Alpha/SRM bootable CD. The pathname must be relative to the
-source path specified to
-.B mkisofs.
-.TP
-.BI \-hppa\-bootloader " hppa_bootloader_image
-Specifies the path and filename of the boot image to be used when
-making an HPPA bootable CD. The pathname must be relative to the
-source path specified to
-.B mkisofs.
-Other options are required, at the very least a kernel file name and
-the boot command line. See the
-.B HPPA NOTES
-section below for more information.
-.TP
-.BI \-hppa\-cmdline " hppa_boot_command_line
-Specifies the command line to be passed to the hppa boot loader when
-making a bootable CD. Separate the parameters with spaces or
-commas. More options must be passed to
-.B mkisofs,
-at the very least a kernel file name and the boot loader file
-name. See the
-.B HPPA NOTES
-section below for more information.
-.TP
-.BI \-hppa\-kernel\-32 " hppa_kernel_32
-Specifies the path and filename of the 32-bit kernel image to be used
-when making an HPPA bootable CD. The pathname must be relative to the
-source path specified to
-.B mkisofs.
-Other options are required, at the very least the boot loader file
-name and the boot command line. See the
-.B HPPA NOTES
-section below for more information.
-.TP
-.BI \-hppa\-kernel\-64 " hppa_kernel_64
-Specifies the path and filename of the 64-bit kernel image to be used
-when making an HPPA bootable CD. The pathname must be relative to the
-source path specified to
-.B mkisofs.
-Other options are required, at the very least the boot loader file
-name and the boot command line. See the
-.B HPPA NOTES
-section below for more information.
-.TP
-.BI \-hppa\-ramdisk " hppa_ramdisk_image
-Specifies the path and filename of the ramdisk image to be used when
-making an HPPA bootable CD. The pathname must be relative to the
-source path specified to
-.B mkisofs.
-This parameter is
-.B optional.
-Other options are required, at the very
-least a kernel file name and the boot command line. See the
-.B HPPA NOTES
-section below for more information.
-.TP
-.BI \-mips\-boot " mips_boot_image
-Specifies the path and filename of the boot image to be used when
-making an SGI/big-endian MIPS bootable CD. The pathname must be
-relative to the source path specified to
-.B mkisofs.
-This option may be specified several times to allow the addition of
-multiple boot images, up to a maximum of 15.
-.TP
-.BI \-mipsel\-boot " mipsel_boot_image
-Specifies the path and filename of the boot image to be used when
-making an DEC/little-endian MIPS bootable CD. The pathname must be
-relative to the source path specified to
-.B mkisofs.
-.TP
-.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
-Specifies a comma separated list of boot images that are needed to make
-a bootable CD for sparc systems.
-Partition 0 is used for the ISO9660 image, the first image file is mapped
-to partition 1.
-There may be empty fields in the comma separated list.
-The maximum number of possible partitions is 8 so it is impossible to specify
-more than 7 partition images.
-This option is required to make a bootable CD for Sun sparc systems.
-If the
-.B \-B
-or
-.B \-sparc\-boot
-option has been specified, the first sector of the resulting image will
-contain a Sun disk label. This disk label specifies slice 0 for the
-ISO9660 image and slice 1 .\|.\|. slice 7 for the boot images that
-have been specified with this option. Byte offset 512 .\|.\|. 8191
-within each of the additional boot images must contain a primary boot
-that works for the appropriate sparc architecture. The rest of each
-of the images usually contains an ufs filesystem that is used primary
-kernel boot stage.
-.sp
-The implemented boot method is the boot method found with SunOS 4.x and SunOS 5.x.
-However, it does not depend on SunOS internals but only on properties of
-the Open Boot prom. For this reason, it should be usable for any OS
-that boots off a sparc system.
-.sp
-For more information also see the 
-.B NOTES
-section below.
-.sp
-If the special filename
-.B "..."
-is used, the actual and all following boot partitions are mapped to the
-previous partition. If
-.B mkisofs
-is called with
-.BI "\-G " image " \-B " ...
-all boot partitions are mapped to the partition that contains the ISO9660
-filesystem image and the generic boot image that is located in the first
-16 sectors of the disk is used for all architectures.
-.TP
-.BI \-b " eltorito_boot_image
-Specifies the path and filename of the boot image to be used when making
-an "El Torito" bootable CD. The pathname must be relative to the source
-path specified to
-.B mkisofs.
-This option is required to make an "El Torito" bootable CD.
-The boot image must be exactly the size of either a 1200, 1440, or a 2880
-kB floppy, and
-.B mkisofs
-will use this size when creating the output ISO9660
-filesystem. It is assumed that the first 512 byte sector should be read
-from the boot image (it is essentially emulating a normal floppy drive).
-This will work, for example, if the boot image is a LILO based boot floppy.
-.sp
-If the boot image is not an image of a floppy, you need to add one of the
-options:
-.BR \-hard\-disk\-boot " or " \-no\-emul\-boot .
-If the system should not boot off the emulated disk, use
-.BR \-no\-boot .
-.sp
-If the
-.B \-sort
-option has not been specified, the boot images are sorted
-with low priority (+2) to the beginning of the medium.
-If you don't like this, you need to specify a sort weight of 0 for the boot images.
-.TP
-.B \-eltorito\-alt\-boot
-Start with a new set of "El Torito" boot parameters.
-This allows to have more than one El Torito boot on a CD.
-A maximum of 63 El Torito boot entries may be put on a single CD.
-.TP
-.BI \-B " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
-.TP
-.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
-Specifies a comma separated list of boot images that are needed to make
-a bootable CD for sparc systems.
-Partition 0 is used for the ISO9660 image, the first image file is mapped
-to partition 1.
-There may be empty fields in the comma separated list.
-The maximum number of possible partitions is 8 so it is impossible to specify
-more than 7 partition images.
-This option is required to make a bootable CD for Sun sparc systems.
-If the
-.B \-B
-or
-.B \-sparc\-boot
-option has been specified, the first sector of the resulting image will
-contain a Sun disk label. This disk label specifies slice 0 for the
-ISO9660 image and slice 1 .\|.\|. slice 7 for the boot images that
-have been specified with this option. Byte offset 512 .\|.\|. 8191
-within each of the additional boot images must contain a primary boot
-that works for the appropriate sparc architecture. The rest of each
-of the images usually contains an ufs filesystem that is used primary
-kernel boot stage.
-.sp
-The implemented boot method is the boot method found with SunOS 4.x and SunOS 5.x.
-However, it does not depend on SunOS internals but only on properties of
-the Open Boot prom. For this reason, it should be usable for any OS
-that boots off a sparc system.
-.sp
-For more information also see the 
-.B NOTES
-section below.
-.sp
-If the special filename
-.B "..."
-is used, the actual and all following boot partitions are mapped to the
-previous partition. If
-.B mkisofs
-is called with
-.BI "\-G " image " \-B " ...
-all boot partitions are mapped to the partition that contains the ISO9660
-filesystem image and the generic boot image that is located in the first
-16 sectors of the disk is used for all architectures.
-.TP
-.BI \-G " generic_boot_image
-Specifies the path and filename of the generic boot image to be used when making
-a generic bootable CD.
-The
-.B generic_boot_image
-will be placed on the first 16 sectors of the CD. The first 16 sectors
-are the sectors that are located before the ISO9660 primary volume descriptor.
-If this option is used together with the
-.B \-sparc\-boot
-option, the Sun disk label will overlay the first 512 bytes of the generic
-boot image.
-.TP
-.BI \-hard\-disk\-boot
-Specifies that the boot image used to create "El Torito" bootable CDs is
-a hard disk image. The hard disk image must begin with a master boot
-record that contains a single partition.
-.TP
-.BI \-no\-emul\-boot
-Specifies that the boot image used to create "El Torito" bootable CDs is
-a 'no emulation' image. The system will load and execute this image without
-performing any disk emulation.
-.TP
-.BI \-no\-boot
-Specifies that the created "El Torito" CD should be marked as not bootable. The
-system will provide an emulated drive for the image, but will boot off
-a standard boot device.
-.TP
-.BI \-boot\-load\-seg " segment_address
-Specifies the load segment address of the boot image for no-emulation
-"El Torito" CDs.
-.TP
-.BI \-boot\-load\-size " load_sectors
-Specifies the number of "virtual" (512-byte) sectors to load in
-no-emulation mode.  The default is to load the entire boot file.  Some
-BIOSes may have problems if this is not a multiple of 4.
-.TP
-.BI \-boot\-info\-table
-Specifies that a 56-byte table with information of the CD-ROM layout
-will be patched in at offset 8 in the boot file.  If this option is
-given, the boot file is modified in the source filesystem, so make
-sure to make a copy if this file cannot be easily regenerated!  See
-the
-.B "EL TORITO BOOT INFO TABLE
-section for a description of this table.
-.TP
-.BI \-C " last_sess_start,next_sess_start
-This option is needed when
-.B mkisofs
-is used to create a CD Extra or the image of a second session or a 
-higher level session for a multi session disk.
-The option
-.B \-C
-takes a pair of two numbers separated by a comma. The first number is the
-sector number of the first sector in the last session of the disk
-that should be appended to.
-The second number is the starting sector number of the new session.
-The expected pair of numbers may be retrieved by calling
-.B "wodim \-msinfo ...
-If the
-.B \-C
-option is used in conjunction with the
-.B \-M
-option,
-.B mkisofs
-will create a filesystem image that is intended to be a continuation
-of the previous session.
-If the
-.B \-C
-option is used without the
-.B \-M
-option,
-.B mkisofs
-will create a filesystem image that is intended to be used for a second
-session on a CD Extra. This is a multi session CD that holds audio data
-in the first session and a ISO9660 filesystem in the second session.
-.TP
-.BI \-c " boot_catalog
-Specifies the path and filename of the boot catalog to be used when making
-an "El Torito" bootable CD. The pathname must be relative to the source
-path specified to
-.B mkisofs.
-This option is required to make a bootable CD.
-This file will be inserted into the output tree and not created
-in the source filesystem, so be
-sure the specified filename does not conflict with an existing file, as
-it will be excluded. Usually a name like "boot.catalog" is
-chosen.
-.sp
-If the
-.B \-sort
-option has not been specified, the boot catalog sorted
-with low priority (+1) to the beginning of the medium.
-If you don't like this, you need to specify a sort weight of 0 for the boot catalog.
-.TP
-.B \-check\-oldnames
-Check all filenames imported from old session for compliance with
-actual 
-.B mkisofs 
-ISO9660 file naming rules.
-It his option is not present, only names with a length > 31 are checked
-as these files are a hard violation of the ISO9660 standard.
-.TP
-.BI \-check\-session " FILE
-Check all old sessions for compliance with
-actual 
-.B mkisofs 
-ISO9660 file naming rules.
-This is a high level option that is a combination of the options:
-.BI \-M " FILE " "\-C 0,0 \-check\-oldnames
-For the parameter 
-.I FILE
-see description of
-.B \-M
-option.
-.TP
-.BI \-copyright " FILE
-Specifies the copyright file name.
-There is space on the disc for 37 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with COPY=filename.
-If specified in both places, the command line version is used.
-.TP
-.B \-d
-Omit trailing period from files that do not have a period.
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.B \-D
-Do not use deep directory relocation, and instead just pack them in the
-way we see them.
-.br
-If ISO9660:1999 has not been selected,
-this violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.BI \-dir\-mode " mode
-Overrides the mode of directories used to create the image to
-.IR mode .
-Specifying this option automatically enables Rock Ridge extensions.
-.TP
-.B \-dvd\-video
-Generate a DVD-Video compliant UDF file system. This is done by sorting the
-order of the content of the appropriate files and by adding padding 
-between the files if needed.
-Note that the sorting only works if the DVD-Video filenames include upper case
-characters only.
-.br
-.br
-Note that in order to get a DVD-Video compliant filesystem image, you need
-to prepare a DVD-Video compliant directory tree. This means you need to
-have a directory VIDEO_TS (all caps) in the root directory of the resulting DVD
-and you should have a directory AUDIO_TS. The directory VIDEO_TS needs to
-include all needed files (file names must be all caps) for a compliant DVD-Video
-filesystem.
-.TP
-.B \-f
-Follow symbolic links when generating the filesystem.  When this option is not
-in use, symbolic links will be entered using Rock Ridge if enabled, otherwise
-the file will be ignored.
-.TP
-.BI \-file\-mode " mode
-Overrides the mode of regular files used to create the image to
-.IR mode .
-Specifying this option automatically enables Rock Ridge extensions.
-.TP
-.BI \-gid " gid
-Overrides the gid read from the source files to the value of
-.IR gid . 
-Specifying this option automatically enables Rock Ridge extensions.
-.TP
-.B \-gui
-Switch the behaviour for a GUI. This currently makes the output more verbose
-but may have other effects in future.
-.TP
-.B \-graft\-points
-Allow to use graft points for filenames. If this option is used, all filenames
-are checked for graft points. The filename is divided at the first unescaped
-equal sign. All occurrences of '\\\\' and '=' characters must be escaped with '\\\\'
-if 
-.I \-graft\-points
-has been specified.
-.TP
-.BI \-hide " glob
-Hide
-.I glob
-from being seen on the ISO9660 or Rock Ridge directory.
-.I glob
-is a shell wild-card-style pattern that must match any part of the filename 
-or path.
-Multiple globs may be hidden.
-If
-.I glob
-matches a directory, then the contents of that directory will be hidden.
-In order to match a directory name, make sure the pathname does not include
-a trailing '/' character.
-All the hidden files will still be written to the output CD image file.
-Should be used with the
-.B \-hide\-joliet
-option. See README.hide for more details.
-.TP
-.BI \-hide\-list " file
-A file containing a list of
-.I globs
-to be hidden as above.
-.TP
-.BI \-hidden " glob
-Add the hidden (existence) ISO9660 directory attribute for
-.IR glob .
-This attribute will prevent 
-.I glob
-from being listed on DOS based systems if the /A flag is not used for the listing.
-.I glob
-is a shell wild-card-style pattern that must match any part of the filename 
-or path.
-In order to match a directory name, make sure the pathname does not include
-a trailing '/' character.
-Multiple globs may be hidden.
-.TP
-.BI \-hidden\-list " file
-A file containing a list of
-.I globs
-to get the hidden attribute as above.
-.TP
-.BI \-hide\-joliet " glob
-Hide
-.I glob
-from being seen on the Joliet directory.
-.I glob
-is a shell wild-card-style pattern that must match any part of the filename 
-or path.
-Multiple globs may be hidden.
-If
-.I glob
-matches a directory, then the contents of that directory will be hidden.
-In order to match a directory name, make sure the pathname does not include
-a trailing '/' character.
-All the hidden files will still be written to the output CD image file.
-Should be used with the
-.B \-hide
-option. See README.hide for more details.
-.TP
-.BI \-hide\-joliet\-list " file
-A file containing a list of
-.I globs
-to be hidden as above.
-.TP
-.B \-hide\-joliet\-trans\-tbl
-Hide the
-.B TRANS.TBL
-files from the Joliet tree.
-These files usually don't make sense in the Joliet World as they list
-the real name and the ISO9660 name which may both be different from the
-Joliet name.
-.TP
-.B \-hide\-rr\-moved
-Rename the directory
-.B RR_MOVED
-to
-.B .rr_moved
-in the Rock Ridge tree.
-It seems to be impossible to completely hide the
-.B RR_MOVED
-directory from the Rock Ridge tree.
-This option only makes the visible tree better to understand for
-people who don't know what this directory is for.
-If you need to have no
-.B RR_MOVED
-directory at all, you should use the
-.B \-D
-option. Note that in case that the
-.B \-D
-option has been specified, the resulting filesystem is not ISO9660
-level-1 compliant and will not be readable on MS-DOS.
-See also 
-.B NOTES
-section for more information on the 
-.B RR_MOVED
-directory.
-.TP
-.BI \-input\-charset " charset
-Input charset that defines the characters used in local file names.
-To get a list of valid charset names, call
-.B "mkisofs \-input\-charset help.
-To get a 1:1 mapping, you may use
-.B default
-as charset name. The default initial values are
-.I cp437
-on DOS based systems and
-.I iso8859-1
-on all other systems.
-See 
-.B "CHARACTER SETS
-section below for more details.
-.TP
-.BI \-output\-charset " charset
-Output charset that defines the characters that will be used in Rock Ridge
-file names. Defaults to the input charset. See
-.B "CHARACTER SETS
-section below for more details.
-.TP
-.BI \-iso\-level " level
-Set the ISO9660 conformance level. Valid numbers are 1..3 and 4.
-.sp
-With level 1, files may only consist of one section and filenames are
-restricted to 8.3 characters.
-.sp
-With level 2, files may only consist of one section.
-.sp
-With level 3, no restrictions (other than ISO-9660:1988) do apply.
-.sp
-With all ISO9660 levels from 1..3, all filenames are restricted to upper
-case letters, numbers and the underscore (_). The maximum filename
-length is restricted to 31 characters, the directory nesting level
-is restricted to 8 and the maximum path length is limited to 255 characters.
-.sp
-Level 4 officially does not exists but 
-.B mkisofs
-maps it to ISO-9660:1999 which is ISO9660 version 2.
-.sp
-With level 4, an enhanced volume descriptor with version number
-and file structure version number set to 2 is emitted.
-There may be more than 8 levels of directory nesting,
-there is no need for a file to contain a dot and the dot has no
-more special meaning,
-file names do not have version numbers,
-.\" (f XXX ??? The character used for filling byte positions which are
-.\"     specified to be characters is subject to agreement between the
-.\"     originator and the recipient of the volume),
-the maximum length for files and directory is raised to 207.
-If Rock Ridge is used, the maximum ISO9660 name length is reduced to 197.
-.sp
-When creating Version 2 images,
-.B mkisofs
-emits an enhanced volume descriptor which looks similar to a primary volume
-descriptor but is slightly different. Be careful not to use broken software
-to make ISO9660 images bootable by assuming a second PVD copy and patching 
-this putative PVD copy into an El Torito VD.
-.TP
-.B \-J
-Generate Joliet directory records in addition to regular ISO9660 file
-names.  This is primarily useful when the discs are to be used on Windows
-machines.  The Joliet filenames are specified in Unicode and
-each path component can be up to 64 Unicode characters long.
-Note that Joliet is not a standard - CDs that use only Joliet extensions but no
-standard Rock Ridge extensions may usually only be used on Microsoft Win32
-systems. Furthermore, the fact that the filenames are limited to 64 characters
-and the fact that Joliet uses the UTF-16 coding for Unicode characters causes
-interoperability problems.
-.TP
-.B \-joliet\-long
-Allow Joliet filenames to be up to 103 Unicode characters. This breaks the
-Joliet specification - but appears to work. Use with caution. The number
-103 is derived from: the maximum Directory Record Length (254), minus the
-length of Directory Record (33), minus CD-ROM XA System Use Extension
-Information (14), divided by the UTF-16 character size (2).
-.TP
-.BI \-jcharset " charset
-Same as using
-.B \-input\-charset
-.I charset
-and
-.B \-J
-options. See
-.B "CHARACTER SETS
-section below for more details.
-.TP
-.B \-l
-Allow full 31 character filenames.  Normally the ISO9660 filename will be in an
-8.3 format which is compatible with MS-DOS, even though the ISO9660 standard
-allows filenames of up to 31 characters.  If you use this option, the disc may
-be difficult to use on a MS-DOS system, but this comes in handy on some other
-systems (such as the Amiga).
-Use with caution.
-.TP
-.B \-L
-Outdated option reserved by POSIX.1-2001, use
-.B \-allow\-leading\-dots
-instead.
-This option will get POSIX.1-2001 semantics with mkisofs-2.02.
-.TP
-.BI \-jigdo\-jigdo " jigdo_file
-Produce a jigdo .jigdo file as well as the .iso. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-jigdo\-template " template_file
-Produce a jigdo .template file as well as the .iso. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-jigdo\-min\-file\-size " size
-Specify the minimum size for a file to be listed in the .jigdo
-file. Default (and minimum allowed) is 1KB. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-jigdo\-force\-md5 " path
-Specify a file pattern where files MUST be contained in the
-externally-suplied MD5 list as supplied by \-md5\-list. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-jigdo\-exclude " path
-Specify a file pattern where files will not be listed in the .jigdo
-file. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-jigdo\-map " path
-Specify a pattern mapping for the jigdo file
-(e.g. Debian=/mirror/debian). See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-md5\-list " md5_file
-Specify a file containing the MD5sums, sizes and pathnames of the
-files to be included in the .jigdo file. See the
-.B JIGDO NOTES
-section below for more information.
-.TP
-.BI \-log\-file " log_file
-Redirect all error, warning and informational messages to
-.I log_file
-instead of the standard error.
-.TP
-.BI \-m " glob
-Exclude
-.I glob
-from being written to CD-ROM.
-.I glob
-is a shell wild-card-style pattern that must match part of the filename (not 
-the path as with option
-.BR \-x ).
-Technically
-.I glob
-is matched against the
-.I d->d_name
-part of the directory entry.
-Multiple globs may be excluded.
-Example:
-
-mkisofs \-o rom \-m '*.o' \-m core \-m foobar
-
-would exclude all files ending in ".o", called "core" or "foobar" to be
-copied to CD-ROM. Note that if you had a directory called "foobar" it too (and
-of course all its descendants) would be excluded.
-.sp
-NOTE: The
-.B \-m
-and
-.B \-x
-option description should both be updated, they are wrong.
-Both now work identical and use filename globbing. A file is excluded if either
-the last component matches or the whole path matches.
-.TP
-.BI \-exclude\-list " file
-A file containing a list of
-.I globs
-to be exclude as above.
-.TP
-.B \-max\-iso9660\-filenames
-Allow 37 chars in ISO9660 filenames.
-This option forces the
-.B \-N
-option as the extra name space is taken from the space reserved for
-ISO9660 version numbers.
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Although a conforming application needs to provide a buffer space of at
-least 37 characters, disks created with this option may cause a buffer
-overflow in the reading operating system. Use with extreme care.
-.TP
-.BI \-M " path
-or
-.TP
-.BI \-M " device
-or
-.TP
-.BI \-dev " device
-Specifies path to existing ISO9660 image to be merged. The alternate form
-takes a SCSI device specifier that uses the same syntax as the
-.B "dev=
-parameter of
-.B wodim.
-The output of 
-.B mkisofs
-will be a new session which should get written to the end of the
-image specified in \-M.  Typically this requires multi-session capability
-for the recorder and cdrom drive that you are attempting to write this
-image to.
-This option may only be used in conjunction with the
-.B \-C
-option.
-.TP
-.B \-N
-Omit version numbers from ISO9660 file names.
-.br
-This violates the ISO9660 standard, but no one really uses the
-version numbers anyway.
-Use with caution.
-.TP
-.BI \-new\-dir\-mode " mode
-Mode to use when creating new directories in the filesystem image.  The default
-mode is 0555.
-.TP
-.B \-nobak
-.TP
-.B \-no\-bak
-Do not include backup files files on the ISO9660 filesystem.
-If the
-.B \-no\-bak
-option is specified, files that contain the characters '~' or '#'
-or end in '.bak' will not be included (these are typically backup files
-for editors under Unix).
-.TP
-.B \-force\-rr
-Do not use the automatic Rock Ridge attributes recognition for previous sessions.
-This helps to show rotten ISO9660 extension records as e.g. created by NERO burning ROM.
-.TP
-.B \-no\-rr
-Do not use the Rock Ridge attributes from previous sessions.
-This may help to avoid getting into trouble when
-.B mkisofs
-finds illegal Rock Ridge signatures on an old session.
-.TP
-.B \-no\-split\-symlink\-components
-Don't split the SL components, but begin a new Continuation Area (CE)
-instead. This may waste some space, but the SunOS 4.1.4 cdrom driver
-has a bug in reading split SL components (link_size = component_size 
-instead of link_size += component_size).
-.sp
-Note that this option has been introduced by Eric Youngdale in 1997.
-It is questionable whether it makes sense at all.
-When it has been introduced,
-.B mkisofs 
-did have a serious bug that did create defective CE signatures if
-a symlink contained `/../'.
-This CE signature bug in
-.B mkisofs
-has been fixed in May 2003.
-.TP
-.B \-no\-split\-symlink\-fields
-Don't split the SL fields, but begin a new Continuation Area (CE)
-instead. This may waste some space, but the SunOS 4.1.4 and
-Solaris 2.5.1 cdrom driver have a bug in reading split SL fields
-(a `/' can be dropped).
-.sp
-Note that this option has been introduced by Eric Youngdale in 1997.
-It is questionable whether it makes sense at all.
-When it has been introduced,
-.B mkisofs 
-did have a serious bug that did create defective CE signatures if
-a symlink contained `/../'.
-This CE signature bug in
-.B mkisofs
-has been fixed in May 2003.
-.TP
-.BI \-o " filename
-is the name of the file to which the ISO9660 filesystem image should be
-written.  This can be a disk file, a tape drive, or it can correspond directly
-to the device name of the optical disc writer.  If not specified, stdout is
-used.  Note that the output can also be a block special device for a regular
-disk drive, in which case the disk partition can be mounted and examined to
-ensure that the premastering was done correctly.
-.TP
-.B \-pad
-Pad the end of the whole image by 150 sectors (300 kB).
-If the option
-.B \-B
-is used, then there is a padding at the end of the ISO9660 partition 
-and before the beginning of the boot partitions.
-The size of this padding is chosen to make the first boot partition start
-on a sector number that is a multiple of 16.
-.sp
-The padding is needed as many operating systems (e.g. Linux)
-implement read ahead bugs in their filesystem I/O. These bugs result in read
-errors on one or more files that are located at the end of a track. They are
-usually present when the CD is written in Track at Once mode or when
-the disk is written as mixed mode CD where an audio track follows the
-data track.
-.sp
-To avoid problems with I/O error on the last file on the filesystem,
-the 
-.B \-pad
-option has been made the default.
-.TP
-.B \-no\-pad
-Do not Pad the end by 150 sectors (300 kB) and do not make the the boot partitions
-start on a multiple of 16 sectors.
-.TP
-.BI \-path\-list " file
-A file containing a list of
-.I pathspec
-directories and filenames to be added to the ISO9660 filesystem. This list
-of pathspecs are processed after any that appear on the command line. If the
-argument is
-.IR \- ,
-then the list is read from the standard input.
-.TP
-.B \-P
-Outdated option reserved by POSIX.1-2001, use
-.B \-publisher
-instead.
-This option will get POSIX.1-2001 semantics with mkisofs-2.02.
-.TP
-.BI \-publisher " publisher_id
-Specifies a text string that will be written into the volume header.
-This should describe the publisher of the CD-ROM, usually with a
-mailing address and phone number.  There is space on the disc for 128
-characters of information.  This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with PUBL=.
-If specified in both places, the command line version is used.
-.TP
-.BI \-p " preparer_id
-Specifies a text string that will be written into the volume header.
-This should describe the preparer of the CD-ROM, usually with a mailing
-address and phone number.  There is space on the disc for 128
-characters of information.  This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with PREP=.
-If specified in both places, the command line version is used.
-.TP
-.B \-print\-size
-Print estimated filesystem size in multiples of the sector size (2048 bytes)
-and exit. This option is needed for
-Disk At Once mode and with some CD-R drives when piping directly into
-.B wodim.
-In this case it is needed to know the size of the filesystem before the
-actual CD creation is done.
-The option \-print\-size allows to get this size from a "dry-run" before
-the CD is actually written.
-Old versions of
-.B mkisofs
-did write this information (among other information) to 
-.IR stderr .
-As this turns out to be hard to parse, the number without any other information
-is now printed on 
-.B stdout
-too.
-If you like to write a simple shell script, redirect
-.B stderr
-and catch the number from
-.BR stdout .
-This may be done with:
-.sp
-.B "cdblocks=` mkisofs \-print\-size \-quiet .\|.\|. `
-.sp
-.B "mkisofs .\|.\|. | wodim .\|.\|. tsize=${cdblocks}s -"
-.TP
-.B \-quiet
-This makes
-.B mkisofs
-even less verbose.  No progress output will be provided.
-.TP
-.B \-R
-Generate SUSP and RR records using the Rock Ridge protocol to further describe
-the files on the ISO9660 filesystem.
-.TP
-.B \-r
-This is like the \-R option, but file ownership and modes are set to
-more useful values.  The uid and gid are set to zero, because they are
-usually only useful on the author's system, and not useful to the
-client.  All the file read bits are set true, so that files and
-directories are globally readable on the client.  If any execute bit is
-set for a file, set all of the execute bits, so that executables are
-globally executable on the client.  If any search bit is set for a
-directory, set all of the search bits, so that directories are globally
-searchable on the client.  All write bits are cleared, because the
-filesystem will be mounted read-only in any case.  If any of the special
-mode bits are set, clear them, because file locks are not useful on a
-read-only file system, and set-id bits are not desirable for uid 0 or
-gid 0.
-When used on Win32, the execute bit is set on
-.I all
-files. This is a result of the lack of file permissions on Win32 and the
-Cygwin POSIX emulation layer.  See also \-uid \-gid, \-dir\-mode, \-file\-mode
-and \-new\-dir\-mode.
-.TP
-.B \-relaxed\-filenames
-The option
-.B \-relaxed\-filenames
-allows ISO9660 filenames to include digits, upper case characters
-and all other 7 bit ASCII characters (resp. anything except lowercase
-characters).
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.BI \-root " dir
-Moves all files and directories into
-.I dir
-in the image. This is essentially the
-same as using 
-.B -graft-points
-and adding
-.I dir
-in front of every pathspec, but is easier to use.
-
-.I dir
-may actually be several levels deep. It is
-created with the same permissions as other graft points.
-.TP
-.BI \-old-root " dir
-This option is necessary when writing a multisession
-image and the previous (or even older) session was written with
-.BI -root " dir.
-Using a directory name not found in the previous session
-causes
-.B mkisofs
-to abort with an error.
-
-Without this option,
-.B mkisofs
-would not be able to find unmodified files and would
-be forced to write their data into the image once more.
-
-.B \-root
-and
-.B \-old-root
-are meant to be used together to do incremental backups.
-The initial session would e.g. use:
-.BI "mkisofs \-root backup_1 " dirs\f0.
-The next incremental backup with
-.BI "mkisofs \-root backup_2 \-old-root backup_1 " dirs\f0.
-would take another snapshot of these directories. The first
-snapshot would be found in
-.BR backup_1 ,
-the second one in
-.BR backup_2 ,
-but only modified or new files need to be written
-into the second session.
-
-Without these options, new files would be added and old ones would be
-preserved. But old ones would be overwritten if the file was
-modified. Recovering the files by copying the whole directory back
-from CD would also restore files that were deleted
-intentionally. Accessing several older versions of a file requires
-support by the operating system to choose which sessions are to be
-mounted.
-.TP
-.BI \-sort " sort file
-Sort file locations on the media. Sorting is controlled by a file that
-contains pairs of filenames and sorting offset weighting.
-If the weighting is higher, the file will be located closer to the
-beginning of the media, if the weighting is lower, the file will be located
-closer to the end of the media. There must be only one space or tabs
-character between the filename and the
-weight and the weight must be the last characters on a line. The filename
-is taken to include all the characters up to, but not including the last
-space or tab character on a line. This is to allow for space characters to
-be in, or at the end of a filename.
-This option does
-.B not
-sort the order of the file names that appear
-in the ISO9660 directory. It sorts the order in which the file data is
-written to the CD image - which may be useful in order to optimize the
-data layout on a CD. See README.sort for more details.
-.TP
-.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
-See
-.B \-B
-option above.
-.TP
-.BI \-sparc\-label " label
-Set the Sun disk label name for the Sun disk label that is created with the
-.B \-sparc-boot
-option.
-.TP
-.B \-split\-output
-Split the output image into several files of approximately 1 GB.
-This helps to create DVD sized ISO9660 images on operating systems without
-large file support.
-Wodim will concatenate more than one file into a single track if writing
-to a DVD.
-To make
-.B \-split\-output
-work, the 
-.BI \-o " filename"
-option must be specified. The resulting outout images will be named:
-.IR filename_00 , filename_01, filename_02 ...
-.TP
-.BI \-stream\-media\-size " #
-Select streaming operation and set the media size to # sectors.
-This allows you to pipe the output of the tar program into mkisofs
-and to create a ISO9660 filesystem without the need of an intermediate
-tar archive file. 
-If this option has been specified,
-.B mkisofs
-reads from 
-.B stdin 
-and creates a file with the name
-.BR STREAM.IMG .
-The maximum size of the file (with padding) is 200 sectors less than the 
-specified media size. If 
-.B \-no\-pad
-has been specified, the file size is 50 sectors less than the specified media size.
-If the file is smaller, then mkisofs will write padding. This may take a while.
-.sp
-The option 
-.B \-stream\-media\-size
-creates simple ISO9660 filesystems only and may not used together with multi-session
-or hybrid filesystem options.
-.TP
-.BI \-stream\-file\-name " name
-Reserved for future use.
-.TP
-.BI \-sunx86\-boot " UFS-img,,,AUX1-img
-Specifies a comma separated list of filesystem images that are needed to make
-a bootable CD for Solaris x86 systems.
-.sp
-Note that partition 1 is used for the ISO9660 image and that partition 2 is
-the whole disk, so partition 1 and 2 may not be used by external partition data.
-The first image file is mapped to partition 0.
-There may be empty fields in the comma separated list,
-and list entries for partition 1 and 2 must be empty.
-The maximum number of supported partitions is 8 (although the Solaris x86
-partition table could support up to 16 partitions), so it is impossible
-to specify more than 6 partition images.
-This option is required to make a bootable CD for Solaris x86 systems.
-.sp
-If the
-.B \-sunx86\-boot
-option has been specified, the first sector of the resulting image will
-contain a PC fdisk label with a Solaris type 0x82 fdisk partition that
-starts at offset 512 and spans the whole CD.
-In addition, for the Solaris type 0x82 fdisk partition, there is a
-SVr4 disk label at offset 1024 in the first sector of the CD.
-This disk label specifies slice 0 for the first (usually UFS type)
-filesystem image that is used to boot the PC and slice 1 for
-the ISO9660 image.
-Slice 2 spans the whole CD slice 3 .\|.\|. slice 7 may be used for additional
-filesystem images that have been specified with this option.
-.sp
-A Solaris x86 boot CD uses a 1024 byte sized primary boot that uses the
-.B "El-Torito no-emulation 
-boot mode and a secondary generic boot that is in CD sectors 1\|.\|.15.
-For this reason, both
-.BI "-b " bootimage " -no\-emul\-boot
-and
-.BI \-G " genboot
-must be specified.
-.TP
-.BI \-sunx86\-label " label
-Set the SVr4 disk label name for the SVr4 disk label that is created with the
-.B \-sunx86-boot
-option.
-.TP
-.BI \-sysid " ID
-Specifies the system ID.
-There is space on the disc for 32 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with SYSI=system_id.
-If specified in both places, the command line version is used.
-.TP
-.B \-T
-Generate a file TRANS.TBL in each directory on the CD-ROM, which can be used
-on non-Rock Ridge capable systems to help establish the correct file names.
-There is also information present in the file that indicates the major and
-minor numbers for block and character devices, and each symlink has the name of
-the link file given.
-.TP
-.BI \-table\-name " TABLE_NAME
-Alternative translation table file name (see above). Implies the
-.B \-T
-option.
-If you are creating a multi-session image you must use the same name
-as in the previous session.
-.TP
-.BI \-ucs\-level " level
-Set Unicode conformance level in the Joliet SVD. The default level is 3.
-It may be set to 1..3 using this option.
-.TP
-.B \-udf
-Include 
-.B UDF
-support in the generated filesystem image.
-.B UDF
-support is currently in alpha status and for this reason, it is not possible
-to create UDF only images. 
-.B UDF
-data structures are currently coupled to the Joliet structures, so there are many
-pitfalls with the current implementation. There is no UID/GID support,
-there is no POSIX permission support, there is no support for symlinks.
-Note that 
-.B UDF
-wastes the space from sector ~20 to sector 256 at the beginning of the disk
-in addition to the space needed for real 
-.B UDF 
-data structures.
-.TP
-.BI \-uid " uid
-Overrides the uid read from the source files to the value of
-.IR uid . 
-Specifying this option automatically enables Rock Ridge extensions.
-.TP
-.B \-use\-fileversion
-The option 
-.B \-use\-fileversion
-allows mkisofs to use file version numbers from the filesystem.
-If the option is not specified, 
-.B mkisofs
-creates a version number of 1 for all files.
-File versions are strings in the range 
-.I ";1"
-to
-.I ";32767"
-This option is the default on VMS. 
-.TP
-.B \-U
-Allows "Untranslated" filenames, completely violating the ISO9660 standards
-described above. Forces on the \-d, \-l, \-N, \-allow\-leading\-dots,
-\-relaxed\-filenames,
-\-allow\-lowercase, \-allow\-multidot and \-no\-iso\-translate
-flags. It allows more
-than one '.' character in the filename, as well as mixed case filenames.
-This is useful on HP-UX system, where the built-in CDFS filesystem does
-not recognize ANY extensions. Use with extreme caution.
-.TP
-.B \-no\-iso\-translate
-Do not translate the characters '#' and '~' which are invalid for ISO9660 filenames.
-These characters are though invalid often used by Microsoft systems.
-.br
-This violates the ISO9660 standard, but it happens to work on many systems.
-Use with caution.
-.TP
-.BI \-V " volid
-Specifies the volume ID (volume name or label) to be written into the
-master block. 
-There is space on the disc for 32 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with VOLI=id.
-If specified in both places, the command line version is used.  Note that
-if you assign a volume ID, this is the name that will be used as the mount
-point used by the Solaris volume management system and the name that is
-assigned to the disc on a Microsoft Win32 or Apple Mac platform.
-.TP
-.BI \-volset " ID
-Specifies the volset ID.
-There is space on the disc for 128 characters of information.
-This parameter can also be set in the file
-.B \&.m\&kisofsrc
-with VOLS=volset_id.
-If specified in both places, the command line version is used.
-.TP
-.BI \-volset\-size " #
-Sets the volume set size to #.
-The volume set size is the number of CDs that are in a CD volume set.
-A volume set is a collection of one or more volumes, on which a set of
-files is recorded.
-.sp
-Volume Sets are not intended to be used to create a set numbered CDs
-that are part of e.g. a Operation System installation set of CDs.
-Volume Sets are rather used to record a big directory tree that would not
-fit on a single volume.
-Each volume of a Volume Set contains a description of all the directories
-and files that are recorded on the volumes where the sequence numbers
-are less than, or equal to, the assigned Volume Set Size of the current
-volume.
-.sp
-.B mkisofs
-currently does not support a
-.B \-volset\-size
-that is larger than 1.
-.sp
-The option
-.B \-volset\-size
-must be specified before
-.B \-volset\-seqno
-on each command line.
-.TP
-.BI \-volset\-seqno " #
-Sets the volume set sequence number to #.
-The volume set sequence number is the index number of the current
-CD in a CD set.
-The option
-.B \-volset\-size
-must be specified before
-.B \-volset\-seqno
-on each command line.
-.TP
-.B \-v
-Verbose execution. If given twice on the command line, extra debug information
-will be printed.
-.TP
-.BI \-x " path
-Exclude
-.I path
-from being written to CD-ROM.
-.I path
-must be the complete pathname that results from concatenating the pathname
-given as command line argument and the path relative to this directory.
-Multiple paths may be excluded.
-Example: 
-
-mkisofs \-o cd \-x /local/dir1 \-x /local/dir2 /local
-.sp
-NOTE: The
-.B \-m
-and
-.B \-x
-option description should both be updated, they are wrong.
-Both now work identical and use filename globbing. A file is excluded if either
-the last component matches or the whole path matches.
-.TP
-.B \-z
-Generate special RRIP records for transparently compressed files.
-This is only of use and interest for hosts that support transparent
-decompression, such as Linux 2.4.14 or later.  You must specify the
-.B \-R
-or
-.B \-r
-options to enable Rock Ridge, and generate compressed files using the
-.B mkzftree
-utility before running
-.BR mkisofs .
-Note that transparent compression is a nonstandard Rock Ridge extension.
-The resulting disks are only transparently readable if used on Linux.
-On other operating systems you will need to call
-.B mkzftree
-by hand to decompress the files.
-
-.SH "HFS OPTIONS
-.TP
-.B \-hfs
-Create an ISO9660/HFS hybrid CD. This option should be used in conjunction
-with the
-.BR \-map ,
-.B \-magic
-and/or the various
-.I double dash
-options given below.
-.TP
-.B \-apple
-Create an ISO9660 CD with Apple's extensions. Similar to the
-.B \-hfs
-option, except that the Apple Extensions to ISO9660 are added instead of
-creating an HFS hybrid volume.
-Former 
-.B mkisofs
-versions did include Rock Ridge attributes by default if 
-.B \-apple
-was specified. This versions of
-.B mkisofs
-does not do this anymore. If you like to have Rock Ridge attributes,
-you need to specify this separately.
-.TP
-.BI \-map " mapping_file
-Use the
-.I mapping_file
-to set the CREATOR and TYPE information for a file based on the
-filename's extension. A filename is 
-mapped only if it is not one of the know Apple/Unix file formats. See the
-.B "HFS CREATOR/TYPE
-section below.
-.TP
-.BI \-magic " magic_file
-The CREATOR and TYPE information is set by using a file's
-.I magic number
-(usually the first few bytes of a file). The
-.I magic_file
-is only used if a file is not one of the known Apple/Unix file formats, or
-the filename extension has not been mapped using the
-.B \-map
-option. See the 
-.B "HFS CREATOR/TYPE
-section below for more details.
-.TP
-.BI \-hfs\-creator " CREATOR
-Set the default CREATOR for all files. Must be exactly 4 characters. See the
-.B "HFS CREATOR/TYPE
-section below for more details.
-.TP
-.BI \-hfs\-type " TYPE
-Set the default TYPE for all files. Must be exactly 4 characters. See the
-.B "HFS CREATOR/TYPE
-section below for more details.
-.TP
-.B \-probe
-Search the contents of files for all the known Apple/Unix file formats.
-See the
-.B HFS MACINTOSH FILE FORMATS
-section below for more about these formats.
-However, the only way to check for
-.I MacBinary
-and
-.I AppleSingle
-files is to open and read them. Therefore this option
-.I may
-increase processing time. It is better to use one or more
-.I double dash
-options given below if the Apple/Unix formats in use are known.
-.TP
-.B \-no\-desktop
-Do not create (empty) Desktop files. New HFS Desktop files will be created
-when the CD is used on a Macintosh (and stored in the System Folder).
-By default, empty Desktop files are added to the HFS volume.
-.TP
-.B \-mac\-name
-Use the HFS filename as the starting point for the ISO9660, Joliet and
-Rock Ridge file names. See the
-.B HFS MACINTOSH FILE NAMES
-section below for more information.
-.TP
-.BI \-boot\-hfs\-file " driver_file
-Installs the
-.I driver_file
-that
-.I may
-make the CD bootable on a Macintosh. See the
-.B HFS BOOT DRIVER
-section below. (Alpha).
-.TP
-.B \-part
-Generate an HFS partition table. By default, no partition table is generated,
-but some older Macintosh CD-ROM drivers need an HFS partition table on the
-CD-ROM to be able to recognize a hybrid CD-ROM.
-.TP
-.BI \-auto " AutoStart_file
-Make the HFS CD use the QuickTime 2.0 Autostart feature to launch an
-application or document. The given filename must be the name of a document or
-application located at the top level of the CD. The filename must be less
-than 12 characters. (Alpha).
-.TP
-.BI \-cluster\-size " size
-Set the size in bytes of the cluster or allocation units of PC Exchange
-files. Implies the
-.B \-\-exchange
-option. See the
-.B HFS MACINTOSH FILE FORMATS
-section below.
-.TP
-.BI \-hide\-hfs " glob
-Hide
-.I glob
-from the HFS volume. The file or directory will still exist in the
-ISO9660 and/or Joliet directory.
-.I glob
-is a shell wild-card-style pattern that must match any part of the filename
-Multiple globs may be excluded.
-Example:
-
-mkisofs \-o rom \-hfs \-hide\-hfs '*.o' \-hide\-hfs foobar
-
-would exclude all files ending in ".o" or called "foobar" 
-from the HFS volume. Note that if you had a directory called
-"foobar" it too (and of course all its descendants) would be excluded.
-The
-.I glob
-can also be a path name relative to the source directories given on the
-command line. Example:
-
-mkisofs \-o rom \-hfs \-hide\-hfs src/html src
-
-would exclude just the file or directory called "html" from the "src"
-directory. Any other file or directory called "html" in the tree will
-not be excluded.
-Should be used with the
-.B \-hide
-and/or
-.B \-hide\-joliet
-options.
-In order to match a directory name, make sure the pathname does not include
-a trailing '/' character. See README.hide for more details.
-.TP
-.BI \-hide\-hfs\-list " file
-A file containing a list of
-.I globs
-to be hidden as above.
-.TP
-.BI \-hfs\-volid " hfs_volid
-Volume name for the HFS partition. This is the name that is
-assigned to the disc on a Macintosh and replaces the
-.I volid
-used with the 
-.B \-V
-option
-.TP
-.B \-icon\-position
-Use the icon position information, if it exists, from the Apple/Unix file.
-The icons will appear in the same position as they would on a Macintosh
-desktop. Folder location and size on screen, its scroll positions, folder
-View (view as Icons, Small Icons, etc.) are also preserved.
-This option may become set by default in the future.
-(Alpha).
-.TP
-.BI \-root\-info " file
-Set the location, size on screen, scroll positions, folder View etc. for the
-root folder of an HFS volume. See README.rootinfo for more information.
-(Alpha)
-.TP
-.BI \-prep\-boot " FILE
-PReP boot image file. Up to 4 are allowed. See README.prep_boot (Alpha)
-.TP
-.BI \-input\-hfs\-charset " charset
-Input charset that defines the characters used in HFS file names when
-used with the
-.I \-mac\-name
-option.
-The default charset is cp10000 (Mac Roman)
-.I cp10000
-(Mac Roman)
-See
-.B "CHARACTER SETS
-and
-.B "HFS MACINTOSH FILE NAMES
-sections below for more details.
-.TP
-.BI \-output\-hfs\-charset " charset
-Output charset that defines the characters that will be used in the HFS
-file names. Defaults to the input charset. See
-.B "CHARACTER SETS
-section below for more details.
-.TP
-.B \-hfs\-unlock
-By default,
-.B mkisofs
-will create an HFS volume that is
-.IR locked .
-This option leaves the volume unlocked so that other applications (e.g.
-hfsutils) can modify the volume. See the
-.B "HFS PROBLEMS/LIMITATIONS
-section below for warnings about using this option.
-.TP
-.BI \-hfs\-bless " folder_name
-"Bless" the given directory (folder). This is usually the 
-.B System Folder
-and is used in creating HFS bootable CDs. The name of the directory must
-be the whole path name as
-.B mkisofs
-sees it. e.g. if the given pathspec is ./cddata and the required folder is
-called System Folder, then the whole path name is "./cddata/System Folder"
-(remember to use quotes if the name contains spaces).
-.TP
-.BI \-hfs\-parms " PARAMETERS
-Override certain parameters used to create the HFS file system. Unlikely to
-be used in normal circumstances. See the libhfs_iso/hybrid.h source file for
-details.
-.TP
-.B \-\-cap
-Look for AUFS CAP Macintosh files. Search for CAP Apple/Unix file formats
-only. Searching for the other possible Apple/Unix file formats is disabled,
-unless other
-.I double dash
-options are given.
-.TP
-.B \-\-netatalk
-Look for NETATALK Macintosh files
-.TP
-.B \-\-double
-Look for AppleDouble Macintosh files
-.TP
-.B \-\-ethershare
-Look for Helios EtherShare Macintosh files
-.TP
-.B \-\-ushare
-Look for IPT UShare Macintosh files
-.TP
-.B \-\-exchange
-Look for PC Exchange Macintosh files
-.TP
-.B \-\-sgi
-Look for SGI Macintosh files
-.TP
-.B \-\-xinet
-Look for XINET Macintosh files
-.TP
-.B \-\-macbin
-Look for MacBinary Macintosh files
-.TP
-.B \-\-single
-Look for AppleSingle Macintosh files
-.TP
-.B \-\-dave
-Look for Thursby Software Systems DAVE Macintosh files
-.TP
-.B \-\-sfm
-Look for Microsoft's Services for Macintosh files (NT only) (Alpha)
-.TP
-.B \-\-osx\-double
-Look for MacOS X AppleDouble Macintosh files
-.TP
-.B \-\-osx\-hfs
-Look for MacOS X HFS Macintosh files
-
-.SH "CHARACTER SETS
-.B mkisofs
-processes file names in a POSIX compliant way as strings of 8-bit characters.
-To represent all codings for all languages, 8-bit characters are not
-sufficient. Unicode or
-.B ISO-10646
-define character codings that need at least 21 bits to represent all
-known languages. They may be represented with
-.BR UTF-32 ", " UTF-16 " or " UTF-8
-coding.
-.B UTF-32
-uses a plain 32-bit coding but seems to be uncommon. 
-.B UTF-16
-is used by Microsoft with Win32 with the disadvantage that it only supports
-a subset of all codes and that 16-bit characters are not compliant with
-the POSIX filesystem interface.
-.PP
-Modern Unix operating systems may use
-.B UTF-8
-coding for filenames. This coding allows to use the complete Unicode code set.
-Each 32-bit character is represented by one or more 8-bit characters.
-If a character is coded in
-.B ISO-8859-1
-(used in Central Europe and North America) is maps 1:1 to a 
-.BR UTF-32 " or " UTF-16 "
-coded Unicode character.
-If a character is coded in
-.B "7-Bit ASCII
-(used in USA and other countries with limited character set)
-is maps 1:1 to a 
-.BR UTF-32 ", " UTF-16 " or " UTF-8
-coded Unicode character.
-Character codes that cannot be represented as a single byte in UTF-8
-(typically if the value is > 0x7F) use escape sequences that map to more than
-one 8-bit character.
-.PP
-If all operating systems would use 
-.B UTF-8
-coding,
-.B mkisofs
-would not need to recode characters in file names.
-Unfortunately, Apple uses completely nonstandard codings and Microsoft
-uses a Unicode coding that is not compatible with the POSIX filename
-interface.
-.PP
-For all non
-.B UTF-8
-coded operating systems, the actual character
-that each byte represents depends on the
-.I character set
-or
-.I codepage
-(which is the name used by Microsoft)
-used by the local operating system in use - the characters in a character
-set will reflect the region or natural language used by the user.
-.PP
-Usually character codes 0x00-0x1f are control characters, codes 0x20-0x7f
-are the 7 bit ASCII characters and (on PC's and Mac's) 0x80-0xff are used
-for other characters.
-Unfortunately even this does not follow ISO standards that reserve the
-range 0x80-0x9f for control characters and only allow 0xa0-0xff for other
-characters.
-.PP
-As there is a lot more than 256 characters/symbols in use, only a small
-subset are represented in a character set. Therefore the same character code
-may represent a different character in different character sets. So a file name
-generated, say in central Europe, may not display the same character
-when viewed on a machine in, say eastern Europe.
-.PP
-To make matters more complicated, different operating systems use
-different character sets for the region or language. For example the character
-code for "small e with acute accent" may be character code 0x82 on a PC, 
-code 0x8e on a Macintosh and code 0xe9 on a Unix system.
-Note while the codings used on a PC or Mac are nonstandard,
-Unicode codes this character as 0x00000000e9 which is basically the
-same value as the value used by most Unix systems.
-.PP
-As long as not all operating systems and applications will use the Unicode
-character set as the basis for file names in a unique way, it may be
-necessary to specify which character set your file names use in and which
-character set the file names should appear on the CD.
-.PP
-There are four options to specify the character sets you want to use:
-.IP \-input\-charset
-Defines the local character set you are using on your host machine.
-Any character set conversions that take place will use this character
-set as the staring point. The default input character sets are
-.I cp437
-on DOS based systems and
-.I iso8859-1
-on all other systems.
-
-If the
-.I \-J
-option is given, then the Unicode equivalents of the input character set
-will be used in the Joliet directory. Using the 
-.I \-jcharset
-option is the same as using the
-.I \-input\-charset
-and
-.I \-J
-options.
-.IP \-output\-charset
-Defines the character set that will be used with for the Rock Ridge names
-on the CD. Defaults to the input character set. Only likely to be useful
-if used on a non-Unix platform. e.g. using
-.B mkisofs
-on a Microsoft Win32 machine to create Rock Ridge CDs. If you are using
-.B mkisofs
-on a Unix machine, it is likely that the output character set
-will be the same as the input character set.
-.IP \-input\-hfs\-charset
-Defines the HFS character set used for HFS file names decoded from
-any of the various Apple/Unix file formats. Only useful when used with
-.I \-mac\-name
-option. See the
-.B HFS MACINTOSH FILE NAMES
-for more information. Defaults to
-.I cp10000
-(Mac Roman).
-.IP \-output\-hfs\-charset
-Defines the HFS character set used to create HFS file names from the input
-character set in use. In most cases this will be from the character set
-given with the
-.I \-input\-charset
-option. Defaults to the input HFS character set.
-.PP
-There are a number of character sets built in to
-.IR mkisofs .
-To get a listing, use
-.B "mkisofs \-input\-charset help.
-This list doesn't include the charset derived from the current locale,
-if mkisofs is built with iconv support.
-.PP
-Additional character sets can be read from file for any of the character
-set options by giving a filename as the argument to the options. The given
-file will only be read if its name does not match one of the built in
-character sets.
-.PP
-The format of the character set files is the same as the mapping files
-available from http://www.unicode.org/Public/MAPPINGS The format of these
-files is:
-
-	Column #1 is the input byte code (in hex as 0xXX)
-.br
-	Column #2 is the Unicode (in hex as 0xXXXX)
-.br
-	Rest of the line is ignored.
-
-Any blank line, line without two (or more) columns in the above format
-or comments lines (starting with the # character) are ignored without any
-warnings. Any missing input code is mapped to Unicode character 0x0000.
-.PP
-Note that there is no support for 16 bit UNICODE (UTF-16) or 32 bit UNICODE
-(UTF-32) coding because this coding is not POSIX compliant. There should 
-be support for UTF-8 UNICODE coding which is compatible to POSIX filenames
-and supported by moder Unix implementations such as Solaris.
-.PP
-A 1:1 character set mapping can be defined by using the keyword
-.I default
-as the argument to any of the character set options. This is the behaviour
-of older (v1.12) versions of
-.BR mkisofs .
-.PP
-The ISO9660 file names generated from the input filenames are not converted
-from the input character set. The ISO9660 character set is a very limited
-subset of the ASCII characters, so any conversion would be pointless.
-.PP
-Any character that
-.B mkisofs
-can not convert will be replaced with a '_' character.
-.PP
-.SH "HFS CREATOR/TYPE
-A Macintosh file has two properties associated with it which define
-which application created the file, the
-.I CREATOR
-and what data the file contains, the
-.IR TYPE .
-Both are (exactly) 4 letter strings. Usually this
-allows a Macintosh user to double-click on a file and launch the correct
-application etc. The CREATOR and TYPE of a particular file can be found by
-using something like ResEdit (or similar) on a Macintosh.
-.LP
-The CREATOR and TYPE information is stored in all the various Apple/Unix
-encoded files.
-For other files it is possible to base the CREATOR and TYPE on the
-filename's extension using a
-.I mapping
-file (the
-.B \-map
-option) and/or using the
-.I magic number
-(usually a
-.I signature
-in the first few bytes)
-of a file (the
-.B \-magic
-option). If both these options are given, then their order on the command
-line is important. If the
-.B \-map
-option is given first, then a filename extension match is attempted
-before a magic number match. However, if the
-.B \-magic
-option is given first, then a magic number match is attempted before a
-filename extension match.
-.PP
-If a mapping or magic file is not used, or no match is found then the default
-CREATOR and TYPE for all regular files can be set by using entries in the 
-.B \&.m\&kisofsrc
-file or using the 
-.B \-hfs\-creator
-and/or
-.B \-hfs\-type
-options, otherwise the default CREATOR and TYPE are 'Unix' and 'TEXT'.
-.PP
-The format of the
-.I mapping
-file is the same
-.I afpfile
-format as used by
-.IR aufs .
-This file has five columns for the
-.IR extension ,
-.I file
-.IR translation ,
-.IR CREATOR ,
-.I TYPE
-and
-.IR Comment .
-Lines starting with the '#' character are
-comment lines and are ignored. An example file would be like:
-.LP
-.TS
-tab (/);
-l s s s s
-l s s s s
-l l l l l .
-# Example filename mapping file
-#
-# EXTN/XLate/CREATOR/TYPE/Comment
-\&.tif/Raw/'8BIM'/'TIFF'/"Photoshop TIFF image"
-\&.hqx/Ascii/'BnHq'/'TEXT'/"BinHex file"
-\&.doc/Raw/'MSWD'/'WDBN'/"Word file"
-\&.mov/Raw/'TVOD'/'MooV'/"QuickTime Movie"
-*/Ascii/'ttxt'/'TEXT'/"Text file"
-.TE
-.LP
-Where:
-.IP
-The first column
-.I EXTN
-defines the Unix filename extension to be
-mapped. The default mapping for any filename extension that doesn't
-match is defined with the "*" character.
-.IP
-The
-.I Xlate
-column defines the type of text translation between the Unix and
-Macintosh file it is ignored by
-.BR mkisofs ,
-but is kept to be compatible with
-.BR aufs (1).
-Although 
-.B mkisofs
-does not alter the contents of a file, if a binary file has it's TYPE
-set as 'TEXT', it
-.I may
-be read incorrectly on a Macintosh. Therefore a better choice for the
-default TYPE may be '????'
-.IP
-The
-.I CREATOR
-and
-.I TYPE
-keywords must be 4 characters long and enclosed in single quotes.
-.IP
-The comment field is enclosed in double quotes - it is ignored by
-.BR mkisofs ,
-but is kept to be compatible with 
-.BR aufs .
-.PP
-The format of the
-.I magic
-file is almost identical to the
-.BR magic (5)
-file used by the Linux
-.BR file (1)
-command - the routines for reading and decoding the
-.I magic
-file are based on the Linux
-.BR file (1)
-command.
-.PP
-This file has four tab separated columns for the 
-.I byte
-.IR offset ,
-.IR type ,
-.I test
-and
-.IR message .
-Lines starting with the '#' character are
-comment lines and are ignored. An example file would be like:
-.LP
-.TS
-tab (/);
-l s s s
-l s s s
-l l l l .
-# Example magic file
-#
-# off/type/test/message
-0/string/GIF8/8BIM GIFf  GIF image
-0/beshort/0xffd8/8BIM JPEG  image data
-0/string/SIT!/SIT! SIT!  StuffIt Archive
-0/string/\\037\\235/LZIV ZIVU  standard Unix compress
-0/string/\\037\\213/GNUz ZIVU  gzip compressed data
-0/string/%!/ASPS TEXT  Postscript
-0/string/\\004%!/ASPS TEXT  PC Postscript with a ^D to start
-4/string/moov/txtt MooV  QuickTime movie file (moov)
-4/string/mdat/txtt MooV  QuickTime movie file (mdat)
-.TE
-.PP
-The format of the file is described in the
-.BR magic (4)
-man page. The only difference here is that for each entry in the magic file, the
-.I message
-for the initial offset
-.B must
-be 4 characters for the CREATOR followed by 4 characters for the TYPE -
-white space is
-optional between them. Any other characters on this line are ignored.
-Continuation lines (starting with a '>') are also ignored i.e. only the initial
-offset lines are used.
-.PP
-Using the
-.B \-magic
-option may significantly increase processing time as each file has to opened
-and read to find it's magic number.
-.PP
-In summary, for all files, the default CREATOR is 'Unix' and the default
-TYPE is 'TEXT'.  These can be changed by using entries in the 
-.I \&.m\&kisofsrc 
-file or by using the
-.B \-hfs\-creator
-and/or
-.B \-hfs\-type
-options. 
-.PP
-If the a file is in one of the known Apple/Unix formats (and the format
-has been selected), then the CREATOR and TYPE are taken from the values
-stored in the Apple/Unix file.
-.PP
-Other files can have their CREATOR and TYPE set from their file name
-extension (the
-.B \-map
-option), or their magic number (the
-.B \-magic
-option). If the default match is used in the
-.I mapping
-file, then these values override the default CREATOR and TYPE.
-.PP
-A full CREATOR/TYPE database can be found at 
-http://www.angelfire.com/il/szekely/index.html
-
-.SH "HFS MACINTOSH FILE FORMATS
-Macintosh files have two parts called the
-.I Data
-and
-.I Resource
-fork. Either may be empty. Unix (and many other OSs) can only
-cope with files having one part (or fork). To add to this, Macintosh files
-have a number of attributes associated with them - probably the most
-important are the TYPE and CREATOR. Again Unix has no concept of these
-types of attributes.
-.PP
-e.g. a Macintosh file may be a JPEG image where the image is stored in the
-Data fork and a desktop thumbnail stored in the Resource fork. It is usually
-the information in the data fork that is useful across platforms.
-.PP
-Therefore to store a Macintosh file on a Unix filesystem, a way has to be
-found to cope with the two forks and the extra attributes (which are
-referred to as the
-.I finder
-.IR info ).
-Unfortunately, it seems that every software package that stores Macintosh
-files on Unix has chosen a completely different storage method.
-.PP
-The Apple/Unix formats that
-.I mkisofs
-(partially) supports are:
-.IP "CAP AUFS format"
-Data fork stored in a file. Resource fork in subdirectory .resource
-with same filename as data fork. Finder info
-in .finderinfo subdirectory with same filename.
-.IP "AppleDouble/Netatalk"
-Data fork stored in a file. Resource fork stored in a file with
-same name prefixed with "%". Finder info also stored in same
-"%" file. Netatalk uses the same format, but the resource
-fork/finderinfo stored in subdirectory .AppleDouble with same
-name as data fork.
-.IP AppleSingle
-Data structures similar to above, except both forks and finder
-info are stored in one file.
-.IP "Helios EtherShare"
-Data fork stored in a file. Resource fork and finder info together in
-subdirectory .rsrc with same filename as data fork.
-.IP "IPT UShare"
-Very similar to the EtherShare format, but the finder info
-is stored slightly differently.
-.IP MacBinary
-Both forks and finder info stored in one file.
-.IP "Apple PC Exchange"
-Used by Macintoshes to store Apple files on DOS (FAT) disks.
-Data fork stored in a file. Resource fork in subdirectory
-resource.frk (or RESOURCE.FRK). Finder info as one record
-in file finder.dat (or FINDER.DAT). Separate finder.dat for
-each data fork directory.
-.IP
-Note: 
-.I mkisofs
-needs to know the native FAT cluster size of the disk that the PC Exchange
-files are on (or have been copied from). This size is given by the
-.B \-cluster\-size
-option.
-The cluster or allocation size can be found by using the DOS utility
-.BR CHKDSK .
-.IP
-May not work with PC Exchange v2.2 or higher files (available with MacOS 8.1).
-DOS media containing PC Exchange files should be mounted as type
-.B msdos
-(not
-.BR vfat )
-when using Linux.
-.IP "SGI/XINET"
-Used by SGI machines when they mount HFS disks. Data fork stored
-in a file. Resource fork in subdirectory .HSResource with same
-name. Finder info as one record in file .HSancillary. Separate .HSancillary
-for each data fork directory.
-.IP "Thursby Software Systems DAVE"
-Allows Macintoshes to store Apple files on SMB servers.
-Data fork stored in a file. Resource fork in subdirectory
-resource.frk. Uses the AppleDouble format to store resource fork.
-.IP "Services for Macintosh"
-Format of files stored by NT Servers on NTFS filesystems. Data fork is
-stored as "filename". Resource fork stored as a NTFS
-.I stream
-called "filename:AFP_Resource". The finder info is stored as a NTFS
-.I stream
-called "filename:Afp_AfpInfo". These streams are normally invisible to the
-user.
-.IP
-Warning: mkisofs only partially supports the SFM format. If an HFS file
-or folder stored on the NT server contains an
-.I illegal
-NT character in its name, then NT converts these characters to
-.I Private Use Unicode
-characters. The characters are: " * / < > ? \ | also a space or
-period if it is the last character of the file name, character codes 0x01
-to 0x1f (control characters) and Apple' apple logo.
-.IP
-Unfortunately, these private Unicode characters are not
-readable by the mkisofs NT executable. Therefore any file or directory
-name containing these characters will be ignored - including the contents of
-any such directory.
-.IP "MacOS X AppleDouble"
-When HFS/HFS+ files are copied or saved by MacOS X on to a non-HFS file
-system (e.g. UFS, NFS etc.), the files are stored in AppleDouble format.
-Data fork stored in a file. Resource fork stored in a file with
-same name prefixed with "._". Finder info also stored in same "._" file.
-.IP "MacOS X HFS (Alpha)"
-Not really an Apple/Unix encoding, but actual HFS/HFS+ files on a MacOS X
-system. Data fork stored in a file. Resource fork stored in a pseudo file
-with the same name with the suffix '/rsrc'. The finderinfo is only
-available via a MacOS X library call.
-.IP
-Notes: (also see README.macosx)
-.IP
-Only works when used on MacOS X.
-.IP
-If a file is found with a zero
-length resource fork and empty finderinfo, it is assumed not to have
-any Apple/Unix encoding - therefore a TYPE and CREATOR can be set using
-other methods.
-.LP
-.I mkisofs
-will attempt to set the CREATOR, TYPE, date and possibly other flags from
-the finder info. Additionally, if it exists, the Macintosh filename is set
-from the finder info, otherwise the Macintosh name is based on the Unix
-filename - see the
-.B "HFS MACINTOSH FILE NAMES
-section below.
-.PP
-When using the
-.B \-apple
-option, the TYPE and CREATOR are stored in the optional System Use or SUSP field
-in the ISO9660 Directory Record - in much the same way as the Rock Ridge
-attributes are. In fact to make life easy, the Apple extensions are added
-at the beginning of the existing Rock Ridge attributes (i.e. to get the Apple
-extensions you get the Rock Ridge extensions as well).
-.PP
-The Apple extensions require the resource fork to be stored as an ISO9660
-.I associated
-file. This is just like any normal file stored in the ISO9660 filesystem
-except that the associated file flag is set in the Directory Record (bit
-2). This file has the same name as the data fork (the file seen by
-non-Apple machines). Associated files are normally ignored by other OSs
-.PP
-When using the
-.B \-hfs
-option, the TYPE and CREATOR plus other finder info, are stored in a separate
-HFS directory, not visible on the ISO9660 volume. The HFS directory references
-the same data and resource fork files described above.
-.PP
-In most cases, it is better to use the
-.B \-hfs
-option instead of the
-.B \-apple
-option, as the latter imposes the limited ISO9660 characters allowed in
-filenames. However, the Apple extensions do give the advantage that the
-files are packed on the disk more efficiently and it may be possible to fit 
-more files on a CD - important when the total size of the source files is
-approaching 650MB.
-
-.SH "HFS MACINTOSH FILE NAMES
-Where possible, the HFS filename that is stored with an Apple/Unix file
-is used for the HFS part of the CD. However, not all the Apple/Unix
-encodings store the HFS filename with the finderinfo. In these cases,
-the Unix filename is used - with escaped special characters. Special
-characters include '/' and characters with codes over 127.
-.PP
-AUFS escapes these characters by using ":" followed by the character code
-as two hex digits. Netatalk and EtherShare have a similar scheme, but uses
-"%" instead of a ":".
-.PP
-If mkisofs can not find an HFS filename, it uses the Unix name, with
-any %xx or :xx characters (xx == two hex digits) converted to a single
-character code. If "xx" are not hex digits ([0-9a-fA-F]), then they are
-left alone - although any remaining ":" is converted to "%" as colon
-is the HFS directory separator. Care must be taken, as an ordinary Unix
-file with %xx or :xx will also be converted. e.g.
-.PP
-.TS
-l l 
-l s
-l l
-l s
-l l .
-This:2fFile	converted to This/File
-	
-This:File	converted to This%File
-	
-This:t7File	converted to This%t7File
-.TE
-.PP
-Although HFS filenames appear to support upper and lower case letters,
-the filesystem is case insensitive. i.e. the filenames "aBc" and "AbC"
-are the same. If a file is found in a directory with the same HFS name,
-then
-.I mkisofs
-will attempt, where possible, to make a unique name by adding '_' characters
-to one of the filenames. 
-.PP
-If an HFS filename exists for a file, then mkisofs can use this name as
-the starting point for the ISO9660, Joliet and Rock Ridge filenames using
-the
-.B \-mac\-name
-option. Normal Unix files without an HFS name will still use their Unix name.
-e.g.
-.PP
-If a
-.I MacBinary
-(or
-.I PC
-.IR Exchange )
-file is stored as 
-.I someimage.gif.bin
-on the Unix filesystem, but contains a HFS file called
-.IR someimage.gif ,
-then this is the name that would appear on the HFS part of the CD. However, as
-mkisofs uses the Unix name as the starting point for the other names, then
-the ISO9660 name generated will probably be 
-.I SOMEIMAG.BIN
-and the Joliet/Rock Ridge would be
-.IR someimage.gif.bin .
-Although the actual data (in this case) is a GIF image. This option will use
-the HFS filename as the starting point and the ISO9660 name will probably be
-.I SOMEIMAG.GIF
-and the Joliet/Rock Ridge would be
-.IR someimage.gif .
-.PP
-Using the
-.B \-mac\-name
-option will not currently work with the
-.B \-T
-option - the Unix
-name will be used in the TRANS.TBL file, not the Macintosh name.
-.PP
-The character set used to convert any HFS file name to a Joliet/Rock Ridge
-file name defaults to
-.I cp10000
-(Mac Roman).
-The character set used can be specified using the
-.I \-input\-hfs\-charset
-option. Other built in HFS character sets are: cp10006 (MacGreek),
-cp10007 (MacCyrillic), cp10029 (MacLatin2), cp10079 (MacIcelandandic) and
-cp10081 (MacTurkish).
-.PP
-Note: the character codes used by HFS file names taken from the various
-Apple/Unix formats will not be converted as they are assumed to be in the
-correct Apple character set. Only the Joliet/Rock Ridge names derived from
-the HFS file names will be converted.
-.PP
-The existing mkisofs code will filter out any illegal characters for the
-ISO9660 and Joliet filenames, but as mkisofs expects to be dealing
-directly with Unix names, it leaves the Rock Ridge names as is.
-But as '/' is a legal HFS filename character, the
-.B \-mac\-name
-option converts '/' to a '_' in Rock Ridge filenames.
-.PP
-If the Apple extensions are used, then only the ISO9660 filenames will
-appear on the Macintosh. However, as the Macintosh ISO9660 drivers can use
-.I Level 2
-filenames, then you can use options like
-.B \-allow\-multidot
-without problems on
-a Macintosh - still take care over the names, for example
-.I this.file.name
-will be converted to
-.I THIS.FILE
-i.e. only have one '.', also filename
-.I abcdefgh
-will be seen as
-.I ABCDEFGH
-but
-.I abcdefghi
-will be seen as
-.I ABCDEFGHI.
-i.e. with a '.' at the end - don't know if this is a Macintosh
-problem or m\&kisofs/mkhybrid problem. All filenames will be in upper case
-when viewed on a Macintosh. Of course, DOS/Win3.X machines will not be able
-to see Level 2 filenames...
-
-.SH "HFS CUSTOM VOLUME/FOLDER ICONS
-To give a HFS CD a custom icon, make sure the root (top level) folder includes
-a standard Macintosh volume icon file. To give a volume a custom icon on
-a Macintosh, an icon has to be pasted over the volume's icon in the "Get Info"
-box of the volume. This creates an invisible file called 'Icon\\r' ('\\r' is
-the 'carriage return' character) in the root folder.
-.P
-A custom folder icon is very similar - an invisible file called 'Icon\\r'
-exits in the folder itself.
-.P
-Probably the easiest way to create a custom icon that mkisofs can use, is to
-format a blank HFS floppy disk on a Mac, paste an icon to its "Get Info"
-box. If using Linux with the HFS module installed, mount the floppy using
-something like:
-
-	mount \-t hfs /dev/fd0 /mnt/floppy
-
-The floppy will be mounted as a CAP file system by default. Then run mkisofs
-using something like:
-
-	mkisofs \-\-cap \-o output source_dir /mnt/floppy
-
-If you are not using Linux, then you can use the hfsutils to copy the icon
-file from the floppy. However, care has to be taken, as the icon file
-contains a control character. e.g.
-
-	hmount /dev/fd0
-.br
-	hdir \-a
-.br
-	hcopy \-m Icon^V^M icon_dir/icon
-
-Where '^V^M' is control\-V followed by control\-M. Then run 
-.B mkisofs
-by using something like:
-
-	mkisofs \-\-macbin \-o output source_dir icon_dir
-.PP
-The procedure for creating/using custom folder icons is very similar - paste
-an icon to folder's "Get Info" box and transfer the resulting 'Icon\\r'
-file to the relevant directory in the mkisofs source tree.
-.PP
-You may want to hide the icon files from the ISO9660 and Joliet trees.
-.PP
-To give a custom icon to a Joliet CD, follow the instructions found at:
-http://www.fadden.com/cdrfaq/faq03.html#[3-21]
-
-.SH "HFS BOOT DRIVER
-It 
-.I may
-be possible to make the hybrid CD bootable on a Macintosh.
-.PP
-A bootable HFS CD requires an Apple CD-ROM (or compatible) driver, a bootable
-HFS partition and the necessary System, Finder, etc. files.
-.PP
-A driver can be obtained from any other Macintosh bootable CD-ROM using the
-.I apple_driver
-utility. This file can then be used with the
-.B \-boot\-hfs\-file
-option.
-.PP
-The HFS partition (i.e. the hybrid disk in our case) must contain a
-suitable System Folder, again from another CD-ROM or disk.
-.PP
-For a partition to be bootable, it must have it's 
-.I boot block
-set. The boot
-block is in the first two blocks of a partition. For a non-bootable partition
-the boot block is full of zeros. Normally, when a System file is copied to
-partition on a Macintosh disk, the boot block is filled with a number of
-required settings - unfortunately I don't know the full spec for the boot
-block, so I'm guessing that the following will work OK.
-.PP
-Therefore, the utility
-.I apple_driver
-also extracts the boot block from the
-first HFS partition it finds on the given CD-ROM and this is used for the
-HFS partition created by
-.BR mkisofs .
-.IP "PLEASE NOTE"
-By using a driver from an Apple CD and copying Apple software to your CD,
-you become liable to obey Apple Computer, Inc. Software License Agreements.
-.SH "EL TORITO BOOT INFORMATION TABLE
-When the
-.B \-boot\-info\-table
-option is given,
-.B mkisofs
-will modify the boot file specified by the
-.B \-b
-option by inserting a 56-byte "boot information table" at offset 8 in
-the file.  This modification is done in the source filesystem, so make
-sure you use a copy if this file is not easily recreated!  This file
-contains pointers which may not be easily or reliably obtained at boot
-time.
-.PP
-The format of this table is as follows; all integers are in
-section 7.3.1 ("little endian") format.
-.sp
-.RS +.2i
-.ta 1.0i 2.5i 3.5i
-.nf
-Offset	Name	Size	Meaning
- 8	bi_pvd	4 bytes	LBA of primary volume descriptor
-12	bi_file	4 bytes	LBA of boot file
-16	bi_length	4 bytes	Boot file length in bytes
-20	bi_csum	4 bytes	32-bit checksum
-24	bi_reserved	40 bytes	Reserved
-.fi
-.RE
-.sp
-The 32-bit checksum is the sum of all the 32-bit words in the boot
-file starting at byte offset 64.  All linear block addresses (LBAs)
-are given in CD sectors (normally 2048 bytes).
-.SH "HPPA NOTES"
-To make a bootable CD for HPPA, at the very least a boot loader file (
-.B \-hppa\-bootloader
-), a kernel image file (32- or 64-bit or both, depending on hardware)
-and a boot command line (
-.B \-hppa\-cmdline
-) must be specified. Some systems can boot either a 32- or a 64-bit
-kernel, and the choice of which one to use will be made by the
-firmware. Optionally, a ramdisk can be used for the root filesystem
-using
-.B \-hppa\-cmdline.
-.SH "JIGDO NOTES"
-Jigdo is a useful tool to help in the distribution of large files like CD and
-DVD images. See Richard Atterer's site for more details. Debian CDs and DVD ISO
-images are published on the web in jigdo format to allow end users to download
-them more efficiently.
-.PP
-To create jigdo and template files alongside the ISO image from
-mkisofs, you must first generate a list of the files that will be
-used, in the following format:
-.sp
-.RS +.2i
-.ta 2.0i 2.0i 5.0i
-.nf
-MD5sum   File size  Path
-32 chars 12 chars   to end of line
-.fi
-.RE
-.sp
-The MD5sum should be written in jigdo's pseudo-base64 format. The file
-size should be in decimal, and the path to the file must be absolute.
-.PP
-Once you have this file, call mkisofs with all of your normal command
-line parameters. Specify the output filenames for the jigdo and
-template files using \-jigdo\-jigdo and \-jigdo\-template, and pass in
-the location of your MD5 list with the \-md5\-list option.
-.PP
-If there are files that you do NOT want to be added into the jigdo
-file (e.g. if they are likely to change often), specify them using
-\-jigdo\-ignore. If you want to verify some of the files as they are
-written into the image, specify them using \-jigdo\-force\-md5. If any
-files don't match, mkisofs will then abort. Both of these options take
-regular expressions as input. It is possible to restrict the set of
-files that will be used further based on size - use the
-\-jigdo\-min\-file\-size option.
-.PP
-Finally, the jigdo code needs to know how to map the files it is given
-onto a mirror-style configuration. Specify how to map paths using the
-\-jigdo\-map option. Using "Debian=/mirror/debian" will cause all
-paths starting with "/mirror/debian" to be mapped to "Debian:<file>"
-in the output jigdo file.
-.SH CONFIGURATION
-.B mkisofs
-looks for the
-.B \&.m\&kisofsrc
-file,
-first in the current working directory,
-then in the user's home directory,
-and then in the directory in which the
-.B mkisofs
-binary is stored.  This file is assumed to contain a series of lines
-of the form
-.BI TAG= value
-, and in this way you can specify certain options.
-The case of the tag is not significant.
-Some fields in the volume header
-are not settable on the command line, but can be altered through this
-facility.
-Comments may be placed in this file,
-using lines which start with a hash (#) character.
-.TP
-.B APPI
-The application identifier
-should describe the application that will be on the disc.
-There is space on the disc for 128 characters of information.
-May be overridden using the
-.B \-A
-command line option.
-.TP
-.B COPY
-The copyright information,
-often the name of a file on the disc containing the copyright notice.
-There is space in the disc for 37 characters of information.
-May be overridden using the
-.B \-copyright
-command line option.
-.TP
-.B ABST
-The abstract information,
-often the name of a file on the disc containing an abstract.
-There is space in the disc for 37 characters of information.
-May be overridden using the
-.B \-abstract
-command line option.
-.TP
-.B BIBL
-The bibliographic information,
-often the name of a file on the disc containing a bibliography.
-There is space in the disc for 37 characters of information.
-May be overridden using the
-.B \-bilio
-command line option.
-.TP
-.B PREP
-This should describe the preparer of the CD-ROM,
-usually with a mailing address and phone number.
-There is space on the disc for 128 characters of information.
-May be overridden using the
-.B \-p
-command line option.
-.TP
-.B PUBL
-This should describe the publisher of the CD-ROM,
-usually with a mailing address and phone number.
-There is space on the disc for 128 characters of information.
-May be overridden using the
-.B \-publisher
-command line option.
-.TP
-.B SYSI
-The System Identifier.
-There is space on the disc for 32 characters of information.
-May be overridden using the
-.B \-sysid
-command line option.
-.TP
-.B VOLI
-The Volume Identifier.
-There is space on the disc for 32 characters of information.
-May be overridden using the
-.B \-V
-command line option.
-.TP
-.B VOLS
-The Volume Set Name.
-There is space on the disc for 128 characters of information.
-May be overridden using the
-.B \-volset
-command line option.
-.TP
-.B HFS_TYPE
-The default TYPE for Macintosh files. Must be exactly 4 characters.
-May be overridden using the
-.B \-hfs\-type
-command line option.
-.TP
-.B HFS_CREATOR
-The default CREATOR for Macintosh files. Must be exactly 4 characters.
-May be overridden using the
-.B \-hfs\-creator
-command line option.
-.PP
-.B mkisofs
-can also be configured at compile time with defaults for many of these fields.
-See the file defaults.h.
-
-.SH EXAMPLES
-.PP
-To create a vanilla ISO9660 filesystem image in the file 
-.IR cd.iso ,
-where the directory
-.I cd_dir
-will become the root directory if the CD, call:
-.PP
-% mkisofs \-o cd.iso cd_dir
-.PP
-To create a CD with Rock Ridge extensions of
-the source directory
-.IR cd_dir :
-.PP
-% mkisofs \-o cd.iso \-R cd_dir
-.PP
-To create a CD with Rock Ridge extensions of
-the source directory
-.I cd_dir
-where all files have at least read permission and all files
-are owned by
-.IR root ,
-call:
-.PP
-% mkisofs \-o cd.iso \-r cd_dir
-.PP
-To write a tar archive directly to a CD that will later contain a simple
-ISO9660 filesystem with the tar archive call:
-.PP
-% star \-c . | mkisofs \-stream\-media\-size 333000 | \\
-.br
-wodim dev=b,t,l \-dao tsize=333000s \-
-.PP
-To create a HFS hybrid CD with the Joliet and Rock Ridge extensions of
-the source directory
-.IR cd_dir :
-.PP
-% mkisofs \-o cd.iso \-R \-J \-hfs cd_dir
-.PP
-To create a HFS hybrid CD from the source directory 
-.I cd_dir
-that contains
-Netatalk Apple/Unix files:
-.PP
-% mkisofs \-o cd.iso \-\-netatalk cd_dir
-.PP
-To create a HFS hybrid CD from the source directory
-.IR cd_dir ,
-giving all files
-CREATOR and TYPES based on just their filename extensions listed in the file 
-"mapping".:
-.PP
-% mkisofs \-o cd.iso \-map mapping cd_dir
-.PP
-To create a CD with the 'Apple Extensions to ISO9660', from the source
-directories
-.I cd_dir
-and
-.IR another_dir.
-Files in all the known Apple/Unix format
-are decoded and any other files are given CREATOR and TYPE based on their
-magic number given in the file "magic":
-.PP
-% mkisofs \-o cd.iso \-apple \-magic magic \-probe \\
-.br
-        cd_dir another_dir
-.PP
-The following example puts different files on the CD that all have
-the name README, but have different contents when seen as a
-ISO9660/Rock Ridge, Joliet or HFS CD.
-.PP
-Current directory contains:
-.PP
-% ls \-F
-.br
-README.hfs     README.joliet  README.Unix    cd_dir/
-.PP
-The following command puts the contents of the directory
-.I cd_dir
-on the
-CD along with the three README files - but only one will be seen from
-each of the three filesystems:
-.PP
-% mkisofs \-o cd.iso \-hfs \-J \-r \-graft\-points \\
-.br
-        \-hide README.hfs \-hide README.joliet \\
-.br
-        \-hide\-joliet README.hfs \-hide\-joliet README.Unix \\
-.br
-        \-hide\-hfs README.joliet \-hide\-hfs README.Unix \\
-.br
-        README=README.hfs README=README.joliet \\
-.br
-        README=README.Unix cd_dir
-.PP
-i.e. the file README.hfs will be seen as README on the HFS CD and the
-other two README files will be hidden. Similarly for the Joliet and
-ISO9660/Rock Ridge CD.
-.PP
-There are probably all sorts of strange results possible with
-combinations of the hide options ...
-
-.SH AUTHOR
-.PP
-.br
-Eric Youngdale <ericy at gnu.ai.mit.edu> or <eric at andante.org> wrote the
-first versions (1993 .\|.\|. 1998) of the m\&kisofs utility.
-The copyright for old versions of the m\&kisofs utility is held by
-Yggdrasil Computing, Incorporated.
-.PP
-Major additional parts were written or contributed by the following authors. Also
-see the MAINTAINER section below for recent information.
-.PP
-J\*org Schilling 
-wrote the SCSI transport library and its adaptation layer to
-.B mkisofs
-and newer parts (starting from 1999) of the utility, this makes
-.B mkisofs
-.br
-Copyright (C) 1999, 2000, 2001 J\*org Schilling.
-.PP
-HFS hybrid code, Copyright (C) James Pearson 1997, 1998, 1999, 2000, 2001
-.PP
-libhfs code, Copyright (C) 1996, 1997 Robert Leslie
-.PP
-libunls code, Copyright (C) James Pearson 2000, (C) Joerg Schilling 2001-2006, (C) Jungshik Shin 2002
-.PP
-iconv code, Copyright (C) 2003 Jungshik Shin, (C) 2003 Jaakko Heinonen
-.PP
-See MAINTAINER section for contact information.
-.SH NOTES
-.PP
-.B mkisofs
-is not based on the standard mk*fs tools for Unix, because we must generate
-a complete copy of an existing filesystem on a disk in the ISO9660
-filesystem.  The name mkisofs is probably a bit of a misnomer, since it
-not only creates the filesystem, but it also populates it.
-However, the appropriate tool name for a Unix tool that creates populated
-filesystems - mkproto - is not well known.
-.PP
-.B mkisofs
-may safely be installed suid root. This may be needed to allow
-.B mkisofs
-to read the previous session when creating a multi session image.
-.PP
-If 
-.B mkisofs 
-is creating a filesystem image with Rock Ridge attributes and the
-directory nesting level of the source directory tree is too much
-for ISO9660, 
-.B mkisofs 
-will do deep directory relocation.
-This results in a directory called
-.B RR_MOVED
-in the root directory of the CD. You cannot avoid this directory.
-.PP
-The sparc boot support that is implemented with the
-.B \-sparc\-boot
-options completely follows the official Sparc CD boot requirements from
-the Boot prom in Sun Sparc systems. Some Linux distributions for Sparc
-systems use a boot loader called
-.B SILO
-that unfortunately is not Sparc CD boot compliant.
-It is annoyingly to see that the Authors of SILO don't fix SILO but instead
-provide a completely unneeded "patch" to mkisofs that incorporates far
-more source than the fix for SILO would need.
-.SH BUGS
-.TP
-\(bu
-Any files that have hard links to files not in the tree being copied to the
-ISO9660 filesystem will have an incorrect file reference count.
-.TP
-\(bu
-Does not check for SUSP record(s) in "." entry of the
-root directory to verify the existence of Rock Ridge
-enhancements.
-.sp
-This problem is present when reading old sessions while
-adding data in multi-session mode.
-.TP
-\(bu
-Does not properly read relocated directories in multi-session
-mode when adding data.
-.sp
-Any relocated deep directory is lost if the new session does not
-include the deep directory.
-.sp
-Repeat by: create first session with deep directory relocation
-then add new session with a single dir that differs from the
-old deep path.
-.TP
-\(bu
-Does not re-use RR_MOVED when doing multi-session from TRANS.TBL
-.TP
-\(bu
-Does not create whole_name entry for RR_MOVED in multi-session
-mode.
-.PP
-There may be some other ones.  Please, report them to the author.
-
-.SH "HFS PROBLEMS/LIMITATIONS
-I have had to make several assumptions on how I expect the modified
-libhfs routines to work, however there may be situations that either
-I haven't thought of, or come across when these assumptions fail.
-Therefore I can't guarantee that mkisofs will work as expected
-(although I haven't had a major problem yet). Most of the HFS features work
-fine, however, some are not fully tested. These are marked as
-.I Alpha
-above.
-.PP
-Although HFS filenames appear to support upper and lower case letters,
-the filesystem is case insensitive. i.e. the filenames "aBc" and "AbC"
-are the same. If a file is found in a directory with the same HFS name, then
-.I mkisofs
-will attempt, where possible, to make a unique name by adding '_' characters
-to one of the filenames.
-.PP
-HFS file/directory names that share the first 31 characters have
-_N' (N == decimal number) substituted for the last few characters
-to generate unique names.
-.PP
-Care must be taken when "grafting" Apple/Unix files or directories (see
-above for the method and syntax involved). It is not possible to use a
-new name for an Apple/Unix encoded file/directory. e.g. If a Apple/Unix
-encoded file called "oldname" is to added to the CD, then you can not use
-the command line:
-.IP
-mkisofs \-o output.raw \-hfs \-graft\-points newname=oldname cd_dir
-.LP
-mkisofs will be unable to decode "oldname". However, you can graft
-Apple/Unix encoded files or directories as long as you do not attempt to
-give them new names as above.
-.PP
-When creating an HFS volume with the multisession options,
-.B \-M
-and
-.BR \-C ,
-only files in the last session will be in the HFS volume. i.e. mkisofs can
-not
-.I add
-existing files from previous sessions to the HFS volume.
-.PP
-However, if each session is created with the
-.B \-part
-option, then each session will appear as 
-separate volumes when mounted on a Mac. In this case, it is worth using the 
-.B \-V
-or
-.B \-hfs\-volid
-option to give each session a unique volume name,
-otherwise each "volume" will appear on the Desktop with the same name.
-.PP
-Symbolic links (as with all other non-regular files) are not added to
-the HFS directory.
-.PP
-Hybrid volumes may be larger than pure ISO9660 volumes
-containing the same data. In some cases (e.g. DVD sized volumes) the hybrid
-volume may be significantly larger. As an HFS volume gets bigger, so does the
-allocation block size (the smallest amount of space a file can occupy).
-For a 650Mb CD, the allocation block is 10Kb, for a 4.7Gb DVD it will be
-about 70Kb.
-.PP
-The maximum number of files in an HFS volume is about 65500 - although
-the real limit will be somewhat less than this.
-.PP
-The resulting hybrid volume can be accessed on a Unix machine by using
-the hfsutils routines. However, no changes can be made to the volume as it
-is set as
-.B locked.
-The option
-.B \-hfs\-unlock
-will create an output image that is unlocked - however no changes should be
-made to the contents of the volume (unless you really know what you are
-doing) as it's not a "real" HFS volume.
-.PP
-Using the
-.B \-mac\-name
-option will not currently work with the
-.B \-T
-option - the Unix
-name will be used in the TRANS.TBL file, not the Macintosh name.
-.PP
-Although 
-.B mkisofs
-does not alter the contents of a file, if a binary file has it's TYPE
-set as 'TEXT', it
-.I may
-be read incorrectly on a Macintosh. Therefore a better choice for the
-default TYPE may be '????'
-.PP
-The
-.B \-mac\-boot\-file
-option may not work at all...
-.PP
-May not work with PC Exchange v2.2 or higher files (available with MacOS 8.1).
-DOS media containing PC Exchange files should be mounted as type
-.B msdos
-(not
-.BR vfat )
-when using Linux.
-.PP
-The SFM format is only partially supported - see
-.B HFS MACINTOSH FILE FORMATS
-section above.
-.PP
-It is not possible to use the the
-.B \-sparc\-boot
-or
-.B \-generic\-boot
-options with the 
-.B \-boot\-hfs\-file
-or
-.B \-prep\-boot
-options.
-.PP
-.B mkisofs
-should be able to create HFS hybrid images over 4Gb, although this has not
-been fully tested.
-
-.SH "SEE ALSO
-.BR wodim (1),
-.BR mkzftree (8),
-.BR magic (5),
-.BR apple_driver (8).
-
-.SH "FUTURE IMPROVEMENTS
-Some sort of gui interface.
-.SH AVAILABILITY
-.B m\&kisofs
-is available as part of the cdrkit package from
-http://alioth.debian.org/projects/debburn/. For other implementations/spinoffs
-of mkisofs, look at the homepage of the particular developers.
-.B hfsutils
-from ftp://ftp.mars.org/pub/hfs
-.SH "MAILING LISTS
-If you want to actively take part on the development of m\&kisofs,
-you may join the Cdrkit developers mailing list by following the instructions on:
-.nf
-.sp
-https://alioth.debian.org/mail/?group_id=31006	
-.sp
-.fi
-and include the word
-.I subscribe
-in the body.
-The mail address of the list is:
-.nf
-.B
-debburn-devel at lists.alioth.debian.org
-.fi
-
-.SH MAINTAINER
-.PP
-This is the Cdrkit spinoff of the original mkisofs application. Maintained by:
-.nf
-Joerg Jaspert
-Eduard Bloch
-Steve McIntyre
-Ben Hutchings
-and other contributors
-.PP
-Cdrkit implementation of mkisofs is derived from the Cdrtools package [1] (however
-now developed independently), having previous maintainers:
-.PP
-.nf
-J\*org Schilling
-Seestr. 110
-D-13353 Berlin
-Germany
-.fi
-.PP
-.nf
-James Pearson (HFS MKHYBRID MAINTAINER)
-j.pearson at ge.ucl.ac.uk
-
-.PP
-If you have support questions, send them to:
-.PP
-.B
-debburn-devel at lists.alioth.debian.org
-
-.PP
-Note that Cdrkit is not affiliated to Cdrtools and vice versa.
-
-.SH ACKNOWLEDGEMENTS
-UNIX is a registered trademark of The Open Group in the US and other countries.
-
-.SH SOURCES
-.PP
-.br
-[1] Cdrtools 2.01.01a08 from May 2006, http://cdrecord.berlios.de
-

Deleted: cdrkit/trunk/mkisoimage/mkisofs.c
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisofs.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,3769 +0,0 @@
-/*
- * 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.
- *
- */
-
-/*
- *
- * Patched version with stuff from the Debian's cdrtools.
- * Replaced various warnings/disclaimers with more simple ones.
- *
- * Eduard Bloch <blade at debian.org>
-*/
-/* @(#)mkisofs.c	1.167 06/01/30 joerg */
-#ifndef lint
-static	char sccsid[] =
-	"@(#)mkisofs.c	1.167 06/01/30 joerg";
-#endif
-/*
- * Program mkisofs.c - generate iso9660 filesystem  based upon directory
- * tree on hard disk.
- *
- * Written by Eric Youngdale (1993).
- *
- * Copyright 1993 Yggdrasil Computing, Incorporated
- * Copyright (c) 1999,2000-2004 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 at ge.ucl.ac.uk 22/2/2000 */
-
-#include <mconfig.h>
-#include "mkisofs.h"
-#include <errno.h>
-#include <timedefs.h>
-#include <fctldefs.h>
-#include <ctype.h>
-#include "match.h"
-#include "exclude.h"
-#include <unls.h>	/* For UNICODE translation */
-#include <schily.h>
-#ifdef UDF
-#include "udf.h"
-#endif
-
-#ifdef	NEED_O_BINARY
-#include <io.h>					/* for setmode() prototype */
-#endif
-
-#include "getopt.h"	/* Always include local (nonstandard) getopt.h */
-
-#ifdef VMS
-#include "vms.h"
-#endif
-
-#ifdef	no_more_needed
-#ifdef __NetBSD__
-#include <sys/resource.h>
-#endif
-#endif	/* no_more_needed */
-
-#ifdef USE_ICONV
-#include <locale.h>
-#include <langinfo.h>
-#endif
-
-struct directory *root = NULL;
-int		path_ind;
-
-char	version_string[] = "mkisofs 2.01.01a05-unofficial-iconv";
-
-char		*outfile;
-FILE		*discimage;
-unsigned int	next_extent	= 0;
-unsigned int	last_extent	= 0;
-unsigned int	session_start	= 0;
-unsigned int	path_table_size	= 0;
-unsigned int	path_table[4]	= {0, };
-unsigned int	path_blocks	= 0;
-
-
-unsigned int	jpath_table_size = 0;
-unsigned int	jpath_table[4]	= {0, };
-unsigned int	jpath_blocks	= 0;
-
-struct iso_directory_record root_record;
-struct iso_directory_record jroot_record;
-
-char	*extension_record = NULL;
-int	extension_record_extent = 0;
-int	extension_record_size = 0;
-
-/* These variables are associated with command line options */
-int	check_oldnames = 0;
-int	check_session = 0;
-int	use_eltorito = 0;
-int	hard_disk_boot = 0;
-int	not_bootable = 0;
-int	no_emul_boot = 0;
-int	load_addr = 0;
-int	load_size = 0;
-int	boot_info_table = 0;
-int	use_alphaboot = 0;
-int	use_sparcboot = 0;
-int	use_hppaboot = 0;
-int	use_mipsboot = 0;
-int	use_mipselboot = 0;
-int	use_sunx86boot = 0;
-int	use_genboot = 0;
-int	use_RockRidge = 0;
-int	use_XA = 0;
-int	osecsize = 0;	/* Output-sector size, 0 means default secsize 2048 */
-int	use_Joliet = 0;
-int	jlen = JMAX;	/* maximum Joliet file name length */
-int	verbose = 1;
-int	debug = 0;
-int	gui = 0;
-int	all_files = 1;	/* New default is to include all files */
-int	follow_links = 0;
-#ifdef	IS_CYGWIN
-int	cache_inodes = 0; /* Do not cache inodes on Cygwin by default */
-#else
-int	cache_inodes = 1; /* Cache inodes if OS has unique inodes */
-#endif
-int	rationalize = 0;
-int	rationalize_uid = 0;
-int	rationalize_gid = 0;
-int	rationalize_filemode = 0;
-int	rationalize_dirmode = 0;
-uid_t	uid_to_use = 0;		/* when rationalizing uid */
-gid_t	gid_to_use = 0;		/* when rationalizing gid */
-int	filemode_to_use = 0;	/* if non-zero, when rationalizing file mode */
-int	dirmode_to_use = 0;	/* if non-zero, when rationalizing dir mode */
-int	new_dir_mode = 0555;
-int	generate_tables = 0;
-int	dopad = 1;	/* Now default to do padding */
-int	print_size = 0;
-int	split_output = 0;
-char	*icharset = NULL;	/* input charset to convert to UNICODE */
-char	*ocharset = NULL;	/* output charset to convert from UNICODE */
-char	*preparer = PREPARER_DEFAULT;
-char	*publisher = PUBLISHER_DEFAULT;
-char	*appid = APPID_DEFAULT;
-char	*copyright = COPYRIGHT_DEFAULT;
-char	*biblio = BIBLIO_DEFAULT;
-char	*abstract = ABSTRACT_DEFAULT;
-char	*volset_id = VOLSET_ID_DEFAULT;
-char	*volume_id = VOLUME_ID_DEFAULT;
-char	*system_id = SYSTEM_ID_DEFAULT;
-char	*boot_catalog = BOOT_CATALOG_DEFAULT;
-char	*boot_image = BOOT_IMAGE_DEFAULT;
-char	*genboot_image = BOOT_IMAGE_DEFAULT;
-int	ucs_level = 3;		/* We now have Unicode tables so use level 3 */
-int	volume_set_size = 1;
-int	volume_sequence_number = 1;
-
-struct eltorito_boot_entry_info *first_boot_entry = NULL;
-struct eltorito_boot_entry_info *last_boot_entry = NULL;
-struct eltorito_boot_entry_info *current_boot_entry = NULL;
-
-int	use_graft_ptrs;		/* Use graft points */
-int	jhide_trans_tbl;	/* Hide TRANS.TBL from Joliet tree */
-int	hide_rr_moved;		/* Name RR_MOVED .rr_moved in Rock Ridge tree */
-int	omit_period = 0;	/* Violates iso9660, but these are a pain */
-int	transparent_compression = 0; /* So far only works with linux */
-int	omit_version_number = 0; /* May violate iso9660, but noone uses vers */
-int	no_rr = 0;		/* Do not use RR attributes from old session */
-int	force_rr = 0;		/* Force to use RR attributes from old session */
-Uint	RR_relocation_depth = 6; /* Violates iso9660, but most systems work */
-int	iso9660_level = 1;
-int	iso9660_namelen = LEN_ISONAME; /* 31 characters, may be set to 37 */
-int	full_iso9660_filenames = 0; /* Full 31 character iso9660 filenames */
-int	relaxed_filenames = 0;	/* For Amiga.  Disc will not work with DOS */
-int	allow_lowercase = 0;	/* Allow lower case letters */
-int	allow_multidot = 0;	/* Allow more than on dot in filename */
-int	iso_translate = 1;	/* 1 == enables '#', '-' and '~' removal */
-int	allow_leading_dots = 0;	/* DOS cannot read names with leading dots */
-#ifdef	VMS
-int	use_fileversion = 1;	/* Use file version # from filesystem */
-#else
-int	use_fileversion = 0;	/* Use file version # from filesystem */
-#endif
-int	split_SL_component = 1;	/* circumvent a bug in the SunOS driver */
-int	split_SL_field = 1;	/* circumvent a bug in the SunOS */
-char	*trans_tbl = "TRANS.TBL"; /* default name for translation table */
-int	stream_media_size = 0;	/* # of blocks on the media */
-char	*stream_filename = "STREAM.IMG;1"; /* Default stream file name */
-
-#ifdef APPLE_HYB
-int	apple_hyb = 0;		/* create HFS hybrid flag */
-int	apple_ext = 0;		/* create HFS extensions flag */
-int	apple_both = 0;		/* common flag (for above) */
-int	hfs_extra = 0;		/* extra HFS blocks added to end of ISO vol */
-int	use_mac_name = 0;	/* use Mac name for ISO/Joliet/RR flag */
-hce_mem	*hce;			/* libhfs/mkisofs extras */
-char	*hfs_boot_file = 0;	/* name of HFS boot file */
-int	gen_pt = 0;		/* generate HFS partition table */
-char	*autoname = 0;		/* AutoStart filename */
-char	*magic_filename = 0;	/* name of magic file */
-int	probe = 0;		/* search files for HFS/Unix type */
-int	nomacfiles = 0;		/* don't look for Mac/Unix files */
-int	hfs_select = 0;		/* Mac/Unix types to select */
-int	create_dt = 1;		/* create the Desktp files */
-int	afe_size = 0;		/* Apple File Exchange block size */
-int	hfs_last = MAG_LAST;	/* process magic file after map file */
-char	*deftype = APPLE_TYPE_DEFAULT;	/* default Apple TYPE */
-char	*defcreator = APPLE_CREATOR_DEFAULT;	/* default Apple CREATOR */
-char	*hfs_volume_id = NULL;	/* HFS volume ID */
-int	icon_pos = 0;		/* Keep icon position */
-char	*hfs_icharset = NULL;	/* input HFS charset name */
-char    *hfs_ocharset = NULL;	/* output HFS charset name */
-int	hfs_lock = 1;		/* lock HFS volume (read-only) */
-char	*hfs_bless = NULL;	/* name of folder to 'bless' (System Folder) */
-char	*hfs_parms = NULL;	/* low level HFS parameters */
-
-#ifdef PREP_BOOT
-char	*prep_boot_image[4];
-int	use_prep_boot = 0;
-int	use_chrp_boot = 0;
-#endif	/* PREP_BOOT */
-#endif	/* APPLE_HYB */
-
-#ifdef UDF
-int	use_udf = 0;
-#endif
-
-#ifdef DVD_VIDEO
-int	dvd_video = 0;
-#endif
-
-#ifdef SORTING
-int	do_sort = 0;		/* sort file data */
-#endif /* SORTING */
-
-#ifdef USE_ICONV
-int   iconv_possible;
-#endif
-
-struct unls_table *in_nls = NULL;  /* input UNICODE conversion table */
-struct unls_table *out_nls = NULL; /* output UNICODE conversion table */
-#ifdef APPLE_HYB
-struct unls_table *hfs_inls = NULL; /* input HFS UNICODE conversion table */
-struct unls_table *hfs_onls = NULL; /* output HFS UNICODE conversion table */
-#endif /* APPLE_HYB */
-
-struct rcopts {
-	char		*tag;
-	char		**variable;
-};
-
-struct rcopts rcopt[] = {
-	{"PREP", &preparer},
-	{"PUBL", &publisher},
-	{"APPI", &appid},
-	{"COPY", &copyright},
-	{"BIBL", &biblio},
-	{"ABST", &abstract},
-	{"VOLS", &volset_id},
-	{"VOLI", &volume_id},
-	{"SYSI", &system_id},
-#ifdef APPLE_HYB
-	{"HFS_TYPE", &deftype},
-	{"HFS_CREATOR", &defcreator},
-#endif	/* APPLE_HYB */
-	{NULL, NULL}
-};
-
-/*
- * In case it isn't obvious, the option handling code was ripped off
- * from GNU-ld.
- */
-struct ld_option {
-	/* The long option information.  */
-	struct option	opt;
-	/* The short option with the same meaning ('\0' if none).  */
-	char		shortopt;
-	/* The name of the argument (NULL if none).  */
-	const char	*arg;
-	/*
-	 * The documentation string.  If this is NULL, this is a synonym for
-	 * the previous option.
-	 */
-	const char	*doc;
-	enum {
-		/* Use one dash before long option name.  */
-		ONE_DASH,
-		/* Use two dashes before long option name.  */
-		TWO_DASHES,
-		/* Don't mention this option in --help output.  */
-		NO_HELP
-	} control;
-};
-
-/*
- * Codes used for the long options with no short synonyms. Note that all these
- * values must not be ASCII or EBCDIC.
- */
-#define	OPTION_HELP			1000
-#define	OPTION_QUIET			1001
-#define	OPTION_NOSPLIT_SL_COMPONENT	1002
-#define	OPTION_NOSPLIT_SL_FIELD		1003
-#define	OPTION_PRINT_SIZE		1004
-#define	OPTION_SPLIT_OUTPUT		1005
-#define	OPTION_ABSTRACT			1006
-#define	OPTION_BIBLIO			1007
-#define	OPTION_COPYRIGHT		1008
-#define	OPTION_SYSID			1009
-#define	OPTION_VOLSET			1010
-#define	OPTION_VOLSET_SIZE		1011
-#define	OPTION_VOLSET_SEQ_NUM		1012
-#define	OPTION_I_HIDE			1013
-#define	OPTION_J_HIDE			1014
-#define	OPTION_LOG_FILE			1015
-#define	OPTION_PVERSION			1016
-#define	OPTION_NOBAK			1017
-#define	OPTION_SPARCLABEL		1018
-#define	OPTION_HARD_DISK_BOOT		1019
-#define	OPTION_NO_EMUL_BOOT		1020
-#define	OPTION_NO_BOOT			1021
-#define	OPTION_BOOT_LOAD_ADDR		1022
-#define	OPTION_BOOT_LOAD_SIZE		1023
-#define	OPTION_BOOT_INFO_TABLE		1024
-#define	OPTION_HIDE_TRANS_TBL		1025
-#define	OPTION_HIDE_RR_MOVED		1026
-#define	OPTION_GUI			1027
-#define	OPTION_TRANS_TBL		1028
-#define	OPTION_P_LIST			1029
-#define	OPTION_I_LIST			1030
-#define	OPTION_J_LIST			1031
-#define	OPTION_X_LIST			1032
-#define	OPTION_NO_RR			1033
-#define	OPTION_JCHARSET			1034
-#define	OPTION_PAD			1035
-#define	OPTION_H_HIDE			1036
-#define	OPTION_H_LIST			1037
-#define	OPTION_CHECK_OLDNAMES		1038
-
-#ifdef SORTING
-#define	OPTION_SORT			1039
-#endif /* SORTING */
-#define	OPTION_UCS_LEVEL		1040
-#define	OPTION_ISO_TRANSLATE		1041
-#define	OPTION_ISO_LEVEL		1042
-#define	OPTION_RELAXED_FILENAMES	1043
-#define	OPTION_ALLOW_LOWERCASE		1044
-#define	OPTION_ALLOW_MULTIDOT		1045
-#define	OPTION_USE_FILEVERSION		1046
-#define	OPTION_MAX_FILENAMES		1047
-#define	OPTION_ALT_BOOT			1048
-#define	OPTION_USE_GRAFT		1049
-
-#define	OPTION_INPUT_CHARSET		1050
-#define	OPTION_OUTPUT_CHARSET		1051
-
-#define	OPTION_NOPAD			1052
-#define	OPTION_UID			1053
-#define	OPTION_GID			1054
-#define	OPTION_FILEMODE			1055
-#define	OPTION_DIRMODE			1056
-#define	OPTION_NEW_DIR_MODE		1057
-#define	OPTION_CACHE_INODES		1058
-#define	OPTION_NOCACHE_INODES		1059
-
-#define	OPTION_CHECK_SESSION		1060
-#define	OPTION_FORCE_RR			1061
-
-#define	OPTION_DEBUG			1062
-
-#define	OPTION_JLONG			1063
-
-#define	OPTION_STREAM_FILE_NAME		1064
-#define	OPTION_STREAM_CD_SIZE		1065
-
-#define	OPTION_XA			1066
-#define	OPTION_XA_RATIONALIZED		1067
-
-#define	OPTION_SUNX86BOOT		1068
-#define	OPTION_SUNX86LABEL		1069
-
-#define	OPTION_ALLOW_LEADING_DOTS	1070
-#define	OPTION_PUBLISHER		1071
-
-#ifdef		JIGDO_TEMPLATE
-#define	OPTION_JTT_OUTPUT		1101
-#define	OPTION_JTJ_OUTPUT		1102
-#define	OPTION_JT_MIN_SIZE		1103
-#define	OPTION_JT_PATH_MAP		1104
-#define	OPTION_JT_MD5_LIST		1105
-#define	OPTION_JT_INCLUDE		1106
-#define	OPTION_JT_EXCLUDE		1107
-#endif
-
-#define	OPTION_BOOTALPHA		1200
-
-#define	OPTION_HPPA_CMDLINE 		1210
-#define	OPTION_HPPA_KERNEL_32   	1211
-#define	OPTION_HPPA_KERNEL_64   	1212
-#define	OPTION_HPPA_BOOTLOADER  	1213
-#define	OPTION_HPPA_RAMDISK     	1214
-
-#define	OPTION_BOOTMIPS     		1220
-
-#define	OPTION_BOOTMIPSEL   		1230
-
-#ifdef UDF
-#define	OPTION_UDF			1500
-#endif
-#ifdef DVD_VIDEO
-#define	OPTION_DVD			1501
-#endif
-
-#ifdef APPLE_HYB
-#define	OPTION_CAP			2000
-#define	OPTION_NETA			2001
-#define	OPTION_DBL			2002
-#define	OPTION_ESH			2003
-#define	OPTION_FE			2004
-#define	OPTION_SGI			2005
-#define	OPTION_MBIN			2006
-#define	OPTION_SGL			2007
-/* aliases */
-#define	OPTION_USH			2008
-#define	OPTION_XIN			2009
-
-#define	OPTION_DAVE			2010
-#define	OPTION_SFM			2011
-#define	OPTION_XDBL			2012
-#define	OPTION_XHFS			2013
-
-#define	OPTION_PROBE			2020
-#define	OPTION_MACNAME			2021
-#define	OPTION_NOMACFILES		2022
-#define	OPTION_BOOT_HFS_FILE		2023
-#define	OPTION_MAGIC_FILE		2024
-
-#define	OPTION_HFS_LIST			2025
-
-#define	OPTION_GEN_PT			2026
-
-#define	OPTION_CREATE_DT		2027
-#define	OPTION_HFS_HIDE			2028
-
-#define	OPTION_AUTOSTART		2029
-#define	OPTION_BSIZE			2030
-#define	OPTION_HFS_VOLID		2031
-#define	OPTION_PREP_BOOT		2032
-#define	OPTION_ICON_POS			2033
-
-#define	OPTION_HFS_TYPE			2034
-#define	OPTION_HFS_CREATOR		2035
-
-#define	OPTION_ROOT_INFO		2036
-
-#define	OPTION_HFS_INPUT_CHARSET	2037
-#define	OPTION_HFS_OUTPUT_CHARSET	2038
-
-#define	OPTION_HFS_UNLOCK		2039
-#define	OPTION_HFS_BLESS		2040
-#define	OPTION_HFS_PARMS		2041
-
-#define	OPTION_CHRP_BOOT		2042
-
-#define	OPTION_RELOC_ROOT		2043
-#define	OPTION_RELOC_OLD_ROOT		2044
-
-#define	OPTION_MAP_FILE			2045
-
-#endif	/* APPLE_HYB */
-
-static int	save_pname = 0;
-
-static const struct ld_option ld_options[] =
-{
-	{{"nobak", no_argument, NULL, OPTION_NOBAK},
-	'\0', NULL, "Do not include backup files", ONE_DASH},
-	{{"no-bak", no_argument, NULL, OPTION_NOBAK},
-	'\0', NULL, "Do not include backup files", ONE_DASH},
-	{{"abstract", required_argument, NULL, OPTION_ABSTRACT},
-	'\0', "FILE", "Set Abstract filename", ONE_DASH},
-	{{"appid", required_argument, NULL, 'A'},
-	'A', "ID", "Set Application ID", ONE_DASH},
-	{{"biblio", required_argument, NULL, OPTION_BIBLIO},
-	'\0', "FILE", "Set Bibliographic filename", ONE_DASH},
-	{{"cache-inodes", no_argument, NULL, OPTION_CACHE_INODES},
-	'\0', NULL, "Cache inodes (needed to detect hard links)", ONE_DASH},
-	{{"no-cache-inodes", no_argument, NULL, OPTION_NOCACHE_INODES},
-	'\0', NULL, "Do not cache inodes (if filesystem has no unique unides)", ONE_DASH},
-	{{"check-oldnames", no_argument, NULL, OPTION_CHECK_OLDNAMES},
-	'\0', NULL, "Check all imported ISO9660 names from old session", ONE_DASH},
-	{{"check-session", required_argument, NULL, OPTION_CHECK_SESSION},
-	'\0', "FILE", "Check all ISO9660 names from previous session", ONE_DASH},
-	{{"copyright", required_argument, NULL, OPTION_COPYRIGHT},
-	'\0', "FILE", "Set Copyright filename", ONE_DASH},
-	{{"debug", no_argument, NULL, OPTION_DEBUG},
-	'\0', NULL, "Set debug flag", ONE_DASH},
-	{{"eltorito-boot", required_argument, NULL, 'b'},
-	'b', "FILE", "Set El Torito boot image name", ONE_DASH},
-	{{"eltorito-alt-boot", no_argument, NULL, OPTION_ALT_BOOT},
-	'\0', NULL, "Start specifying alternative El Torito boot parameters", ONE_DASH},
-	{{"sparc-boot", required_argument, NULL, 'B'},
-	'B', "FILES", "Set sparc boot image names", ONE_DASH},
-	{{"sunx86-boot", required_argument, NULL, OPTION_SUNX86BOOT},
-	'\0', "FILES", "Set sunx86 boot image names", ONE_DASH},
-	{{"generic-boot", required_argument, NULL, 'G'},
-	'G', "FILE", "Set generic boot image name", ONE_DASH},
-	{{"sparc-label", required_argument, NULL, OPTION_SPARCLABEL},
-	'\0', "label text", "Set sparc boot disk label", ONE_DASH},
-	{{"sunx86-label", required_argument, NULL, OPTION_SUNX86LABEL},
-	'\0', "label text", "Set sunx86 boot disk label", ONE_DASH},
-	{{"eltorito-catalog", required_argument, NULL, 'c'},
-	'c', "FILE", "Set El Torito boot catalog name", ONE_DASH},
-	{{"cdrecord-params", required_argument, NULL, 'C'},
-	'C', "PARAMS", "Magic paramters from cdrecord", ONE_DASH},
-	{{"omit-period", no_argument, NULL, 'd'},
-	'd', NULL, "Omit trailing periods from filenames (violates ISO9660)", ONE_DASH},
-	{{"dir-mode", required_argument, NULL, OPTION_DIRMODE},
-	'\0', "mode", "Make the mode of all directories this mode.", ONE_DASH},
-	{{"disable-deep-relocation", no_argument, NULL, 'D'},
-	'D', NULL, "Disable deep directory relocation (violates ISO9660)", ONE_DASH},
-	{{"file-mode", required_argument, NULL, OPTION_FILEMODE},
-	'\0', "mode", "Make the mode of all plain files this mode.", ONE_DASH},
-	{{"follow-links", no_argument, NULL, 'f'},
-	'f', NULL, "Follow symbolic links", ONE_DASH},
-	{{"gid", required_argument, NULL, OPTION_GID},
-	'\0', "gid", "Make the group owner of all files this gid.",
-	ONE_DASH},
-	{{"graft-points", no_argument, NULL, OPTION_USE_GRAFT},
-	'\0', NULL, "Allow to use graft points for filenames", ONE_DASH},
-	{{"root", required_argument, NULL, OPTION_RELOC_ROOT},
-	'\0', "DIR", "Set root directory for all new files and directories", ONE_DASH},
-	{{"old-root", required_argument, NULL, OPTION_RELOC_OLD_ROOT},
-	'\0', "DIR", "Set root directory in previous session that is searched for files", ONE_DASH},
-	{{"help", no_argument, NULL, OPTION_HELP},
-	'\0', NULL, "Print option help", ONE_DASH},
-	{{"hide", required_argument, NULL, OPTION_I_HIDE},
-	'\0', "GLOBFILE", "Hide ISO9660/RR file", ONE_DASH},
-	{{"hide-list", required_argument, NULL, OPTION_I_LIST},
-	'\0', "FILE", "File with list of ISO9660/RR files to hide", ONE_DASH},
-	{{"hidden", required_argument, NULL, OPTION_H_HIDE},
-	'\0', "GLOBFILE", "Set hidden attribute on ISO9660 file", ONE_DASH},
-	{{"hidden-list", required_argument, NULL, OPTION_H_LIST},
-	'\0', "FILE", "File with list of ISO9660 files with hidden attribute", ONE_DASH},
-	{{"hide-joliet", required_argument, NULL, OPTION_J_HIDE},
-	'\0', "GLOBFILE", "Hide Joliet file", ONE_DASH},
-	{{"hide-joliet-list", required_argument, NULL, OPTION_J_LIST},
-	'\0', "FILE", "File with list of Joliet files to hide", ONE_DASH},
-	{{"hide-joliet-trans-tbl", no_argument, NULL, OPTION_HIDE_TRANS_TBL},
-	'\0', NULL, "Hide TRANS.TBL from Joliet tree", ONE_DASH},
-	{{"hide-rr-moved", no_argument, NULL, OPTION_HIDE_RR_MOVED},
-	'\0', NULL, "Rename RR_MOVED to .rr_moved in Rock Ridge tree", ONE_DASH},
-	{{"gui", no_argument, NULL, OPTION_GUI},
-	'\0', NULL, "Switch behaviour for GUI", ONE_DASH},
-	{{NULL, required_argument, NULL, 'i'},
-	'i', "ADD_FILES", "No longer supported", TWO_DASHES},
-	{{"input-charset", required_argument, NULL, OPTION_INPUT_CHARSET},
-	'\0', "CHARSET", "Local input charset for file name conversion", ONE_DASH},
-	{{"output-charset", required_argument, NULL, OPTION_OUTPUT_CHARSET},
-	'\0', "CHARSET", "Output charset for file name conversion", ONE_DASH},
-	{{"iso-level", required_argument, NULL, OPTION_ISO_LEVEL},
-	'\0', "LEVEL", "Set ISO9660 conformance level (1..3) or 4 for ISO9660 version 2", ONE_DASH},
-	{{"joliet", no_argument, NULL, 'J'},
-	'J', NULL, "Generate Joliet directory information", ONE_DASH},
-	{{"joliet-long", no_argument, NULL, OPTION_JLONG},
-	'\0', NULL, "Allow Joliet file names to be 103 Unicode characters", ONE_DASH},
-	{{"jcharset", required_argument, NULL, OPTION_JCHARSET},
-	'\0', "CHARSET", "Local charset for Joliet directory information", ONE_DASH},
-	{{"full-iso9660-filenames", no_argument, NULL, 'l'},
-	'l', NULL, "Allow full 31 character filenames for ISO9660 names", ONE_DASH},
-	{{"max-iso9660-filenames", no_argument, NULL, OPTION_MAX_FILENAMES},
-	'\0', NULL, "Allow 37 character filenames for ISO9660 names (violates ISO9660)", ONE_DASH},
-
-	{{"allow-leading-dots", no_argument, NULL, OPTION_ALLOW_LEADING_DOTS},
-	'\0', NULL, "Allow ISO9660 filenames to start with '.' (violates ISO9660)", ONE_DASH},
-	{{"ldots", no_argument, NULL, OPTION_ALLOW_LEADING_DOTS},
-	'\0', NULL, "Allow ISO9660 filenames to start with '.' (violates ISO9660)", ONE_DASH},
-
-/* POSIX.1-2001 REMOVE -----> */
-	{{"allow-leading-dots", no_argument, NULL, 'L'},
-	'L', NULL, "OLD Pre-POSIX.1-2001 option - don't use -L", ONE_DASH},
-/* -----> END POSIX.1-2001 REMOVE */
-
-	{{"log-file", required_argument, NULL, OPTION_LOG_FILE},
-	'\0', "LOG_FILE", "Re-direct messages to LOG_FILE", ONE_DASH},
-	{{"exclude", required_argument, NULL, 'm'},
-	'm', "GLOBFILE", "Exclude file name", ONE_DASH},
-	{{"exclude-list", required_argument, NULL, OPTION_X_LIST},
-	'\0', "FILE", "File with list of file names to exclude", ONE_DASH},
-	{{"pad", no_argument, NULL, OPTION_PAD},
-	0, NULL, "Pad output to a multiple of 32k (default)", ONE_DASH},
-	{{"no-pad", no_argument, NULL, OPTION_NOPAD},
-	0, NULL, "Do not pad output to a multiple of 32k", ONE_DASH},
-	{{"prev-session", required_argument, NULL, 'M'},
-	'M', "FILE", "Set path to previous session to merge", ONE_DASH},
-	{{"dev", required_argument, NULL, 'M'},
-	'\0', "SCSIdev", "Set path to previous session to merge", ONE_DASH},
-	{{"omit-version-number", no_argument, NULL, 'N'},
-	'N', NULL, "Omit version number from ISO9660 filename (violates ISO9660)", ONE_DASH},
-	{{"new-dir-mode", required_argument, NULL, OPTION_NEW_DIR_MODE},
-	'\0', "mode", "Mode used when creating new directories.", ONE_DASH},
-	{{"force-rr", no_argument, NULL, OPTION_FORCE_RR},
-	0, NULL, "Inhibit automatic Rock Ridge detection for previous session", ONE_DASH},
-	{{"no-rr", no_argument, NULL, OPTION_NO_RR},
-	0, NULL, "Inhibit reading of Rock Ridge attributes from previous session", ONE_DASH},
-	{{"no-split-symlink-components", no_argument, NULL, OPTION_NOSPLIT_SL_COMPONENT},
-	0, NULL, "Inhibit splitting symlink components", ONE_DASH},
-	{{"no-split-symlink-fields", no_argument, NULL, OPTION_NOSPLIT_SL_FIELD},
-	0, NULL, "Inhibit splitting symlink fields", ONE_DASH},
-	{{"output", required_argument, NULL, 'o'},
-	'o', "FILE", "Set output file name", ONE_DASH},
-	{{"path-list", required_argument, NULL, OPTION_P_LIST},
-	'\0', "FILE", "File with list of pathnames to process", ONE_DASH},
-	{{"preparer", required_argument, NULL, 'p'},
-	'p', "PREP", "Set Volume preparer", ONE_DASH},
-	{{"print-size", no_argument, NULL, OPTION_PRINT_SIZE},
-	'\0', NULL, "Print estimated filesystem size and exit", ONE_DASH},
-	{{"publisher", required_argument, NULL, OPTION_PUBLISHER},
-	'\0', "PUB", "Set Volume publisher", ONE_DASH},
-/* POSIX.1-2001 REMOVE -----> */
-	{{"publisher", required_argument, NULL, 'P'},
-	'P', "PUB", "OLD Pre-POSIX.1-2001 option - don't use -P", ONE_DASH},
-/* -----> END POSIX.1-2001 REMOVE */
-	{{"quiet", no_argument, NULL, OPTION_QUIET},
-	'\0', NULL, "Run quietly", ONE_DASH},
-	{{"rational-rock", no_argument, NULL, 'r'},
-	'r', NULL, "Generate rationalized Rock Ridge directory information", ONE_DASH},
-	{{"rock", no_argument, NULL, 'R'},
-	'R', NULL, "Generate Rock Ridge directory information", ONE_DASH},
-	{{"sectype", required_argument, NULL, 's'},
-	's', "TYPE", "Set output sector type to e.g. data/xa1/raw", ONE_DASH},
-
-	{{"alpha-boot", required_argument, NULL, OPTION_BOOTALPHA},
-	'\0', "FILE", "Set alpha boot image name (relative to image root)", ONE_DASH},
-
-	{{"hppa-cmdline", required_argument, NULL, OPTION_HPPA_CMDLINE},
-	'\0', "CMDLINE", "Set hppa boot command line (relative to image root)", ONE_DASH},
-	{{"hppa-kernel-32", required_argument, NULL, OPTION_HPPA_KERNEL_32},
-	'\0', "FILE", "Set hppa 32-bit image name (relative to image root)", ONE_DASH},
-	{{"hppa-kernel-64", required_argument, NULL, OPTION_HPPA_KERNEL_64},
-	'\0', "FILE", "Set hppa 64-bit image name (relative to image root)", ONE_DASH},
-	{{"hppa-bootloader", required_argument, NULL, OPTION_HPPA_BOOTLOADER},
-	'\0', "FILE", "Set hppa boot loader file name (relative to image root)", ONE_DASH},
-	{{"hppa-ramdisk", required_argument, NULL, OPTION_HPPA_RAMDISK},
-	'\0', "FILE", "Set hppa ramdisk file name (relative to image root)", ONE_DASH},
-
-	{{"mips-boot", required_argument, NULL, OPTION_BOOTMIPS},
-	'\0', "FILE", "Set mips boot image name (relative to image root)", ONE_DASH},
-
-	{{"mipsel-boot", required_argument, NULL, OPTION_BOOTMIPSEL},
-	'\0', "FILE", "Set mipsel boot image name (relative to image root)", ONE_DASH},
-
-#ifdef JIGDO_TEMPLATE
-	{{"jigdo-jigdo", required_argument, NULL, OPTION_JTJ_OUTPUT},
-	'\0', "FILE", "Produce a jigdo .jigdo file as well as the .iso", ONE_DASH },
-	{{"jigdo-template", required_argument, NULL, OPTION_JTT_OUTPUT},
-	'\0', "FILE", "Produce a jigdo .template file as well as the .iso", ONE_DASH },
-	{{"jigdo-min-file-size", required_argument, NULL, OPTION_JT_MIN_SIZE},
-	'\0', "SIZE", "Minimum size for a file to be listed in the jigdo file", ONE_DASH },
-	{{"jigdo-force-md5", required_argument, NULL, OPTION_JT_INCLUDE},
-	'\0', "PATTERN", "Pattern(s) where files MUST match an externally-supplied MD5sum", ONE_DASH },
-	{{"jigdo-exclude", required_argument, NULL, OPTION_JT_EXCLUDE},
-	'\0', "PATTERN", "Pattern(s) to exclude from the jigdo file", ONE_DASH },
-	{{"jigdo-map", required_argument, NULL, OPTION_JT_PATH_MAP},
-	'\0', "PATTERN1=PATTERN2", "Pattern(s) to map paths (e.g. Debian=/mirror/debian)", ONE_DASH },
-	{{"md5-list", required_argument, NULL, OPTION_JT_MD5_LIST},
-	'\0', "FILE", "File containing MD5 sums of the files that should be checked", ONE_DASH },
-#endif
-
-#ifdef SORTING
-	{ {"sort", required_argument, NULL, OPTION_SORT},
-	'\0', "FILE", "Sort file content locations according to rules in FILE", ONE_DASH },
-#endif /* SORTING */
-
-	{{"split-output", no_argument, NULL, OPTION_SPLIT_OUTPUT},
-	'\0', NULL, "Split output into files of approx. 1GB size", ONE_DASH},
-	{{"stream-file-name", required_argument, NULL, OPTION_STREAM_FILE_NAME},
-	'\0', "FILE_NAME", "Set the stream file ISO9660 name (incl. version)", ONE_DASH},
-	{{"stream-media-size", required_argument, NULL, OPTION_STREAM_CD_SIZE},
-	'\0', "#", "Set the size of your CD media in sectors", ONE_DASH},
-	{{"sysid", required_argument, NULL, OPTION_SYSID},
-	'\0', "ID", "Set System ID", ONE_DASH},
-	{{"translation-table", no_argument, NULL, 'T'},
-	'T', NULL, "Generate translation tables for systems that don't understand long filenames", ONE_DASH},
-	{{"table-name", required_argument, NULL, OPTION_TRANS_TBL},
-	'\0', "TABLE_NAME", "Translation table file name", ONE_DASH},
-	{{"ucs-level", required_argument, NULL, OPTION_UCS_LEVEL},
-	'\0', "LEVEL", "Set Joliet UCS level (1..3)", ONE_DASH},
-
-#ifdef UDF
-	{{"udf", no_argument, NULL, OPTION_UDF},
-	'\0', NULL, "Generate UDF file system", ONE_DASH},
-#endif
-
-#ifdef DVD_VIDEO
-	{{"dvd-video", no_argument, NULL, OPTION_DVD},
-	'\0', NULL, "Generate DVD-Video compliant UDF file system", ONE_DASH},
-#endif
-
-	{{"uid", required_argument, NULL, OPTION_UID},
-	'\0', "uid", "Make the owner of all files this uid.",
-	ONE_DASH},
-	{{"untranslated-filenames", no_argument, NULL, 'U'},
-	/* CSTYLED */
-	'U', NULL, "Allow Untranslated filenames (for HPUX & AIX - violates ISO9660). Forces -l, -d, -N, -allow-leading-dots, -relaxed-filenames, -allow-lowercase, -allow-multidot", ONE_DASH},
-	{{"relaxed-filenames", no_argument, NULL, OPTION_RELAXED_FILENAMES},
-	'\0', NULL, "Allow 7 bit ASCII except lower case characters (violates ISO9660)", ONE_DASH},
-	{{"no-iso-translate", no_argument, NULL, OPTION_ISO_TRANSLATE},
-	'\0', NULL, "Do not translate illegal ISO characters '~', '-' and '#' (violates ISO9660)", ONE_DASH},
-	{{"allow-lowercase", no_argument, NULL, OPTION_ALLOW_LOWERCASE},
-	'\0', NULL, "Allow lower case characters in addition to the current character set (violates ISO9660)", ONE_DASH},
-	{{"allow-multidot", no_argument, NULL, OPTION_ALLOW_MULTIDOT},
-	'\0', NULL, "Allow more than one dot in filenames (e.g. .tar.gz) (violates ISO9660)", ONE_DASH},
-	{{"use-fileversion", no_argument, NULL, OPTION_USE_FILEVERSION},
-	'\0', "LEVEL", "Use file version # from filesystem", ONE_DASH},
-	{{"verbose", no_argument, NULL, 'v'},
-	'v', NULL, "Verbose", ONE_DASH},
-	{{"version", no_argument, NULL, OPTION_PVERSION},
-	'\0', NULL, "Print the current version", ONE_DASH},
-	{{"volid", required_argument, NULL, 'V'},
-	'V', "ID", "Set Volume ID", ONE_DASH},
-	{{"volset", required_argument, NULL, OPTION_VOLSET},
-	'\0', "ID", "Set Volume set ID", ONE_DASH},
-	{{"volset-size", required_argument, NULL, OPTION_VOLSET_SIZE},
-	'\0', "#", "Set Volume set size", ONE_DASH},
-	{{"volset-seqno", required_argument, NULL, OPTION_VOLSET_SEQ_NUM},
-	'\0', "#", "Set Volume set sequence number", ONE_DASH},
-	{{"old-exclude", required_argument, NULL, 'x'},
-	'x', "FILE", "Exclude file name(depreciated)", ONE_DASH},
-	{{"hard-disk-boot", no_argument, NULL, OPTION_HARD_DISK_BOOT},
-	'\0', NULL, "Boot image is a hard disk image", ONE_DASH},
-	{{"no-emul-boot", no_argument, NULL, OPTION_NO_EMUL_BOOT},
-	'\0', NULL, "Boot image is 'no emulation' image", ONE_DASH},
-	{{"no-boot", no_argument, NULL, OPTION_NO_BOOT},
-	'\0', NULL, "Boot image is not bootable", ONE_DASH},
-	{{"boot-load-seg", required_argument, NULL, OPTION_BOOT_LOAD_ADDR},
-	'\0', "#", "Set load segment for boot image", ONE_DASH},
-	{{"boot-load-size", required_argument, NULL, OPTION_BOOT_LOAD_SIZE},
-	'\0', "#", "Set numbers of load sectors", ONE_DASH},
-	{{"boot-info-table", no_argument, NULL, OPTION_BOOT_INFO_TABLE},
-	'\0', NULL, "Patch boot image with info table", ONE_DASH},
-	{{"XA", no_argument, NULL, OPTION_XA},
-	'\0', NULL, "Generate XA directory attruibutes", ONE_DASH},
-	{{"xa", no_argument, NULL, OPTION_XA_RATIONALIZED},
-	'\0', NULL, "Generate rationalized XA directory attruibutes", ONE_DASH},
-	{{"transparent-compression", no_argument, NULL, 'z'},
-	'z', NULL, "Enable transparent compression of files", ONE_DASH},
-
-#ifdef APPLE_HYB
-	{{"hfs-type", required_argument, NULL, OPTION_HFS_TYPE},
-	'\0', "TYPE", "Set HFS default TYPE", ONE_DASH},
-	{{"hfs-creator", required_argument, NULL, OPTION_HFS_CREATOR},
-	'\0', "CREATOR", "Set HFS default CREATOR", ONE_DASH},
-	{{"apple", no_argument, NULL, 'g'},
-	'g', NULL, "Add Apple ISO9660 extensions", ONE_DASH},
-	{{"hfs", no_argument, NULL, 'h'},
-	'h', NULL, "Create ISO9660/HFS hybrid", ONE_DASH},
-	{{"map", required_argument, NULL, OPTION_MAP_FILE},
-	'\0', "MAPPING_FILE", "Map file extensions to HFS TYPE/CREATOR", ONE_DASH},
-/* POSIX.1-2001 REMOVE -----> */
-	{{"map", required_argument, NULL, 'H'},
-	'H', "MAPPING_FILE", "OLD Pre-POSIX.1-2001 option - don't use -H", ONE_DASH},
-/* -----> END POSIX.1-2001 REMOVE */
-	{{"magic", required_argument, NULL, OPTION_MAGIC_FILE},
-	'\0', "FILE", "Magic file for HFS TYPE/CREATOR", ONE_DASH},
-	{{"probe", no_argument, NULL, OPTION_PROBE},
-	'\0', NULL, "Probe all files for Apple/Unix file types", ONE_DASH},
-	{{"mac-name", no_argument, NULL, OPTION_MACNAME},
-	'\0', NULL, "Use Macintosh name for ISO9660/Joliet/RockRidge file name",
-	ONE_DASH},
-	{{"no-mac-files", no_argument, NULL, OPTION_NOMACFILES},
-	'\0', NULL, "Do not look for Unix/Mac files (depreciated)", ONE_DASH},
-	{{"boot-hfs-file", required_argument, NULL, OPTION_BOOT_HFS_FILE},
-	'\0', "FILE", "Set HFS boot image name", ONE_DASH},
-	{{"part", no_argument, NULL, OPTION_GEN_PT},
-	'\0', NULL, "Generate HFS partition table", ONE_DASH},
-	{{"cluster-size", required_argument, NULL, OPTION_BSIZE},
-	'\0', "SIZE", "Cluster size for PC Exchange Macintosh files", ONE_DASH},
-	{{"auto", required_argument, NULL, OPTION_AUTOSTART},
-	'\0', "FILE", "Set HFS AutoStart file name", ONE_DASH},
-	{{"no-desktop", no_argument, NULL, OPTION_CREATE_DT},
-	'\0', NULL, "Do not create the HFS (empty) Desktop files", ONE_DASH},
-	{{"hide-hfs", required_argument, NULL, OPTION_HFS_HIDE},
-	'\0', "GLOBFILE", "Hide HFS file", ONE_DASH},
-	{{"hide-hfs-list", required_argument, NULL, OPTION_HFS_LIST},
-	'\0', "FILE", "List of HFS files to hide", ONE_DASH},
-	{{"hfs-volid", required_argument, NULL, OPTION_HFS_VOLID},
-	'\0', "HFS_VOLID", "Volume name for the HFS partition", ONE_DASH},
-	{{"icon-position", no_argument, NULL, OPTION_ICON_POS},
-	'\0', NULL, "Keep HFS icon position", ONE_DASH},
-	{{"root-info", required_argument, NULL, OPTION_ROOT_INFO},
-	'\0', "FILE", "finderinfo for root folder", ONE_DASH},
-	{{"input-hfs-charset", required_argument, NULL, OPTION_HFS_INPUT_CHARSET},
-	'\0', "CHARSET", "Local input charset for HFS file name conversion", ONE_DASH},
-	{{"output-hfs-charset", required_argument, NULL, OPTION_HFS_OUTPUT_CHARSET},
-	'\0', "CHARSET", "Output charset for HFS file name conversion", ONE_DASH},
-	{{"hfs-unlock", no_argument, NULL, OPTION_HFS_UNLOCK},
-	'\0', NULL, "Leave HFS Volume unlocked", ONE_DASH},
-	{{"hfs-bless", required_argument, NULL, OPTION_HFS_BLESS},
-	'\0', "FOLDER_NAME", "Name of Folder to be blessed", ONE_DASH},
-	{{"hfs-parms", required_argument, NULL, OPTION_HFS_PARMS},
-	'\0', "PARAMETERS", "Comma separated list of HFS parameters", ONE_DASH},
-#ifdef PREP_BOOT
-	{{"prep-boot", required_argument, NULL, OPTION_PREP_BOOT},
-	'\0', "FILE", "PReP boot image file -- up to 4 are allowed", ONE_DASH},
-	{{"chrp-boot", no_argument, NULL, OPTION_CHRP_BOOT},
-	'\0', NULL, "Add CHRP boot header", ONE_DASH},
-#endif	/* PREP_BOOT */
-	{{"cap", no_argument, NULL, OPTION_CAP},
-	'\0', NULL, "Look for AUFS CAP Macintosh files", TWO_DASHES},
-	{{"netatalk", no_argument, NULL, OPTION_NETA},
-	'\0', NULL, "Look for NETATALK Macintosh files", TWO_DASHES},
-	{{"double", no_argument, NULL, OPTION_DBL},
-	'\0', NULL, "Look for AppleDouble Macintosh files", TWO_DASHES},
-	{{"ethershare", no_argument, NULL, OPTION_ESH},
-	'\0', NULL, "Look for Helios EtherShare Macintosh files", TWO_DASHES},
-	{{"exchange", no_argument, NULL, OPTION_FE},
-	'\0', NULL, "Look for PC Exchange Macintosh files", TWO_DASHES},
-	{{"sgi", no_argument, NULL, OPTION_SGI},
-	'\0', NULL, "Look for SGI Macintosh files", TWO_DASHES},
-	{{"macbin", no_argument, NULL, OPTION_MBIN},
-	'\0', NULL, "Look for MacBinary Macintosh files", TWO_DASHES},
-	{{"single", no_argument, NULL, OPTION_SGL},
-	'\0', NULL, "Look for AppleSingle Macintosh files", TWO_DASHES},
-	{{"ushare", no_argument, NULL, OPTION_USH},
-	'\0', NULL, "Look for IPT UShare Macintosh files", TWO_DASHES},
-	{{"xinet", no_argument, NULL, OPTION_XIN},
-	'\0', NULL, "Look for XINET Macintosh files", TWO_DASHES},
-	{{"dave", no_argument, NULL, OPTION_DAVE},
-	'\0', NULL, "Look for DAVE Macintosh files", TWO_DASHES},
-	{{"sfm", no_argument, NULL, OPTION_SFM},
-	'\0', NULL, "Look for SFM Macintosh files", TWO_DASHES},
-	{{"osx-double", no_argument, NULL, OPTION_XDBL},
-	'\0', NULL, "Look for MacOS X AppleDouble Macintosh files", TWO_DASHES},
-	{{"osx-hfs", no_argument, NULL, OPTION_XHFS},
-	'\0', NULL, "Look for MacOS X HFS Macintosh files", TWO_DASHES},
-#endif	/* APPLE_HYB */
-};
-
-#define	OPTION_COUNT (sizeof ld_options / sizeof (ld_options[0]))
-
-static	void	read_rcfile(char *appname);
-static	void	susage(int excode);
-static	void	usage(int excode);
-int	iso9660_date(char *result, time_t crtime);
-static	void	hide_reloc_dir(void);
-static	char *get_pnames(int argc, char **argv, int opt, char *pname, 
-								  int pnsize, FILE *fp);
-char *findgequal(char *s);
-static	char *escstrcpy(char *to, char *from);
-void *e_malloc(size_t size);
-
-static void
-read_rcfile(char *appname)
-{
-	FILE		*rcfile = (FILE *) NULL;
-	struct rcopts	*rco;
-	char		*pnt,
-			*pnt1;
-	char		linebuffer[256];
-	static char	rcfn[] = ".mkisofsrc";
-	char		filename[1000];
-	int		linum;
-
-	strcpy(filename, rcfn);
-	if (access(filename, R_OK) == 0)
-		rcfile = fopen(filename, "r");
-	if (!rcfile && errno != ENOENT)
-#ifdef	USE_LIBSCHILY
-		errmsg("Cannot open '%s'.\n", filename);
-#else
-		perror(filename);
-#endif
-
-	if (!rcfile) {
-		pnt = getenv("MKISOFSRC");
-		if (pnt && strlen(pnt) <= sizeof (filename)) {
-			strcpy(filename, pnt);
-			if (access(filename, R_OK) == 0)
-				rcfile = fopen(filename, "r");
-			if (!rcfile && errno != ENOENT)
-#ifdef	USE_LIBSCHILY
-				errmsg("Cannot open '%s'.\n", filename);
-#else
-				perror(filename);
-#endif
-		}
-	}
-	if (!rcfile) {
-		pnt = getenv("HOME");
-		if (pnt && strlen(pnt) + strlen(rcfn) + 2 <=
-							sizeof (filename)) {
-			strcpy(filename, pnt);
-			strcat(filename, "/");
-			strcat(filename, rcfn);
-			if (access(filename, R_OK) == 0)
-				rcfile = fopen(filename, "r");
-			if (!rcfile && errno != ENOENT)
-#ifdef	USE_LIBSCHILY
-				errmsg("Cannot open '%s'.\n", filename);
-#else
-				perror(filename);
-#endif
-		}
-	}
-	if (!rcfile && strlen(appname) + sizeof (rcfn) + 2 <=
-							sizeof (filename)) {
-		strcpy(filename, appname);
-		pnt = strrchr(filename, '/');
-		if (pnt) {
-			strcpy(pnt + 1, rcfn);
-			if (access(filename, R_OK) == 0)
-				rcfile = fopen(filename, "r");
-			if (!rcfile && errno != ENOENT)
-#ifdef	USE_LIBSCHILY
-				errmsg("Cannot open '%s'.\n", filename);
-#else
-				perror(filename);
-#endif
-		}
-	}
-	if (!rcfile)
-		return;
-	if (verbose > 0) {
-		fprintf(stderr, "Using \"%s\"\n", filename);
-	}
-	/* OK, we got it.  Now read in the lines and parse them */
-	linum = 0;
-	while (fgets(linebuffer, sizeof (linebuffer), rcfile)) {
-		char	*name;
-		char	*name_end;
-
-		++linum;
-		/* skip any leading white space */
-		pnt = linebuffer;
-		while (*pnt == ' ' || *pnt == '\t')
-			++pnt;
-		/*
-		 * If we are looking at a # character, this line is a comment.
-		 */
-		if (*pnt == '#')
-			continue;
-		/*
-		 * The name should begin in the left margin.  Make sure it is
-		 * in upper case.  Stop when we see white space or a comment.
-		 */
-		name = pnt;
-		while (*pnt && (isalpha((unsigned char) *pnt) || *pnt == '_')) {
-			if (islower((unsigned char) *pnt))
-				*pnt = toupper((unsigned char) *pnt);
-			pnt++;
-		}
-		if (name == pnt) {
-			fprintf(stderr, "%s:%d: name required\n", filename,
-					linum);
-			continue;
-		}
-		name_end = pnt;
-		/* Skip past white space after the name */
-		while (*pnt == ' ' || *pnt == '\t')
-			pnt++;
-		/* silently ignore errors in the rc file. */
-		if (*pnt != '=') {
-			fprintf(stderr, "%s:%d: equals sign required after '%.*s'\n",
-						filename, linum,
-						/* XXX Should not be > int */
-						(int)(name_end-name), name);
-			continue;
-		}
-		/* Skip pas the = sign, and any white space following it */
-		pnt++;	/* Skip past '=' sign */
-		while (*pnt == ' ' || *pnt == '\t')
-			pnt++;
-
-		/* now it is safe to NUL terminate the name */
-
-		*name_end = 0;
-
-		/* Now get rid of trailing newline */
-
-		pnt1 = pnt;
-		while (*pnt1) {
-			if (*pnt1 == '\n') {
-				*pnt1 = 0;
-				break;
-			}
-			pnt1++;
-		}
-		/* OK, now figure out which option we have */
-		for (rco = rcopt; rco->tag; rco++) {
-			if (strcmp(rco->tag, name) == 0) {
-				*rco->variable = strdup(pnt);
-				break;
-			}
-		}
-		if (rco->tag == NULL) {
-			fprintf(stderr, "%s:%d: field name \"%s\" unknown\n",
-				filename, linum,
-				name);
-		}
-	}
-	if (ferror(rcfile))
-#ifdef	USE_LIBSCHILY
-		errmsg("Read error on '%s'.\n", filename);
-#else
-		perror(filename);
-#endif
-	fclose(rcfile);
-}
-
-char	*path_table_l = NULL;
-char	*path_table_m = NULL;
-
-char	*jpath_table_l = NULL;
-char	*jpath_table_m = NULL;
-
-int	goof = 0;
-
-#ifndef TRUE
-#define	TRUE 1
-#endif
-
-#ifndef FALSE
-#define	FALSE 0
-#endif
-
-static void
-susage(int excode)
-{
-	const char	*program_name = "mkisofs";
-
-	fprintf(stderr, "Usage: %s [options] -o file directory ...\n", program_name);
-	fprintf(stderr, "\nUse %s -help\n", program_name);
-	fprintf(stderr, "to get a list of valid options.\n");
-	fprintf(stderr, 
-        "\nNOTE: This version of mkisofs differs from the one published by Eric Youngdale\n"
-        "and from the one included in cdrtools (by Joerg Schilling).\n"
-        "It provides a different set of features and has different problems.\n"
-        "Report errors to debburn-devel at lists.alioth.debian.org.\n");
-
-	exit(excode);
-}
-
-static void
-usage(int excode)
-{
-	const char	*program_name = "mkisofs";
-
-#if 0
-	fprintf(stderr, "Usage:\n");
-	fprintf(stderr,
-		"mkisofs [-o outfile] [-R] [-V volid] [-v] [-a] \
-[-T]\n [-l] [-d] [-V] [-D] [-L] [-p preparer]"
-		"[-P publisher] [ -A app_id ] [-z] \n \
-[-b boot_image_name] [-c boot_catalog-name] \
-[-x path -x path ...] path\n");
-#endif
-
-	int	i;
-
-/*	const char **targets, **pp;*/
-
-	fprintf(stderr, "Usage: %s [options] file...\n", program_name);
-
-	fprintf(stderr, "Options:\n");
-	for (i = 0; i < (int)OPTION_COUNT; i++) {
-		if (ld_options[i].doc != NULL) {
-			int	comma;
-			int	len;
-			int	j;
-
-			fprintf(stderr, "  ");
-
-			comma = FALSE;
-			len = 2;
-
-			j = i;
-			do {
-				if (ld_options[j].shortopt != '\0' &&
-					ld_options[j].control != NO_HELP) {
-					fprintf(stderr, "%s-%c",
-						comma ? ", " : "",
-						ld_options[j].shortopt);
-					len += (comma ? 2 : 0) + 2;
-					if (ld_options[j].arg != NULL) {
-						if (ld_options[j].opt.has_arg != optional_argument) {
-							fprintf(stderr, " ");
-							++len;
-						}
-						fprintf(stderr, "%s",
-							ld_options[j].arg);
-						len += strlen(ld_options[j].arg);
-					}
-					comma = TRUE;
-				}
-				++j;
-			}
-			while (j < (int)OPTION_COUNT && ld_options[j].doc == NULL);
-
-			j = i;
-			do {
-				if (ld_options[j].opt.name != NULL &&
-					ld_options[j].control != NO_HELP) {
-					fprintf(stderr, "%s-%s%s",
-						comma ? ", " : "",
-						ld_options[j].control == TWO_DASHES ? "-" : "",
-						ld_options[j].opt.name);
-					len += ((comma ? 2 : 0)
-						+ 1
-						+ (ld_options[j].control == TWO_DASHES ? 1 : 0)
-						+ strlen(ld_options[j].opt.name));
-					if (ld_options[j].arg != NULL) {
-						fprintf(stderr, " %s",
-							ld_options[j].arg);
-						len += 1 +
-						    strlen(ld_options[j].arg);
-					}
-					comma = TRUE;
-				}
-				++j;
-			}
-			while (j < (int)OPTION_COUNT && ld_options[j].doc == NULL);
-
-			if (len >= 30) {
-				fprintf(stderr, "\n");
-				len = 0;
-			}
-			for (; len < 30; len++)
-				fputc(' ', stderr);
-
-			fprintf(stderr, "%s\n", ld_options[i].doc);
-		}
-	}
-	fprintf(stderr, 
-        "\nNOTE: This version of mkisofs differs from the one published by Eric Youngdale\n"
-        "and from the one included in cdrtools (by Joerg Schilling).\n"
-        "It provides a different set of features and has different problems.\n"
-        "Report errors to debburn-devel at lists.alioth.debian.org.\n");
-	exit(excode);
-}
-
-
-/*
- * Fill in date in the iso9660 format
- *
- * The standards  state that the timezone offset is in multiples of 15
- * minutes, and is what you add to GMT to get the localtime.  The U.S.
- * is always at a negative offset, from -5h to -8h (can vary a little
- * with DST,  I guess).  The Linux iso9660 filesystem has had the sign
- * of this wrong for ages (mkisofs had it wrong too for the longest time).
- */
-int
-iso9660_date(char *result, time_t crtime)
-{
-	struct tm	*local;
-
-	local = localtime(&crtime);
-	result[0] = local->tm_year;
-	result[1] = local->tm_mon + 1;
-	result[2] = local->tm_mday;
-	result[3] = local->tm_hour;
-	result[4] = local->tm_min;
-	result[5] = local->tm_sec;
-
-	/*
-	 * Must recalculate proper timezone offset each time, as some files use
-	 * daylight savings time and some don't...
-	 */
-	result[6] = local->tm_yday;	/* save yday 'cause gmtime zaps it */
-	local = gmtime(&crtime);
-	local->tm_year -= result[0];
-	local->tm_yday -= result[6];
-	local->tm_hour -= result[3];
-	local->tm_min -= result[4];
-	if (local->tm_year < 0) {
-		local->tm_yday = -1;
-	} else {
-		if (local->tm_year > 0)
-			local->tm_yday = 1;
-	}
-
-	result[6] = -(local->tm_min + 60 *
-			(local->tm_hour + 24 * local->tm_yday)) / 15;
-
-	return (0);
-}
-
-/* hide "./rr_moved" if all its contents are hidden */
-static void
-hide_reloc_dir()
-{
-	struct directory_entry *s_entry;
-
-	for (s_entry = reloc_dir->contents; s_entry; s_entry = s_entry->next) {
-		if (strcmp(s_entry->name, ".") == 0 ||
-				strcmp(s_entry->name, "..") == 0)
-			continue;
-
-		if ((s_entry->de_flags & INHIBIT_ISO9660_ENTRY) == 0)
-			return;
-	}
-
-	/* all entries are hidden, so hide this directory */
-	reloc_dir->dir_flags |= INHIBIT_ISO9660_ENTRY;
-	reloc_dir->self->de_flags |= INHIBIT_ISO9660_ENTRY;
-}
-
-/*
- * get pathnames from the command line, and then from given file
- */
-static char *
-get_pnames(int argc, char **argv, int opt, char *pname, int pnsize, FILE *fp)
-{
-	int	len;
-
-	/* we may of already read the first line from the pathnames file */
-	if (save_pname) {
-		save_pname = 0;
-		return (pname);
-	}
-
-	if (opt < argc)
-		return (argv[opt]);
-
-	if (fp == NULL)
-		return ((char *) 0);
-
-	if (fgets(pname, pnsize, fp)) {
-		/* Discard newline */
-		len = strlen(pname);
-		if (pname[len - 1] == '\n') {
-			pname[len - 1] = '\0';
-		}
-		return (pname);
-	}
-	return ((char *) 0);
-}
-
-extern char	*cdrecord_data;
-
-int
-main(int argc, char *argv[])
-{
-	struct directory_entry de;
-
-#ifdef HAVE_SBRK
-	unsigned long	mem_start;
-
-#endif
-	struct stat	statbuf;
-	char		*merge_image = NULL;
-	char		*reloc_root = NULL;
-	char		*reloc_old_root = NULL;
-	struct iso_directory_record *mrootp = NULL;
-	struct output_fragment *opnt;
-	int		longind;
-	char		shortopts[OPTION_COUNT * 3 + 2];
-	struct option	longopts[OPTION_COUNT + 1];
-	int		c;
-	int		n;
-	char		*log_file = 0;
-	char		*node = NULL;
-	char		*pathnames = 0;
-	FILE		*pfp = NULL;
-	char		pname[2*PATH_MAX + 1 + 1];	/* may be too short */
-	char		*arg;				/* if '\\' present  */
-	char		nodename[PATH_MAX + 1];
-	int		no_path_names = 1;
-	int		warn_violate = 0;
-	int		have_cmd_line_pathspec = 0;
-	int		rationalize_all = 0;
-
-#ifdef APPLE_HYB
-	char		*afpfile = "";	/* mapping file for TYPE/CREATOR */
-	int		hfs_ct = 0;
-	char		*root_info = 0;
-#endif	/* APPLE_HYB */
-
-
-#ifdef __EMX__
-	/* This gives wildcard expansion with Non-Posix shells with EMX */
-	_wildcard(&argc, &argv);
-#endif
-	save_args(argc, argv);
-
-	if (argc < 2) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD, "Missing pathspec.\n");
-#endif
-		susage(1);
-	}
-	/* Get the defaults from the .mkisofsrc file */
-	read_rcfile(argv[0]);
-
-	outfile = NULL;
-
-	/*
-	 * Copy long option initialization from GNU-ld.
-	 */
-	/*
-	 * Starting the short option string with '-' is for programs that
-	 * expect options and other ARGV-elements in any order and that care
-	 * about the ordering of the two.  We describe each non-option
-	 * ARGV-element as if it were the argument of an option with
-	 * character code 1.
-	 */
-	{
-		int		i,
-				is,
-				il;
-
-		shortopts[0] = '-';
-		is = 1;
-		il = 0;
-		for (i = 0; i < (int)OPTION_COUNT; i++) {
-			if (ld_options[i].shortopt != '\0') {
-				shortopts[is] = ld_options[i].shortopt;
-				++is;
-				if (ld_options[i].opt.has_arg ==
-					required_argument ||
-					ld_options[i].opt.has_arg ==
-							optional_argument) {
-					shortopts[is] = ':';
-					++is;
-					if (ld_options[i].opt.has_arg ==
-							optional_argument) {
-						shortopts[is] = ':';
-						++is;
-					}
-				}
-			}
-			if (ld_options[i].opt.name != NULL) {
-				longopts[il] = ld_options[i].opt;
-				++il;
-			}
-		}
-		shortopts[is] = '\0';
-		longopts[il].name = NULL;
-	}
-
-	while ((c = getopt_long_only(argc, argv, shortopts,
-						longopts, &longind)) != EOF)
-		switch (c) {
-		case 1:
-			/* A filename that we take as input. */
-			optind--;
-			have_cmd_line_pathspec = 1;
-			goto parse_input_files;
-
-		case OPTION_USE_GRAFT:
-			use_graft_ptrs = 1;
-			break;
-		case 'C':
-			/*
-			 * This is a temporary hack until cdrecord gets the
-			 * proper hooks in it.
-			 */
-			cdrecord_data = optarg;
-			break;
-		case OPTION_GUI:
-			gui++;
-			break;
-		case 'i':
-#ifdef	USE_LIBSCHILY
-			comerrno(EX_BAD, "-i option no longer supported.\n");
-#else
-			fprintf(stderr, "-i option no longer supported.\n");
-			exit(1);
-#endif
-			break;
-		case OPTION_ISO_LEVEL:
-			iso9660_level = atoi(optarg);
-
-			switch (iso9660_level) {
-
-			case 1:
-				/*
-				 * Only on file section
-				 * 8.3 d or d1 characters for files
-				 * 8   d or d1 characters for directories
-				 */
-				break;
-			case 2:
-				/*
-				 * Only on file section
-				 */
-				break;
-			case 3:
-				/*
-				 * No restrictions
-				 */
-				break;
-			case 4:
-				/*
-				 * This is ISO-9660:1988 (ISO-9660 version 2)
-				 */
-				iso9660_namelen = MAX_ISONAME_V2; /* allow 207 chars */
-				full_iso9660_filenames++;	/* 31+ chars	*/
-				omit_version_number++;
-				RR_relocation_depth = 32767;
-
-				/*
-				 * From -U ...
-				 */
-				omit_period++;			/* trailing dot */
-				allow_leading_dots++;
-				relaxed_filenames++;		/* all chars	*/
-				allow_lowercase++;		/* even lowcase	*/
-				allow_multidot++;		/* > 1 dots	*/
-				break;
-
-			default:
-				comerrno(EX_BAD, "Illegal iso9660 Level %d, use 1..3 or 4.\n",
-							iso9660_level);
-			}
-			break;
-		case 'J':
-			use_Joliet++;
-			break;
-		case OPTION_JLONG:
-			use_Joliet++;
-			jlen = JLONGMAX;
-			break;
-		case OPTION_JCHARSET:
-			use_Joliet++;
-			/* FALLTHROUGH */
-		case OPTION_INPUT_CHARSET:
-			icharset = optarg;
-			break;
-		case OPTION_OUTPUT_CHARSET:
-			ocharset = optarg;
-			break;
-#ifdef JIGDO_TEMPLATE
-		case OPTION_JTT_OUTPUT:
-			jtemplate_out = optarg;
-			break;
-		case OPTION_JTJ_OUTPUT:
-			jjigdo_out = optarg;
-			break;
-		case OPTION_JT_MD5_LIST:
-			jmd5_list = optarg;
-			break;
-		case OPTION_JT_MIN_SIZE:
-			jte_min_size = atoi(optarg);
-			if (jte_min_size < MIN_JIGDO_FILE_SIZE) {
-				fprintf(stderr, "Jigdo min size %d too small; using default %d instead\n", jte_min_size, MIN_JIGDO_FILE_SIZE);
-				jte_min_size = MIN_JIGDO_FILE_SIZE;
-			}
-			break;
-		case OPTION_JT_INCLUDE:
-			if (jte_add_include(optarg)) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				         "Failed to build jigdo-include list\n");
-#else
-				fprintf(stderr,
-				        "Failed to build jigdo-include list\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_JT_EXCLUDE:
-			if (jte_add_exclude(optarg)) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				         "Failed to build jigdo-exclude list\n");
-#else
-				fprintf(stderr,
-				        "Failed to build jigdo-exclude list\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_JT_PATH_MAP:
-			if (jte_add_mapping(optarg)) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				         "Failed to build jigdo mapping list\n");
-#else
-				fprintf(stderr,
-				        "Failed to build jigdo mapping list\n");
-				exit(1);
-#endif
-			}
-			break;
-#endif /* JIGDO_TEMPLATE */
-		case OPTION_NOBAK:
-			all_files = 0;
-			break;
-		case 'b':
-			do_sort++;		/* We sort bootcat/botimage */
-			use_eltorito++;
-			boot_image = optarg;	/* pathname of the boot image */
-						/* on disk */
-			if (boot_image == NULL) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Required Eltorito boot image pathname missing\n");
-#else
-				fprintf(stderr,
-				"Required Eltorito boot image pathname missing\n");
-				exit(1);
-#endif
-			}
-			get_boot_entry();
-			current_boot_entry->boot_image = boot_image;
-			break;
-		case OPTION_ALT_BOOT:
-			/*
-			 * Start new boot entry parameter list.
-			 */
-			new_boot_entry();
-			break;
-		case OPTION_BOOTALPHA:
-			use_alphaboot++;
-			/* list of pathnames of boot images */
-			add_boot_alpha_filename(optarg);
-			break;
-		case OPTION_HPPA_CMDLINE:
-			use_hppaboot++;
-			add_boot_hppa_cmdline(optarg);
-			break;
-		case OPTION_HPPA_KERNEL_32:
-			use_hppaboot++;
-			add_boot_hppa_kernel_32(optarg);
-			break;
-		case OPTION_HPPA_KERNEL_64:
-			use_hppaboot++;
-			add_boot_hppa_kernel_64(optarg);
-			break;
-		case OPTION_HPPA_BOOTLOADER:
-			use_hppaboot++;
-			add_boot_hppa_bootloader(optarg);
-			break;
-		case OPTION_HPPA_RAMDISK:
-			use_hppaboot++;
-			/* list of pathnames of boot images */
-			add_boot_hppa_ramdisk(optarg);
-			break;
-		case OPTION_BOOTMIPS:
-			use_mipsboot++;
-			/* list of pathnames of boot images */
-			add_boot_mips_filename(optarg);
-			break;
-		case OPTION_BOOTMIPSEL:
-			use_mipselboot++;
-			add_boot_mipsel_filename(optarg);
-			break;
-		case 'B':
-			if (use_sunx86boot)
-				comerrno(EX_BAD,
-				"-sparc-boot and -sunx86-boot are mutual exclusive.\n");
-			use_sparcboot++;
-			/* list of pathnames of boot images */
-			scan_sparc_boot(optarg);
-			break;
-		case OPTION_SUNX86BOOT:
-			if (use_sparcboot)
-				comerrno(EX_BAD,
-				"-sparc-boot and -sunx86-boot are mutual exclusive.\n");
-			use_sunx86boot++;
-			/* list of pathnames of boot images */
-			scan_sunx86_boot(optarg);
-			break;
-		case 'G':
-			use_genboot++;
-			/* pathname of the boot image on disk */
-			genboot_image = optarg;
-			if (genboot_image == NULL) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Required generic boot image pathname missing\n");
-#else
-				fprintf(stderr,
-				"Required generic boot image pathname missing\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_SPARCLABEL:
-			/* Sun disk label string */
-			sparc_boot_label(optarg);
-			break;
-		case OPTION_SUNX86LABEL:
-			/* Sun disk label string */
-			sunx86_boot_label(optarg);
-			break;
-		case 'c':
-			use_eltorito++;
-			/* pathname of the boot image on cd */
-			boot_catalog = optarg;
-			if (boot_catalog == NULL) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Required boot catalog pathname missing\n");
-#else
-				fprintf(stderr,
-				"Required boot catalog pathname missing\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_ABSTRACT:
-			abstract = optarg;
-			if (strlen(abstract) > 37) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Abstract filename string too long\n");
-#else
-				fprintf(stderr,
-				"Abstract filename string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case 'A':
-			appid = optarg;
-			if (strlen(appid) > 128) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Application-id string too long\n");
-#else
-				fprintf(stderr,
-				"Application-id string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_BIBLIO:
-			biblio = optarg;
-			if (strlen(biblio) > 37) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Bibliographic filename string too long\n");
-#else
-				fprintf(stderr,
-				"Bibliographic filename string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_CACHE_INODES:
-			cache_inodes = 1;
-			break;
-		case OPTION_NOCACHE_INODES:
-			cache_inodes = 0;
-			break;
-		case OPTION_CHECK_OLDNAMES:
-			check_oldnames++;
-			break;
-		case OPTION_CHECK_SESSION:
-			check_session++;
-			check_oldnames++;
-			merge_image = optarg;
-			outfile = "/dev/null";
-			/*
-			 * cdrecord_data is handled specially in multi.c
-			 * as we cannot write to all strings.
-			 * If mkisofs is called with -C xx,yy
-			 * our default is overwritten.
-			 */
-/*			cdrecord_data = "0,0";*/
-			break;
-		case OPTION_COPYRIGHT:
-			copyright = optarg;
-			if (strlen(copyright) > 37) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Copyright filename string too long\n");
-#else
-				fprintf(stderr,
-				"Copyright filename string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_DEBUG:
-			debug++;
-			break;
-		case 'd':
-			omit_period++;
-			warn_violate++;
-			break;
-		case 'D':
-			RR_relocation_depth = 32767;
-			break;
-		case 'f':
-			follow_links++;
-#ifdef	USE_LIBSCHILY
-			errmsgno(EX_BAD,
-			"Warning: -follow-links does not always work correctly; be careful.\n");
-#else
-			fprintf(stderr,
-			"Warning: -follow-links does not always work correctly; be careful.\n");
-#endif
-			break;
-		case 'l':
-			full_iso9660_filenames++;
-			break;
-		case OPTION_MAX_FILENAMES:
-			iso9660_namelen = MAX_ISONAME_V1; /* allow 37 chars */
-			full_iso9660_filenames++;
-			omit_version_number++;
-			warn_violate++;
-			break;
-		case 'L':
-			errmsgno(EX_BAD, "The option '-L' is reserved by POSIX.1-2001.\n");
-			errmsgno(EX_BAD, "The option '-L' means 'follow all symbolic links'.\n");
-			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-L'.\n");
-			errmsgno(EX_BAD, "Use -allow-leading-dots in future to get old mkisofs behavior.\n");
-			/* FALLTHRU */
-		case OPTION_ALLOW_LEADING_DOTS:
-			/*
-			 * -L Reserved by POSIX.1-2001
-			 * Meaning: Follow all symbolic links
-			 */
-			allow_leading_dots++;
-			warn_violate++;
-			break;
-		case OPTION_LOG_FILE:
-			log_file = optarg;
-			break;
-		case 'M':
-			merge_image = optarg;
-			break;
-		case OPTION_RELOC_ROOT:
-			reloc_root = optarg;
-			break;
-		case OPTION_RELOC_OLD_ROOT:
-			reloc_old_root = optarg;
-			break;
-		case 'N':
-			omit_version_number++;
-			warn_violate++;
-			break;
-		case OPTION_FORCE_RR:
-			force_rr++;
-			break;
-		case OPTION_NO_RR:
-			no_rr++;
-			break;
-		case 'o':
-			outfile = optarg;
-			break;
-		case OPTION_PAD:
-			dopad++;
-			break;
-		case OPTION_NOPAD:
-			dopad = 0;
-			break;
-		case OPTION_P_LIST:
-			pathnames = optarg;
-			break;
-		case 'p':
-			preparer = optarg;
-			if (strlen(preparer) > 128) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Preparer string too long\n");
-#else
-				fprintf(stderr, "Preparer string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_PRINT_SIZE:
-			print_size++;
-			break;
-		case 'P':
-			errmsgno(EX_BAD, "The option '-P' is reserved by POSIX.1-2001.\n");
-			errmsgno(EX_BAD, "The option '-P' means 'do not follow symbolic links'.\n");
-			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-P'.\n");
-			errmsgno(EX_BAD, "Use -publisher in future to get old mkisofs behavior.\n");
-			/* FALLTHRU */
-		case OPTION_PUBLISHER:
-			/*
-			 * -P Reserved by POSIX.1-2001
-			 * Meaning: Do not follow symbolic links
-			 */
-			publisher = optarg;
-			if (strlen(publisher) > 128) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-						"Publisher string too long\n");
-#else
-				fprintf(stderr, "Publisher string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_QUIET:
-			verbose = 0;
-			break;
-		case 'R':
-			use_RockRidge++;
-			break;
-		case 'r':
-			rationalize_all++;
-			use_RockRidge++;
-			break;
-		case OPTION_XA:
-			use_XA++;
-			break;
-		case OPTION_XA_RATIONALIZED:
-			rationalize_all++;
-			use_XA++;
-			break;
-
-		case 's':
-			if (strcmp(optarg, "data") == 0)
-				osecsize = 2048;
-			else if (strcmp(optarg, "xa1") == 0)
-				osecsize = 2056;
-			else if (strcmp(optarg, "raw") == 0) {
-				osecsize = 2352;
-				comerrno(EX_BAD,
-					"Unsupported sector type '%s'.\n",
-					optarg);
-			}
-			break;
-		case 'S':
-#ifdef	USE_LIBSCHILY
-			errmsgno(EX_BAD, "Option -%c is reserved for future use.\n", c);
-#else
-			fprintf(stderr, "Option -%c is reserved for future use.\n", c);
-#endif
-			susage(1);
-			/* NOTREACHED */
-
-		case OPTION_NEW_DIR_MODE:
-			rationalize++;
-		{
-			char	*end = 0;
-
-			new_dir_mode = strtol(optarg, &end, 8);
-			if (!end || *end != 0 ||
-			    new_dir_mode < 0 || new_dir_mode > 07777) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Bad mode for -new-dir-mode\n");
-#else
-				fprintf(stderr, "Bad mode for -new-dir-mode\n");
-				exit(1);
-#endif
-			}
-			break;
-		}
-
-		case OPTION_UID:
-			rationalize++;
-			use_RockRidge++;
-			rationalize_uid++;
-		{
-			char	*end = 0;
-
-			uid_to_use = strtol(optarg, &end, 0);
-			if (!end || *end != 0) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Bad value for -uid\n");
-#else
-				fprintf(stderr, "Bad value for -uid\n");
-				exit(1);
-#endif
-			}
-			break;
-		}
-
-		case OPTION_GID:
-			rationalize++;
-			use_RockRidge++;
-			rationalize_gid++;
-		{
-			char	*end = 0;
-
-			gid_to_use = strtol(optarg, &end, 0);
-			if (!end || *end != 0) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Bad value for -gid\n");
-#else
-				fprintf(stderr, "Bad value for -gid\n");
-				exit(1);
-#endif
-			}
-			break;
-		}
-
-		case OPTION_FILEMODE:
-			rationalize++;
-			use_RockRidge++;
-			rationalize_filemode++;
-		{
-			char	*end = 0;
-
-			filemode_to_use = strtol(optarg, &end, 8);
-			if (!end || *end != 0 ||
-			    filemode_to_use < 0 || filemode_to_use > 07777) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Bad mode for -file-mode\n");
-#else
-				fprintf(stderr, "Bad mode for -file-mode\n");
-				exit(1);
-#endif
-			}
-			break;
-		}
-
-		case OPTION_DIRMODE:
-			rationalize++;
-			use_RockRidge++;
-			rationalize_dirmode++;
-		{
-			char	*end = 0;
-
-			dirmode_to_use = strtol(optarg, &end, 8);
-			if (!end || *end != 0 ||
-			    dirmode_to_use < 0 || dirmode_to_use > 07777) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD, "Bad mode for -dir-mode\n");
-#else
-				fprintf(stderr, "Bad mode for -dir-mode\n");
-				exit(1);
-#endif
-			}
-			break;
-		}
-
-#ifdef SORTING
-		case OPTION_SORT:
-			do_sort++;
-			add_sort_list(optarg);
-			break;
-#endif /* SORTING */
-
-		case OPTION_SPLIT_OUTPUT:
-			split_output++;
-			break;
-
-		case OPTION_STREAM_FILE_NAME:
-			comerrno(EX_BAD, "-stream-file-name not yet implemented\n");
-			stream_filename = optarg;
-			break;
-
-		case OPTION_STREAM_CD_SIZE:
-			stream_media_size = atoi(optarg);
-			break;
-
-		case OPTION_SYSID:
-			system_id = optarg;
-			if (strlen(system_id) > 32) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-						"System ID string too long\n");
-#else
-				fprintf(stderr, "System ID string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_TRANS_TBL:
-			trans_tbl = optarg;
-			/* FALLTHRU */
-		case 'T':
-			generate_tables++;
-			break;
-		case OPTION_UCS_LEVEL:
-			ucs_level = atoi(optarg);
-			if (ucs_level < 1 || ucs_level > 3)
-				comerrno(EX_BAD, "Illegal UCS Level %d, use 1..3.\n",
-							ucs_level);
-			break;
-#ifdef UDF
-		case OPTION_UDF:
-			use_udf++;
-			break;
-#endif
-
-#ifdef DVD_VIDEO
-		case OPTION_DVD:
-			use_udf++;
-			dvd_video++;
-			break;
-#endif
-		case OPTION_USE_FILEVERSION:
-			use_fileversion++;
-			break;
-		case 'U':
-			/*
-			 * Minimal (only truncation of 31+ characters)
-			 * translation of filenames.
-			 *
-			 * Forces -l, -d, -N, -allow-leading-dots,
-			 * -relaxed-filenames,
-			 * -allow-lowercase, -allow-multidot
-			 *
-			 * This is for HP-UX, which does not recognize ANY
-			 * extentions (Rock Ridge, Joliet), causing pain when
-			 * loading software. pfs_mount can be used to read the
-			 * extensions, but the untranslated filenames can be
-			 * read by the "native" cdfs mounter. Completely
-			 * violates iso9660.
-			 */
-			full_iso9660_filenames++;	/* 31 chars	*/
-			omit_period++;			/* trailing dot */
-			allow_leading_dots++;
-			omit_version_number++;
-			relaxed_filenames++;		/* all chars	*/
-			allow_lowercase++;		/* even lowcase	*/
-			allow_multidot++;		/* > 1 dots	*/
-			warn_violate++;
-			break;
-
-		case OPTION_RELAXED_FILENAMES:
-			relaxed_filenames++;
-			warn_violate++;
-			break;
-		case OPTION_ALLOW_LOWERCASE:
-			allow_lowercase++;
-			warn_violate++;
-			break;
-		case OPTION_ALLOW_MULTIDOT:
-			allow_multidot++;
-			warn_violate++;
-			break;
-		case OPTION_ISO_TRANSLATE:
-			iso_translate = 0;
-			warn_violate++;
-			break;
-		case 'V':
-			volume_id = optarg;
-			if (strlen(volume_id) > 32) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-					"Volume ID string too long\n");
-#else
-				fprintf(stderr,
-					"Volume ID string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_VOLSET:
-			volset_id = optarg;
-			if (strlen(volset_id) > 128) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Volume set ID string too long\n");
-#else
-				fprintf(stderr,
-				"Volume set ID string too long\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_VOLSET_SIZE:
-			volume_set_size = atoi(optarg);
-			if (volume_set_size <= 0) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Illegal Volume Set Size %s\n", optarg);
-#else
-				fprintf(stderr,
-				"Illegal Volume Set Size %s\n", optarg);
-				exit(1);
-#endif
-			}
-			if (volume_set_size > 1) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Volume Set Size > 1 not yet supported\n");
-#else
-				fprintf(stderr,
-				"Volume Set Size > 1 not yet supported\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_VOLSET_SEQ_NUM:
-			volume_sequence_number = atoi(optarg);
-			if (volume_sequence_number > volume_set_size) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Volume set sequence number too big\n");
-#else
-				fprintf(stderr,
-				"Volume set sequence number too big\n");
-				exit(1);
-#endif
-			}
-			break;
-		case 'v':
-			verbose++;
-			break;
-		case 'z':
-#ifdef VMS
-#ifdef	USE_LIBSCHILY
-			comerrno(EX_BAD,
-			"Transparent compression not supported with VMS\n");
-#else
-			fprintf(stderr,
-			"Transparent compression not supported with VMS\n");
-			exit(1);
-#endif
-#else
-			transparent_compression++;
-#endif
-			break;
-		case 'x':
-		case 'm':
-			/*
-			 * Somehow two options to do basically the same thing
-			 * got added somewhere along the way.  The 'match'
-			 * code supports limited globbing, so this is the one
-			 * that got selected. Unfortunately the 'x' switch is
-			 * probably more intuitive.
-			 */
-			add_match(optarg);
-			break;
-		case OPTION_X_LIST:
-			add_list(optarg);
-			break;
-		case OPTION_I_HIDE:
-			i_add_match(optarg);
-			break;
-		case OPTION_I_LIST:
-			i_add_list(optarg);
-			break;
-		case OPTION_H_HIDE:
-			h_add_match(optarg);
-			break;
-		case OPTION_H_LIST:
-			h_add_list(optarg);
-			break;
-		case OPTION_J_HIDE:
-			j_add_match(optarg);
-			break;
-		case OPTION_J_LIST:
-			j_add_list(optarg);
-			break;
-		case OPTION_HIDE_TRANS_TBL:
-			jhide_trans_tbl++;
-			break;
-		case OPTION_HIDE_RR_MOVED:
-			hide_rr_moved++;
-			break;
-		case OPTION_HELP:
-			usage(0);
-			break;
-		case OPTION_PVERSION:
-			printf("%s (%s)\n", version_string, HOST_SYSTEM);
-#ifdef	OPTION_SILO_BOOT
-			printf("Warning: this is unofficial (modified) version of mkisofs that incorporates\n");
-			printf("	support for a non Sparc compliant boot method called SILO.\n");
-			printf("	The official method to create Sparc boot CDs is to use -sparc-boot\n");
-			printf("	In case of problems first test with an official version of mkisofs.\n");
-#endif
-			exit(0);
-			break;
-		case OPTION_NOSPLIT_SL_COMPONENT:
-			split_SL_component = 0;
-			break;
-		case OPTION_NOSPLIT_SL_FIELD:
-			split_SL_field = 0;
-			break;
-		case OPTION_HARD_DISK_BOOT:
-			use_eltorito++;
-			hard_disk_boot++;
-			get_boot_entry();
-			current_boot_entry->hard_disk_boot = 1;
-			break;
-		case OPTION_NO_EMUL_BOOT:
-			use_eltorito++;
-			no_emul_boot++;
-			get_boot_entry();
-			current_boot_entry->no_emul_boot = 1;
-			break;
-		case OPTION_NO_BOOT:
-			use_eltorito++;
-			not_bootable++;
-			get_boot_entry();
-			current_boot_entry->not_bootable = 1;
-			break;
-		case OPTION_BOOT_LOAD_ADDR:
-			use_eltorito++;
-			{
-				long	val;
-				char	*ptr;
-
-				val = strtol(optarg, &ptr, 0);
-				if (*ptr || val < 0 || val >= 0x10000) {
-#ifdef	USE_LIBSCHILY
-					comerrno(EX_BAD, "Boot image load address invalid.\n");
-#else
-					fprintf(stderr, "Boot image load address invalid.\n");
-					exit(1);
-#endif
-				}
-				load_addr = val;
-			}
-			get_boot_entry();
-			current_boot_entry->load_addr = load_addr;
-			break;
-		case OPTION_BOOT_LOAD_SIZE:
-			use_eltorito++;
-			{
-				long	val;
-				char	*ptr;
-
-				val = strtol(optarg, &ptr, 0);
-				if (*ptr || val < 0 || val >= 0x10000) {
-#ifdef	USE_LIBSCHILY
-					comerrno(EX_BAD,
-					"Boot image load size invalid.\n");
-#else
-					fprintf(stderr,
-					"Boot image load size invalid.\n");
-					exit(1);
-#endif
-				}
-				load_size = val;
-			}
-			get_boot_entry();
-			current_boot_entry->load_size = load_size;
-			break;
-		case OPTION_BOOT_INFO_TABLE:
-			use_eltorito++;
-			boot_info_table++;
-			get_boot_entry();
-			current_boot_entry->boot_info_table = 1;
-			break;
-#ifdef APPLE_HYB
-		case OPTION_HFS_TYPE:
-			deftype = optarg;
-			hfs_ct++;
-			if (strlen(deftype) != 4) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"HFS default TYPE string has illegal length.\n");
-#else
-				fprintf(stderr,
-				"HFS default TYPE string has illegal length.\n");
-				exit(1);
-#endif
-			}
-			break;
-		case OPTION_HFS_CREATOR:
-			defcreator = optarg;
-			hfs_ct++;
-			if (strlen(defcreator) != 4) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"HFS default CREATOR string has illegal length.\n");
-#else
-				fprintf(stderr,
-				"HFS default CREATOR string has illegal length.\n");
-				exit(1);
-#endif
-			}
-			break;
-		case 'H':
-			errmsgno(EX_BAD, "The option '-H' is reserved by POSIX.1-2001.\n");
-			errmsgno(EX_BAD, "The option '-H' means 'follow symbolic links on command line'.\n");
-			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-H'.\n");
-			errmsgno(EX_BAD, "Use -map in future to get old mkisofs behavior.\n");
-			/* FALLTHRU */
-		case OPTION_MAP_FILE:
-			/*
-			 * -H Reserved by POSIX.1-2001
-			 * Meaning: Follow symbolic links on command line
-			 * Symbolic links found by tree traversal are not
-			 * followed.
-			 */
-			afpfile = optarg;
-			hfs_last = MAP_LAST;
-			break;
-		case 'h':
-			apple_hyb = 1;
-			break;
-		case 'g':
-			apple_ext = 1;
-			break;
-		case OPTION_PROBE:
-			probe = 1;
-			break;
-		case OPTION_MACNAME:
-			use_mac_name = 1;
-			break;
-		case OPTION_NOMACFILES:
-#ifdef	USE_LIBSCHILY
-			errmsgno(EX_BAD,
-			"Warning: -no-mac-files no longer used ... ignoring\n");
-#else
-			fprintf(stderr,
-			"Warning: -no-mac-files no longer used ... ignoring\n");
-#endif
-			break;
-		case OPTION_BOOT_HFS_FILE:
-			hfs_boot_file = optarg;
-			/* FALLTHRU */
-		case OPTION_GEN_PT:
-			gen_pt = 1;
-			break;
-		case OPTION_MAGIC_FILE:
-#ifndef USE_MAGIC
-			fprintf(stderr, "This program has been compiled without magic library support.\n"
-				"Ignoring the -magic option.\n");
-#endif
-			magic_filename = optarg;
-			hfs_last = MAG_LAST;
-			break;
-		case OPTION_AUTOSTART:
-			autoname = optarg;
-			/* gen_pt = 1; */
-			break;
-		case OPTION_BSIZE:
-			afe_size = atoi(optarg);
-			hfs_select |= DO_FEU;
-			hfs_select |= DO_FEL;
-			break;
-		case OPTION_HFS_VOLID:
-			hfs_volume_id = optarg;
-			break;
-		case OPTION_ROOT_INFO:
-			root_info = optarg;
-			/* FALLTHRU */
-		case OPTION_ICON_POS:
-			icon_pos = 1;
-			break;
-		/* Mac/Unix types to include */
-		case OPTION_CAP:
-			hfs_select |= DO_CAP;
-			break;
-		case OPTION_NETA:
-			hfs_select |= DO_NETA;
-			break;
-		case OPTION_DBL:
-			hfs_select |= DO_DBL;
-			break;
-		case OPTION_ESH:
-		case OPTION_USH:
-			hfs_select |= DO_ESH;
-			break;
-		case OPTION_FE:
-			hfs_select |= DO_FEU;
-			hfs_select |= DO_FEL;
-			break;
-		case OPTION_SGI:
-		case OPTION_XIN:
-			hfs_select |= DO_SGI;
-			break;
-		case OPTION_MBIN:
-			hfs_select |= DO_MBIN;
-			break;
-		case OPTION_SGL:
-			hfs_select |= DO_SGL;
-			break;
-		case OPTION_DAVE:
-			hfs_select |= DO_DAVE;
-			break;
-		case OPTION_SFM:
-			hfs_select |= DO_SFM;
-			break;
-		case OPTION_XDBL:
-			hfs_select |= DO_XDBL;
-			break;
-		case OPTION_XHFS:
-#ifdef IS_MACOS_X
-			hfs_select |= DO_XHFS;
-#else /* IS_MACOS_X */
-#ifdef	USE_LIBSCHILY
-			errmsgno(EX_BAD,
-			"Warning: --osx-hfs only works on MacOS X ... ignoring\n");
-#else /* USE_LIBSCHILY */
-			fprintf(stderr,
-			"Warning: --osx-hfs only works on MacOS X ... ignoring\n");
-#endif /* USE_LIBSCHILY */
-#endif /* IS_MACOS_X */
-			break;
-		case OPTION_CREATE_DT:
-			create_dt = 0;
-			break;
-		case OPTION_HFS_HIDE:
-			hfs_add_match(optarg);
-			break;
-		case OPTION_HFS_LIST:
-			hfs_add_list(optarg);
-			break;
-		case OPTION_HFS_INPUT_CHARSET:
-			use_mac_name = 1;
-			hfs_icharset = optarg;
-			break;
-		case OPTION_HFS_OUTPUT_CHARSET:
-			hfs_ocharset = optarg;
-			break;
-		case OPTION_HFS_UNLOCK:
-			hfs_lock = 0;
-			break;
-		case OPTION_HFS_BLESS:
-			hfs_bless = optarg;
-			break;
-		case OPTION_HFS_PARMS:
-			hfs_parms = strdup(optarg);
-			break;
-#ifdef PREP_BOOT
-		case OPTION_PREP_BOOT:
-			use_prep_boot++;
-			if (use_prep_boot > 4 - use_chrp_boot) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
-#else
-				fprintf(stderr,
-				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
-#endif
-				exit(1);
-			}
-			/* pathname of the boot image on cd */
-			prep_boot_image[use_prep_boot - 1] = optarg;
-			if (prep_boot_image[use_prep_boot - 1] == NULL) {
-#ifdef	USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Required PReP boot image pathname missing\n");
-#else
-				fprintf(stderr,
-				"Required PReP boot image pathname missing\n");
-#endif
-				exit(1);
-			}
-			break;
-		case OPTION_CHRP_BOOT:
-			if (use_chrp_boot)
-				break;		/* silently allow duplicates */
-			use_chrp_boot = 1;
-			if (use_prep_boot > 3) {
-#ifdef USE_LIBSCHILY
-				comerrno(EX_BAD,
-				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
-#else
-				fprintf(stderr,
-				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
-#endif
-				exit(1);
-			}
-			break;
-#endif	/* PREP_BOOT */
-#endif	/* APPLE_HYB */
-		default:
-			susage(1);
-		}
-	/*
-	 * "--" was found, the next argument is a pathspec
-	 */
-	if (argc != optind)
-		have_cmd_line_pathspec = 1;
-
-parse_input_files:
-	path_ind = optind;
-
-	/*
-	 * XXX This is a hack until we have a decent separate name handling
-	 * XXX for UDF filenames.
-	 */
-	if (dvd_video && use_Joliet) {
-		use_Joliet = 0;
-		fprintf(stderr, "Warning: Disabling Joliet support for DVD-Video.\n");
-	}
-	if (use_udf && !use_Joliet)
-		jlen = 255;
-
-	if (use_RockRidge && (iso9660_namelen > MAX_ISONAME_V2_RR))
-		iso9660_namelen = MAX_ISONAME_V2_RR;
-
-	if (warn_violate)
-		fprintf(stderr, "Warning: creating filesystem that does not conform to ISO-9660.\n");
-	if (iso9660_level > 3)
-		fprintf(stderr, "Warning: Creating ISO-9660:1999 (version 2) filesystem.\n");
-	if (iso9660_namelen > LEN_ISONAME)
-		fprintf(stderr, "Warning: ISO-9660 filenames longer than %d may cause buffer overflows in the OS.\n",
-			LEN_ISONAME);
-	if (use_Joliet && !use_RockRidge) {
-		fprintf(stderr, "Warning: creating filesystem with (nonstandard) Joliet extensions\n");
-		fprintf(stderr, "         but without (standard) Rock Ridge extensions.\n");
-		fprintf(stderr, "         It is highly recommended to add Rock Ridge\n");
-	}
-	if (transparent_compression) {
-		fprintf(stderr, "Warning: using transparent compression. This is a nonstandard Rock Ridge\n");
-		fprintf(stderr, "         extension. The resulting filesystem can only be transparently\n");
-		fprintf(stderr, "         read on Linux. On other operating systems you need to call\n");
-		fprintf(stderr, "         mkzftree by hand to decompress the files.\n");
-	}
-	if (transparent_compression && !use_RockRidge) {
-		fprintf(stderr, "Warning: transparent decompression is a Linux Rock Ridge extension, but\n");
-		fprintf(stderr, "         creating filesystem without Rock Ridge attributes; files\n");
-		fprintf(stderr, "         will not be transparently decompressed.\n");
-	}
-	init_unls();		/* Initialize UNICODE tables */
-
-	/* initialize code tables from a file - if they exists */
-	init_unls_file(icharset);
-	init_unls_file(ocharset);
-#ifdef APPLE_HYB
-	init_unls_file(hfs_icharset);
-	init_unls_file(hfs_ocharset);
-#endif /* APPLE_HYB */
-
-#ifdef USE_ICONV
-	iconv_possible = !(iso9660_level >= 4 || ((ocharset &&
-		strcmp(ocharset, icharset ? icharset : "")) &&
-		use_RockRidge) || apple_ext || apple_hyb);
-
-	setlocale(LC_CTYPE, "");
-	
-  	if (icharset == NULL && iconv_possible) {
-		char *charset = nl_langinfo(CODESET);
-		/* set to detected value but only if it is not pure US-ASCII */
-  	if(charset) { /* workaround for SunOS, iconv is case-sensitive */
- 			char *t;
- 			charset = strdup(charset);
- 			for(t=charset;*t!='\0';t++)
- 				*t=tolower(*t);
- 		}
-
-		if(strcmp(charset, "ansi_x3.4-1968") != 0)
-			icharset = charset;
-
-		if(icharset && verbose > 0)
-			fprintf(stderr, "I: -input-charset not specified, using %s (detected in locale settings)\n",
-			icharset);
-	}
-
-	if(iconv_possible) {
-		/*
-		 * don't care if initialization fails
-		 */
-		init_nls_iconv(icharset);
-		init_nls_iconv(ocharset);
-	}
-#endif
-
-	if (icharset == NULL) {
-#if	(defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(__DJGPP__)) && !defined(IS_CYGWIN_1)
-		in_nls = load_unls("cp437");
-#else
-		in_nls = load_unls("iso8859-1");
-#endif
-	} else {
-		if (strcmp(icharset, "default") == 0)
-			in_nls = load_unls_default();
-		else
-			in_nls = load_unls(icharset);
-	}
-	/*
-	 * set the output charset to the same as the input or the given output
-	 * charset
-	 */
-	if (ocharset == NULL) {
-		out_nls = in_nls;
-	} else {
-		if (strcmp(ocharset, "default") == 0)
-			out_nls = load_unls_default();
-		else
-			out_nls = load_unls(ocharset);
-	}
-	if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
-		fprintf(stderr, "Unknown charset\nKnown charsets are:\n");
-		list_unls();	/* List all known charset names */
-#ifdef USE_ICONV
-        fprintf(stderr, "\nAdditional input charsets are available for Joliet through the iconv support."
-                "\nRun \"iconv -l\" to display them. Iconv charsets cannot be used with HFS, Apple"
-                "\nextension, ISO9660 version 2 or Rock Ridge.\n"
-                "\nIMPORTANT: never report problems with charset support directly"
-                "\nto Joerg Schilling! Report them to debburn-devel at lists.alioth.debian.org.\n");
-#endif
-		exit(1);
-	}
-
-
-#ifdef APPLE_HYB
-	if (hfs_icharset == NULL || strcmp(hfs_icharset, "mac-roman")) {
-		hfs_inls = load_unls("cp10000");
-	} else {
-		if (strcmp(hfs_icharset, "default") == 0)
-			hfs_inls = load_unls_default();
-		else
-			hfs_inls = load_unls(hfs_icharset);
-	}
-	if (hfs_ocharset == NULL) {
-		hfs_onls = hfs_inls;
-	} else {
-		if (strcmp(hfs_ocharset, "default") == 0)
-			hfs_onls = load_unls_default();
-		else if (strcmp(hfs_ocharset, "mac-roman") == 0)
-			hfs_onls = load_unls("cp10000");
-		else
-			hfs_onls = load_unls(hfs_ocharset);
-	}
-
-	if (hfs_inls == NULL || hfs_onls == NULL) {
-		fprintf(stderr, "Unknown HFS charset\nKnown charsets are:\n");
-		list_unls();
-		exit(1);
-	}
-#endif /* APPLE_HYB */
-
-	if (merge_image != NULL) {
-		if (open_merge_image(merge_image) < 0) {
-			/* Complain and die. */
-#ifdef	USE_LIBSCHILY
-			comerr("Unable to open previous session image '%s'.\n",
-				merge_image);
-#else
-			fprintf(stderr,
-				"Unable to open previous session image '%s'.\n",
-				merge_image);
-			exit(1);
-#endif
-		}
-	}
-	/* We don't need root privilleges anymore. */
-#ifdef	HAVE_SETREUID
-	if (setreuid(-1, getuid()) < 0)
-#else
-#ifdef	HAVE_SETEUID
-	if (seteuid(getuid()) < 0)
-#else
-	if (setuid(getuid()) < 0)
-#endif
-#endif
-#ifdef	USE_LIBSCHILY
-		comerr("Panic cannot set back effective uid.\n");
-#else
-	{
-		perror("Panic cannot set back effective uid.");
-		exit(1);
-	}
-#endif
-
-
-#ifdef	no_more_needed
-#ifdef __NetBSD__
-	{
-		int		resource;
-		struct rlimit	rlp;
-
-		if (getrlimit(RLIMIT_DATA, &rlp) == -1)
-			perror("Warning: getrlimit");
-		else {
-			rlp.rlim_cur = 33554432;
-			if (setrlimit(RLIMIT_DATA, &rlp) == -1)
-				perror("Warning: setrlimit");
-		}
-	}
-#endif
-#endif	/* no_more_needed */
-#ifdef HAVE_SBRK
-	mem_start = (unsigned long) sbrk(0);
-#endif
-
-	/*
-	 * if the -hide-joliet option has been given, set the Joliet option
-	 */
-	if (!use_Joliet && j_ishidden())
-		use_Joliet++;
-
-#ifdef APPLE_HYB
-	if (apple_hyb && apple_ext) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have both -apple and -hfs options");
-#else
-		fprintf(stderr, "Can't have both -apple and -hfs options");
-		exit(1);
-#endif
-	}
-	/*
-	 * if -probe, -macname, any hfs selection and/or mapping file is given,
-	 * but no HFS option, then select apple_hyb
-	 */
-	if (!apple_hyb && !apple_ext) {
-		if (*afpfile || probe || use_mac_name || hfs_select ||
-				hfs_boot_file || magic_filename ||
-				hfs_ishidden() || gen_pt || autoname ||
-				afe_size || icon_pos || hfs_ct ||
-				hfs_icharset || hfs_ocharset) {
-			apple_hyb = 1;
-		}
-	}
-	if (apple_ext && hfs_boot_file) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have -hfs-boot-file with -apple\n");
-#else
-		fprintf(stderr, "Can't have -hfs-boot-file with -apple\n");
-		exit(1);
-#endif
-	}
-	if (apple_ext && autoname) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have -auto with -apple\n");
-#else
-		fprintf(stderr, "Can't have -auto with -apple\n");
-		exit(1);
-#endif
-	}
-	if (apple_hyb && (use_sparcboot || use_sunx86boot)) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have -hfs with -sparc-boot/-sunx86-boot\n");
-#else
-		fprintf(stderr, "Can't have -hfs with -sparc-boot/-sunx86-boot\n");
-		exit(1);
-#endif
-	}
-	if (apple_hyb && use_genboot) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have -hfs with -generic-boot\n");
-#else
-		fprintf(stderr, "Can't have -hfs with -generic-boot\n");
-		exit(1);
-#endif
-	}
-#ifdef PREP_BOOT
-	if (apple_ext && use_prep_boot) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Can't have -prep-boot with -apple\n");
-#else
-		fprintf(stderr, "Can't have -prep-boot with -apple\n");
-		exit(1);
-#endif
-	}
-#endif	/* PREP_BOOT */
-
-	if (apple_hyb || apple_ext)
-		apple_both = 1;
-
-	if (probe)
-		/* we need to search for all types of Apple/Unix files */
-		hfs_select = ~0;
-
-	if (apple_both && verbose && !(hfs_select || *afpfile || magic_filename)) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD,
-		"Warning: no Apple/Unix files will be decoded/mapped\n");
-#else
-		fprintf(stderr,
-		"Warning: no Apple/Unix files will be decoded/mapped\n");
-#endif
-	}
-	if (apple_both && verbose && !afe_size &&
-					(hfs_select & (DO_FEU | DO_FEL))) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD,
-		"Warning: assuming PC Exchange cluster size of 512 bytes\n");
-#else
-		fprintf(stderr,
-		"Warning: assuming PC Exchange cluster size of 512 bytes\n");
-#endif
-		afe_size = 512;
-	}
-	if (apple_both) {
-		/* set up the TYPE/CREATOR mappings */
-		hfs_init(afpfile, 0, hfs_select);
-	}
-	if (apple_ext && !use_RockRidge) {
-#ifdef	nonono
-		/* use RockRidge to set the SystemUse field ... */
-		use_RockRidge++;
-		rationalize_all++;
-#else
-		/* EMPTY */
-#endif
-	}
-	if (apple_ext && !(use_XA || use_RockRidge)) {
-		comerrno(EX_BAD, "Need either -XA/-xa or -R/-r for -apple to become active.\n");
-	}
-
-#endif	/* APPLE_HYB */
-
-	if (rationalize_all) {
-		rationalize++;
-		rationalize_uid++;
-		rationalize_gid++;
-		rationalize_filemode++;
-		rationalize_dirmode++;
-	}
-
-	if (verbose > 1) {
-		fprintf(stderr, "%s (%s)\n", version_string, HOST_SYSTEM);
-	}
-	if (cdrecord_data == NULL && !check_session && merge_image != NULL) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD,
-		"Multisession usage bug: Must specify -C if -M is used.\n");
-#else
-		fprintf(stderr,
-		"Multisession usage bug: Must specify -C if -M is used.\n");
-		exit(1);
-#endif
-	}
-	if (cdrecord_data != NULL && merge_image == NULL) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD,
-		"Warning: -C specified without -M: old session data will not be merged.\n");
-#else
-		fprintf(stderr,
-		"Warning: -C specified without -M: old session data will not be merged.\n");
-#endif
-	}
-#ifdef APPLE_HYB
-	if (merge_image != NULL && apple_hyb) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD,
-		"Warning: files from previous sessions will not be included in the HFS volume.\n");
-#else
-		fprintf(stderr,
-		"Warning: files from previous sessions will not be included in the HFS volume.\n");
-#endif
-	}
-#endif	/* APPLE_HYB */
-
-	/*
-	 * see if we have a list of pathnames to process
-	 */
-	if (pathnames) {
-		/* "-" means take list from the standard input */
-		if (strcmp(pathnames, "-")) {
-			if ((pfp = fopen(pathnames, "r")) == NULL) {
-#ifdef	USE_LIBSCHILY
-				comerr("Unable to open pathname list %s.\n",
-								pathnames);
-#else
-				fprintf(stderr,
-					"Unable to open pathname list %s.\n",
-								pathnames);
-				exit(1);
-#endif
-			}
-		} else
-			pfp = stdin;
-	}
-
-	/* The first step is to scan the directory tree, and take some notes */
-
-	if ((arg = get_pnames(argc, argv, optind, pname,
-					sizeof (pname), pfp)) == NULL) {
-		if (check_session == 0 && !stream_media_size) {
-#ifdef	USE_LIBSCHILY
-			errmsgno(EX_BAD, "Missing pathspec.\n");
-#endif
-			susage(1);
-		}
-	}
-
-	/*
-	 * if we don't have a pathspec, then save the pathspec found
-	 * in the pathnames file (stored in pname) - we don't want
-	 * to skip this pathspec when we read the pathnames file again
-	 */
-	if (!have_cmd_line_pathspec && !stream_media_size) {
-		save_pname = 1;
-	}
-	if (stream_media_size) {
-		if (use_XA || use_RockRidge || use_udf || use_Joliet)
-			comerrno(EX_BAD,
-			"Cannot use XA, Rock Ridge, UDF or Joliet with -stream-media-size\n");
-		if (merge_image)
-			comerrno(EX_BAD,
-			"Cannot use multi session with -stream-media-size\n");
-		if (use_eltorito || use_sparcboot || use_sunx86boot ||
-		    use_genboot || use_prep_boot || hfs_boot_file)
-			comerrno(EX_BAD,
-			"Cannot use boot options with -stream-media-size\n");
-		if (apple_hyb)
-			comerrno(EX_BAD,
-			"Cannot use Apple hybrid options with -stream-media-size\n");
-	}
-
-	if (use_RockRidge) {
-		/* BEGIN CSTYLED */
-#if 1
-		extension_record = generate_rr_extension_record("RRIP_1991A",
-			"THE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
-			"PLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE.  SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.",
-			&extension_record_size);
-#else
-		extension_record = generate_rr_extension_record("IEEE_P1282",
-			"THE IEEE P1282 PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
-			"PLEASE CONTACT THE IEEE STANDARDS DEPARTMENT, PISCATAWAY, NJ, USA FOR THE P1282 SPECIFICATION.",
-			&extension_record_size);
-#endif
-		/* END CSTYLED */
-	}
-	if (log_file) {
-		FILE		*lfp;
-		int		i;
-
-		/* open log file - test that we can open OK */
-		if ((lfp = fopen(log_file, "w")) == NULL) {
-#ifdef	USE_LIBSCHILY
-			comerr("Can't open logfile: '%s'.\n", log_file);
-#else
-			fprintf(stderr, "Can't open logfile: '%s'.\n", log_file);
-			exit(1);
-#endif
-		}
-		fclose(lfp);
-
-		/* redirect all stderr message to log_file */
-		fprintf(stderr, "re-directing all messages to %s\n", log_file);
-		fflush(stderr);
-
-		/* associate stderr with the log file */
-		if (freopen(log_file, "w", stderr) == NULL) {
-#ifdef	USE_LIBSCHILY
-			comerr("Can't open logfile: '%s'.\n", log_file);
-#else
-			fprintf(stderr, "Can't open logfile: '%s'.\n", log_file);
-			exit(1);
-#endif
-		}
-		if (verbose > 1) {
-			for (i = 0; i < argc; i++)
-				fprintf(stderr, "%s ", argv[i]);
-
-			fprintf(stderr, "\n%s (%s)\n",
-				version_string, HOST_SYSTEM);
-		}
-	}
-	/* Find name of root directory. */
-	if (arg != NULL)
-		node = findgequal(arg);
-	if (!use_graft_ptrs)
-		node = NULL;
-	if (node == NULL) {
-		if (use_graft_ptrs && arg != NULL)
-			node = escstrcpy(nodename, arg);
-		else
-			node = arg;
-	} else {
-		/*
-		 * Remove '\\' escape chars which are located
-		 * before '\\' and '=' chars
-		 */
-		node = escstrcpy(nodename, ++node);
-	}
-
-	/*
-	 * See if boot catalog file exists in root directory, if not we will
-	 * create it.
-	 */
-	if (use_eltorito)
-		init_boot_catalog(node);
-
-	/*
-	 * Find the device and inode number of the root directory. Record this
-	 * in the hash table so we don't scan it more than once.
-	 */
-	stat_filter(node, &statbuf);
-	add_directory_hash(statbuf.st_dev, STAT_INODE(statbuf));
-
-	memset(&de, 0, sizeof (de));
-
-	/*
-	 * PO:
-	 * Isn't root NULL at this time anyway?
-	 * I think it is created by the first call to
-	 * find_or_create_directory() below.
-	 */
-	de.filedir = root;	/* We need this to bootstrap */
-
-	if (cdrecord_data != NULL && merge_image == NULL) {
-		/*
-		 * in case we want to add a new session, but don't want to
-		 * merge old one
-		 */
-		get_session_start(NULL);
-	}
-	if (merge_image != NULL) {
-		char	sector[SECTOR_SIZE];
-
-		errno = 0;
-		mrootp = merge_isofs(merge_image);
-		if (mrootp == NULL) {
-			/* Complain and die. */
-#ifdef	USE_LIBSCHILY
-			if (errno == 0)
-				errno = -1;
-			comerr("Unable to find previous session PVD '%s'.\n",
-				merge_image);
-#else
-			fprintf(stderr,
-				"Unable to find previous session PVD '%s'.\n",
-				merge_image);
-			exit(1);
-#endif
-		}
-		memcpy(de.isorec.extent, mrootp->extent, 8);
-
-		/*
-		 * Look for RR Attributes in '.' entry of root dir.
-		 * This is the first ISO directory entry in the root dir.
-		 */
-		c = isonum_733((unsigned char *)mrootp->extent);
-#ifdef  USE_SCG
-		readsecs(c, sector, 1);
-#else
-    lseek(fileno(in_image), c*2048, SEEK_SET);
-    read(fileno(in_image), sector, sizeof (sector));
-#endif
-		c = rr_flags((struct iso_directory_record *)sector);
-		if (c & RR_FLAG_XA)
-			fprintf(stderr, "XA signatures found\n");
-		if (c & RR_FLAG_AA)
-			fprintf(stderr, "AA signatures found\n");
-		if (c & ~(RR_FLAG_XA|RR_FLAG_AA)) {
-			if (c & RR_FLAG_SP) {
-				fprintf(stderr, "Rock Ridge signatures found\n");
-			} else {
-				fprintf(stderr, "Bad Rock Ridge signatures found (SU record missing)\n");
-				if (!force_rr)
-					no_rr++;
-			}
-		} else {
-			fprintf(stderr, "NO Rock Ridge present\n");
-			if ((c & (RR_FLAG_XA|RR_FLAG_AA)) == 0) {
-				if (!force_rr)
-					no_rr++;
-			}
-		}
-		if (no_rr)
-			fprintf(stderr, "Disabling Rock Ridge / XA / AA\n");
-	}
-	/*
-	 * Create an empty root directory. If we ever scan it for real,
-	 * we will fill in the contents.
-	 */
-	find_or_create_directory(NULL, "", &de, TRUE);
-
-#ifdef APPLE_HYB
-	/* may need to set window layout of the volume */
-	if (root_info)
-		set_root_info(root_info);
-#endif /* APPLE_HYB */
-
-	/*
-	 * Scan the actual directory (and any we find below it) for files to
-	 * write out to the output image.  Note - we take multiple source
-	 * directories and keep merging them onto the image.
-	 */
-if (check_session == 0)
-	while ((arg = get_pnames(argc, argv, optind, pname,
-					sizeof (pname), pfp)) != NULL) {
-		struct directory *graft_dir;
-		struct stat	st;
-		char		*short_name;
-		int		status;
-		char		graft_point[PATH_MAX + 1];
-
-		/*
-		 * We would like a syntax like:
-		 *
-		 *	/tmp=/usr/tmp/xxx
-		 *
-		 * where the user can specify a place to graft each component
-		 * of the tree.  To do this, we may have to create directories
-		 * along the way, of course. Secondly, I would like to allow
-		 * the user to do something like:
-		 *
-		 *	/home/baz/RMAIL=/u3/users/baz/RMAIL
-		 *
-		 * so that normal files could also be injected into the tree
-		 * at an arbitrary point.
-		 *
-		 * The idea is that the last component of whatever is being
-		 * entered would take the name from the last component of
-		 * whatever the user specifies.
-		 *
-		 * The default will be that the file is injected at the root of
-		 * the image tree.
-		 */
-		node = findgequal(arg);
-		if (!use_graft_ptrs)
-			node = NULL;
-		/*
-		 * Remove '\\' escape chars which are located
-		 * before '\\' and '=' chars ---> below in escstrcpy()
-		 */
-
-		short_name = NULL;
-
-		if (node != NULL || reloc_root) {
-			char		*pnt;
-			char		*xpnt;
-			size_t		len;
-
-			/* insert -root prefix */
-			if (reloc_root != NULL) {
-				strcpy(graft_point, reloc_root);
-				len = strlen(graft_point);
-				if (graft_point[len] != '/')
-					graft_point[len++] = '/';
-			} else {
-				len = 0;
-			}
-
-			if (node) {
-				*node = '\0';
-				escstrcpy(&graft_point[len], arg);
-				*node = '=';
-			}
-
-			/*
-			 * Remove unwanted "./" & "/" sequences from start...
-			 */
-			do {
-				xpnt = graft_point;
-				while (xpnt[0] == '.' && xpnt[1] == '/')
-					xpnt += 2;
-				while (*xpnt == PATH_SEPARATOR) {
-					xpnt++;
-				}
-				strcpy(graft_point, xpnt);
-			} while (xpnt > graft_point);
-
-			if (node) {
-				node = escstrcpy(nodename, ++node);
-			} else {
-				node = arg;
-			}
-
-			graft_dir = root;
-			xpnt = graft_point;
-
-			/*
-			 * If "node" points to a directory, then graft_point
-			 * needs to point to a directory too.
-			 */
-			if (follow_links)
-				status = stat_filter(node, &st);
-			else
-				status = lstat_filter(node, &st);
-			if (status == 0 && S_ISDIR(st.st_mode)) {
-				len = strlen(graft_point);
-
-				if ((len <= (sizeof (graft_point) -1)) &&
-				    graft_point[len-1] != '/') {
-					graft_point[len++] = '/';
-					graft_point[len] = '\0';
-				}
-			}
-			if (debug)
-				fprintf(stderr, "GRAFT:'%s'\n", xpnt);
-			/*
-			 * Loop down deeper and deeper until we find the
-			 * correct insertion spot.
-			 * Canonicalize the filename while parsing it.
-			 */
-			for (;;) {
-				do {
-					while (xpnt[0] == '.' && xpnt[1] == '/')
-						xpnt += 2;
-					while (xpnt[0] == '/')
-						xpnt += 1;
-					if (xpnt[0] == '.' && xpnt[1] == '.' && xpnt[2] == '/') {
-						if (graft_dir && graft_dir != root) {
-							graft_dir = graft_dir->parent;
-							xpnt += 2;
-						}
-					}
-				} while ((xpnt[0] == '/') || (xpnt[0] == '.' && xpnt[1] == '/'));
-				pnt = strchr(xpnt, PATH_SEPARATOR);
-				if (pnt == NULL) {
-					if (*xpnt != '\0') {
-						short_name = xpnt;
-					}
-					break;
-				}
-				*pnt = '\0';
-				if (debug) {
-					fprintf(stderr, "GRAFT Point:'%s' in '%s : %s' (%s)\n",
-						xpnt,
-						graft_dir->whole_name,
-						graft_dir->de_name,
-						graft_point);
-				}
-				graft_dir = find_or_create_directory(graft_dir,
-					graft_point,
-					NULL, TRUE);
-				*pnt = PATH_SEPARATOR;
-				xpnt = pnt + 1;
-			}
-		} else {
-			graft_dir = root;
-			if (use_graft_ptrs)
-				node = escstrcpy(nodename, arg);
-			else
-				node = arg;
-		}
-
-		/*
-		 * Now see whether the user wants to add a regular file, or a
-		 * directory at this point.
-		 */
-		if (follow_links)
-			status = stat_filter(node, &st);
-		else
-			status = lstat_filter(node, &st);
-		if (status != 0) {
-			/*
-			 * This is a fatal error - the user won't be getting
-			 * what they want if we were to proceed.
-			 */
-#ifdef	USE_LIBSCHILY
-			comerr("Invalid node - '%s'.\n", node);
-#else
-			fprintf(stderr, "Invalid node - '%s'.\n", node);
-			exit(1);
-#endif
-		} else {
-			if (S_ISDIR(st.st_mode)) {
-				if (debug) {
-					fprintf(stderr, "graft_dir: '%s : %s', node: '%s', (scan)\n",
-						graft_dir->whole_name,
-						graft_dir->de_name, node);
-				}
-				if (!scan_directory_tree(graft_dir,
-								node, &de)) {
-					exit(1);
-				}
-				if (debug) {
-					fprintf(stderr, "scan done\n");
-				}
-			} else {
-				if (short_name == NULL) {
-					short_name = strrchr(node,
-							PATH_SEPARATOR);
-					if (short_name == NULL ||
-							short_name < node) {
-						short_name = node;
-					} else {
-						short_name++;
-					}
-				}
-				if (debug) {
-					fprintf(stderr, "graft_dir: '%s : %s', node: '%s', short_name: '%s'\n",
-						graft_dir->whole_name,
-						graft_dir->de_name, node,
-						short_name);
-				}
-#ifdef APPLE_HYB
-				if (!insert_file_entry(graft_dir, node,
-								short_name, 0))
-#else
-				if (!insert_file_entry(graft_dir, node,
-								short_name))
-#endif	/* APPLE_HYB */
-				{
-					/*
-					 * Should we ignore this?
-					 */
-/*					exit(1);*/
-					/* EMPTY */
-				}
-			}
-		}
-
-		optind++;
-		no_path_names = 0;
-	}
-
-	if (pfp && pfp != stdin)
-		fclose(pfp);
-
-	/*
-	 * exit if we don't have any pathnames to process
-	 * - not going to happen at the moment as we have to have at least one
-	 * path on the command line
-	 */
-	if (no_path_names && !check_session && !stream_media_size) {
-#ifdef	USE_LIBSCHILY
-		errmsgno(EX_BAD, "No pathnames found.\n");
-#endif
-		susage(1);
-	}
-	/*
-	 * Now merge in any previous sessions.  This is driven on the source
-	 * side, since we may need to create some additional directories.
-	 */
-	if (merge_image != NULL) {
-		if (merge_previous_session(root, mrootp,
-					reloc_root, reloc_old_root) < 0) {
-#ifdef	USE_LIBSCHILY
-			comerrno(EX_BAD, "Cannot merge previous session.\n");
-#else
-			fprintf(stderr, "Cannot merge previous session.\n");
-			exit(1);
-#endif
-		}
-		close_merge_image();
-
-		/*
-		 * set up parent_dir and filedir in relocated entries which
-		 * were read from previous session so that
-		 * finish_cl_pl_entries can do its job
-		 */
-		match_cl_re_entries();
-	}
-#ifdef APPLE_HYB
-	/* free up any HFS filename mapping memory */
-	if (apple_both)
-		clean_hfs();
-#endif	/* APPLE_HYB */
-
-	/* hide "./rr_moved" if all its contents have been hidden */
-	if (reloc_dir && i_ishidden())
-		hide_reloc_dir();
-
-	/* insert the boot catalog if required */
-	if (use_eltorito)
-		insert_boot_cat();
-
-	/*
-	 * Free up any matching memory
-	 */
-	for (n = 0; n < MAX_MAT; n++)
-		gen_del_match(n);
-
-#ifdef SORTING
-	del_sort();
-#endif /* SORTING */
-
-	/*
-	 * Sort the directories in the required order (by ISO9660).  Also,
-	 * choose the names for the 8.3 filesystem if required, and do any
-	 * other post-scan work.
-	 */
-	goof += sort_tree(root);
-
-	if (goof) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "ISO9660/Rock Ridge tree sort failed.\n");
-#else
-		fprintf(stderr, "ISO9660/Rock Ridge tree sort failed.\n");
-		exit(1);
-#endif
-	}
-#ifdef UDF
-	if (use_Joliet || use_udf) {
-#else
-	if (use_Joliet) {
-#endif
-		goof += joliet_sort_tree(root);
-	}
-	if (goof) {
-#ifdef	USE_LIBSCHILY
-		comerrno(EX_BAD, "Joliet tree sort failed. The -joliet-long switch may help you.\n");
-#else
-		fprintf(stderr, "Joliet tree sort failed. The -joliet-long switch may help you.\n");
-		exit(1);
-#endif
-	}
-	/*
-	 * Fix a couple of things in the root directory so that everything is
-	 * self consistent. Fix this up so that the path tables get done right.
-	 */
-	root->self = root->contents;
-
-	/* OK, ready to write the file.  Open it up, and generate the thing. */
-	if (print_size) {
-		discimage = fopen("/dev/null", "wb");
-		if (!discimage) {
-#ifdef	USE_LIBSCHILY
-			comerr("Unable to open /dev/null\n");
-#else
-			fprintf(stderr, "Unable to open /dev/null\n");
-			exit(1);
-#endif
-		}
-	} else if (outfile) {
-		discimage = fopen(outfile, "wb");
-		if (!discimage) {
-#ifdef	USE_LIBSCHILY
-			comerr("Unable to open disc image file '%s'.\n", outfile);
-#else
-			fprintf(stderr, "Unable to open disc image file '%s'.\n", outfile);
-			exit(1);
-#endif
-		}
-		if (jtemplate_out || jjigdo_out) {
-			if (!jtemplate_out || !jjigdo_out || !jmd5_list) {
-#ifdef USE_LIBSCHILY
-				comerr("Bad options - need to specify output names for jigdo and template file, and also the md5-list input file!\n");
-#else
-				fprintf(stderr, "Bad options - need to specify output names for jigdo and template file, and also the md5-list input file!\n");
-				exit(1);
-#endif
-			}
-			jtjigdo = fopen(jjigdo_out, "wb");
-			jttemplate = fopen(jtemplate_out, "wb");
-			if (!jtjigdo || !jttemplate) {
-#ifdef USE_LIBSCHILY
-				comerr("Unable to open jigdo template image file\n");
-#else
-				fprintf(stderr, "Unable to open jigdo template image file\n");
-				exit(1);
-#endif
-			}
-			write_jt_header(jttemplate, jtjigdo);
-		}
-	} else {
-		discimage = stdout;
-
-#ifdef	NEED_O_BINARY
-		setmode(fileno(stdout), O_BINARY);
-#endif
-	}
-
-	/* Now assign addresses on the disc for the path table. */
-
-	path_blocks = ISO_BLOCKS(path_table_size);
-	if (path_blocks & 1)
-		path_blocks++;
-
-	jpath_blocks = ISO_BLOCKS(jpath_table_size);
-	if (jpath_blocks & 1)
-		jpath_blocks++;
-
-	/*
-	 * Start to set up the linked list that we use to track the contents
-	 * of the disc.
-	 */
-#ifdef APPLE_HYB
-#ifdef PREP_BOOT
-	if (apple_hyb || use_prep_boot || use_chrp_boot)
-#else	/* PREP_BOOT */
-	if (apple_hyb)
-#endif	/* PREP_BOOT */
-		outputlist_insert(&hfs_desc);
-#endif	/* APPLE_HYB */
-	if (use_sparcboot || use_sunx86boot)
-		outputlist_insert(&sunlabel_desc);
-	if (use_alphaboot)
-		outputlist_insert(&alphaboot_desc);
-	if (use_hppaboot)
-		outputlist_insert(&hppaboot_desc);
-	if (use_mipsboot)
-		outputlist_insert(&mipsboot_desc);
-	if (use_mipselboot)
-		outputlist_insert(&mipselboot_desc);
-	if (use_genboot)
-		outputlist_insert(&genboot_desc);
-	outputlist_insert(&startpad_desc);
-
-	/* PVD for disc. */
-	outputlist_insert(&voldesc_desc);
-
-	/* SVD for El Torito. MUST be immediately after the PVD! */
-	if (use_eltorito) {
-		outputlist_insert(&torito_desc);
-	}
-	/* Enhanced PVD for disc. neded if we write ISO-9660:1999 */
-	if (iso9660_level > 3)
-		outputlist_insert(&xvoldesc_desc);
-
-	/* SVD for Joliet. */
-	if (use_Joliet) {
-		outputlist_insert(&joliet_desc);
-	}
-	/* Finally the last volume descriptor. */
-	outputlist_insert(&end_vol);
-
-#ifdef UDF
-	if (use_udf) {
-		outputlist_insert(&udf_vol_recognition_area_frag);
-	}
-#endif
-
-	/* Insert the version descriptor. */
-	outputlist_insert(&version_desc);
-
-#ifdef UDF
-	if (use_udf) {
-		/*
-		 * Most of the space before sector 256 is wasted when
-		 * UDF is turned on. The waste could be reduced by
-		 * putting the ISO9660/Joliet structures before the
-		 * pad_to_sector_256; the problem is that they might
-		 * overshoot sector 256, so there would have to be some
-		 * ugly logic to detect this case and rearrange things
-		 * appropriately. I don't know if it's worth it.
-		 */
-		outputlist_insert(&udf_pad_to_sector_32_frag);
-		outputlist_insert(&udf_main_seq_frag);
-		outputlist_insert(&udf_main_seq_copy_frag);
-		outputlist_insert(&udf_integ_seq_frag);
-		outputlist_insert(&udf_pad_to_sector_256_frag);
-		outputlist_insert(&udf_anchor_vol_desc_frag);
-		outputlist_insert(&udf_file_set_desc_frag);
-		outputlist_insert(&udf_dirtree_frag);
-		outputlist_insert(&udf_file_entries_frag);
-	}
-#endif
-
-	/* Now start with path tables and directory tree info. */
-	if (!stream_media_size)
-		outputlist_insert(&pathtable_desc);
-	else
-		outputlist_insert(&strpath_desc);
-
-	if (use_Joliet) {
-		outputlist_insert(&jpathtable_desc);
-	}
-
-	if (!stream_media_size)
-		outputlist_insert(&dirtree_desc);
-
-	if (use_Joliet) {
-		outputlist_insert(&jdirtree_desc);
-	}
-	outputlist_insert(&dirtree_clean);
-
-	if (extension_record) {
-		outputlist_insert(&extension_desc);
-	}
-
-	if (!stream_media_size) {
-		outputlist_insert(&files_desc);
-	} else {
-		outputlist_insert(&strfile_desc);
-		outputlist_insert(&strdir_desc);
-	}
-
-	/*
-	 * Allow room for the various headers we will be writing.
-	 * There will always be a primary and an end volume descriptor.
-	 */
-	last_extent = session_start;
-
-	/*
-	 * Calculate the size of all of the components of the disc, and assign
-	 * extent numbers.
-	 */
-	for (opnt = out_list; opnt; opnt = opnt->of_next) {
-		opnt->of_start_extent = last_extent;
-		if (opnt->of_size != NULL) {
-			(*opnt->of_size) (last_extent);
-		}
-	}
-
-	/*
-	 * Generate the contents of any of the sections that we want to
-	 * generate. Not all of the fragments will do anything here
-	 * - most will generate the data on the fly when we get to the write
-	 * pass.
-	 */
-	for (opnt = out_list; opnt; opnt = opnt->of_next) {
-		if (opnt->of_generate != NULL) {
-			(*opnt->of_generate) ();
-		}
-	}
-
-	/*
-	 * Padding just after the ISO-9660 filesystem.
-	 *
-	 * files_desc does not have an of_size function. For this
-	 * reason, we must insert us after the files content has been
-	 * generated.
-	 */
-#ifdef UDF
-	if (use_udf) {
-		/* Single anchor volume descriptor pointer at end */
-		outputlist_insert(&udf_end_anchor_vol_desc_frag);
-		if (udf_end_anchor_vol_desc_frag.of_size != NULL) {
-			(*udf_end_anchor_vol_desc_frag.of_size) (last_extent);
-		}
-		if (dopad) {
-			/*
-			 * Pad with anchor volume descriptor pointer
-			 * blocks instead of zeroes.
-			 */
-			outputlist_insert(&udf_padend_avdp_frag);
-			if (udf_padend_avdp_frag.of_size != NULL) {
-				(*udf_padend_avdp_frag.of_size) (last_extent);
-			}
-		}
-	} else
-#endif
-	if (dopad && !(use_sparcboot || use_sunx86boot)) {
-		outputlist_insert(&endpad_desc);
-		if (endpad_desc.of_size != NULL) {
-			(*endpad_desc.of_size) (last_extent);
-		}
-	}
-	c = 0;
-	if (use_sparcboot) {
-		if (dopad) {
-			/* Padding before the boot partitions. */
-			outputlist_insert(&interpad_desc);
-			if (interpad_desc.of_size != NULL) {
-				(*interpad_desc.of_size) (last_extent);
-			}
-		}
-		c = make_sun_label();
-		last_extent += c;
-		outputlist_insert(&sunboot_desc);
-		if (dopad) {
-			outputlist_insert(&endpad_desc);
-			if (endpad_desc.of_size != NULL) {
-				(*endpad_desc.of_size) (last_extent);
-			}
-		}
-	} else if (use_sunx86boot) {
-		if (dopad) {
-			/* Padding before the boot partitions. */
-			outputlist_insert(&interpad_desc);
-			if (interpad_desc.of_size != NULL) {
-				(*interpad_desc.of_size) (last_extent);
-			}
-		}
-		c = make_sunx86_label();
-		last_extent += c;
-		outputlist_insert(&sunboot_desc);
-		if (dopad) {
-			outputlist_insert(&endpad_desc);
-			if (endpad_desc.of_size != NULL) {
-				(*endpad_desc.of_size) (last_extent);
-			}
-		}
-	}
-	if (print_size > 0) {
-		if (verbose > 0)
-			fprintf(stderr,
-			"Total extents scheduled to be written = %d\n",
-			(last_extent - session_start));
-		printf("%d\n", (last_extent - session_start));
-		exit(0);
-	}
-	/*
-	 * Now go through the list of fragments and write the data that
-	 * corresponds to each one.
-	 */
-	for (opnt = out_list; opnt; opnt = opnt->of_next) {
-		Uint	oext;
-
-		oext = last_extent_written;
-		if (opnt->of_start_extent != 0 &&
-		    opnt->of_start_extent != last_extent_written) {
-			/*
-			 * Consistency check.
-			 * XXX Should make sure that all entries have
-			 * XXXX of_start_extent set up correctly.
-			 */
-			comerrno(EX_BAD,
-			"Implementation botch: %s should start at %u but starts at %u.\n",
-			opnt->of_name, opnt->of_start_extent, last_extent_written);
-		}
-		if (opnt->of_write != NULL) {
-			if (verbose > 1)
-				fprintf(stderr, "Writing:   %-40sStart Block %u\n",
-					opnt->of_name, last_extent_written);
-			(*opnt->of_write) (discimage);
-			if (verbose > 1)
-				fprintf(stderr, "Done with: %-40sBlock(s)    %d\n",
-					opnt->of_name, last_extent_written-oext);
-		}
-	}
-	if (last_extent != last_extent_written) {
-		comerrno(EX_BAD,
-		"Implementation botch: FS should end at %u but ends at %u.\n",
-				last_extent, last_extent_written);
-	}
-
-	if (jttemplate) {
-		write_jt_footer();
-		fclose(jttemplate);
-	}
-	if (jtjigdo)
-		fclose(jtjigdo);
-
-	if (verbose > 0) {
-#ifdef HAVE_SBRK
-		fprintf(stderr, "Max brk space used %x\n",
-			(unsigned int)(((unsigned long) sbrk(0)) - mem_start));
-#endif
-		fprintf(stderr, "%d extents written (%d MB)\n",
-			last_extent, last_extent >> 9);
-	}
-#ifdef VMS
-	return (1);
-#else
-	return (0);
-#endif
-}
-
-/*
- * Find unescaped equal sign in graft pointer string.
- */
-char *
-findgequal(char *s)
-{
-	char	*p = s;
-
-	while ((p = strchr(p, '=')) != NULL) {
-		if (p > s && p[-1] != '\\')
-			return (p);
-		p++;
-	}
-	return (NULL);
-}
-
-/*
- * Find unescaped equal sign in string.
- */
-static char *
-escstrcpy(char *to, char *from)
-{
-	char	*p = to;
-
-	if (debug)
-		fprintf(stderr, "FROM: '%s'\n", from);
-
-	while ((*p = *from++) != '\0') {
-		if (*p == '\\') {
-			if ((*p = *from++) == '\0')
-				break;
-			if (*p != '\\' && *p != '=') {
-				p[1] = p[0];
-				*p++ = '\\';
-			}
-		}
-		p++;
-	}
-	if (debug)
-		fprintf(stderr, "ESC:  '%s'\n", to);
-	return (to);
-}
-
-void *
-e_malloc(size_t size)
-{
-	void		*pt = 0;
-
-	if ((size > 0) && ((pt = malloc(size)) == NULL)) {
-#ifdef	USE_LIBSCHILY
-		comerr("Not enough memory\n");
-#else
-		fprintf(stderr, "Not enough memory\n");
-		exit(1);
-#endif
-	}
-	/*
-	 * Not all code is clean yet.
-	 * Filling all allocated data with zeroes will help
-	 * to avoid core dumps.
-	 */
-	memset(pt, 0, size);
-	return (pt);
-}

Deleted: cdrkit/trunk/mkisoimage/mkisofs.h
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisofs.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,800 +0,0 @@
-/*
- * 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.
- *
- */
-
-/* @(#)mkisofs.h	1.95 05/05/01 joerg */
-/*
- * Header file mkisofs.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 at ge.ucl.ac.uk 23/2/2000 */
-
-#define APPID_DEFAULT "MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"
-
-
-#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
-
-#ifndef __SVR4
-extern int	optind;
-extern char	*optarg;
-
-/* extern int getopt (int __argc, char **__argv, char *__optstring); */
-#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
-};
-
-struct file_hash {
-	struct file_hash *next;
-	ino_t		inode;		/* Used in the hash table */
-	dev_t		dev;		/* Used in the hash table */
-	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 mkisofs 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 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/mkisofs 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);
-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);
->>>>>>> .merge-rechts.r368
-#   endif
-extern	int	joliet_strlen		__PR((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

Copied: cdrkit/trunk/mkisoimage/mkisoimage.8 (from rev 449, cdrkit/trunk/mkisoimage/mkisofs.8)
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.8	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisoimage.8	2006-11-23 21:37:32 UTC (rev 450)
@@ -0,0 +1,3036 @@
+'\" t
+.\" To print, first run through tbl
+.\" -*- nroff -*-
+.\" @(#)mkisoimage.8	1.109 05/05/01 joerg
+.\"
+.if t .ds a \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'a
+.if t .ds o \v'-0.55m'\h'0.00n'\z.\h'0.45n'\z.\v'0.55m'\h'-0.45n'o
+.if t .ds u \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'u
+.if t .ds A \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'A
+.if t .ds O \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'O
+.if t .ds U \v'-0.77m'\h'0.30n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.75n'U
+.if t .ds s \\(*b
+.if t .ds S SS
+.if n .ds a ae
+.if n .ds o oe
+.if n .ds u ue
+.if n .ds s sz
+.TH MKISOFS 8 "24 Aug 2006" "Version 2.01"
+.SH NAME
+mkisoimage \- create an hybrid ISO9660/JOLIET/HFS filesystem with optional Rock Ridge attributes.
+.SH SYNOPSIS
+.B mkisoimage
+[
+.I options
+]
+[
+.B \-o
+.I filename
+]
+.I pathspec [pathspec ...]
+.SH DESCRIPTION
+.B mkisoimage
+is a pre-mastering program to generate ISO9660/JOLIET/HFS hybrid
+filesystems.
+.PP
+.B mkisoimage
+is capable of generating the 
+.B "System Use Sharing Protocol records (SUSP)
+specified
+by the 
+.B "Rock Ridge Interchange Protocol.
+This is used to further describe the
+files in the ISO9660 filesystem to a Unix host, and provides information such
+as long filenames, UID/GID, POSIX permissions, symbolic links,
+block and character devices.
+.PP
+If Joliet or HFS hybrid command line options are specified, 
+.B mkisoimage
+will create the additional filesystem metadata needed for Joliet or HFS.
+If no Joliet or HFS hybrid command line options are given,
+.B mkisoimage
+will generate a pure ISO9660 filesystem.
+.PP
+.B mkisoimage
+can generate a 
+.I true
+(or
+.IR shared )
+HFS hybrid filesystem. The same files are seen as HFS files when
+accessed from a Macintosh and as ISO9660 files when accessed from other 
+machines. HFS stands for
+.I Hierarchical File System
+and is the native file system used on Macintosh computers.
+.PP
+As an alternative,
+.B mkisoimage
+can generate the
+.I Apple Extensions to ISO9660
+for each file. These extensions provide each file with CREATOR, TYPE and
+certain Finder Flags when accessed from a Macintosh. See the
+.B HFS MACINTOSH FILE FORMATS
+section below.
+.PP
+.B mkisoimage
+takes a snapshot of a given directory tree, and generates a
+binary image which will correspond to an ISO9660 or HFS filesystem when
+written to a block device.
+.PP
+Each file written to the ISO9660 filesystem must have a filename in the 8.3
+format (8 characters, period, 3 characters, all upper case), even if Rock Ridge
+is in use.  This filename is used on systems that are not able to make use of
+the Rock Ridge extensions (such as MS-DOS), and each filename in each directory
+must be different from the other filenames in the same directory.
+.B mkisoimage
+generally tries to form correct names by forcing the Unix filename to upper
+case and truncating as required, but often times this yields unsatisfactory
+results when there are cases where the
+truncated names are not all unique.
+.B mkisoimage
+assigns weightings to each filename, and if two names that are otherwise the
+same are found the name with the lower priority is renamed to have a 3 digit
+number as an extension (where the number is guaranteed to be unique).  An
+example of this would be the files foo.bar and
+foo.bar.~1~ - the file foo.bar.~1~ would be written as FOO000.BAR;1 and the file
+foo.bar would be written as FOO.BAR;1
+.PP
+When used with various HFS options,
+.B mkisoimage
+will attempt to recognise files stored in a number of Apple/Unix file formats
+and will copy the data and resource forks as well as any
+relevant finder information. See the
+.B HFS MACINTOSH FILE FORMATS
+section below for more about formats
+.B mkisoimage
+supports.
+.PP
+Note that
+.B mkisoimage
+is not designed to communicate with the writer directly.  Most writers
+have proprietary command sets which vary from one manufacturer to
+another, and you need a specialized tool to actually burn the disk.
+.PP
+The
+.B wodim
+utility is a utility capable of burning an actual disc.  The latest version
+of
+.B wodim
+is available from
+http://alioth.debian.org/projects/debburn/
+.PP
+Also you should know that most cd writers are very particular about timing.
+Once you start to burn a disc, you cannot let their buffer empty before you
+are done, or you will end up with a corrupt disc.  Thus it is critical
+that you be able to maintain an uninterrupted data stream to the writer
+for the entire time that the disc is being written.
+.PP
+.B pathspec
+is the path of the directory tree to be copied into the ISO9660 filesystem.
+Multiple paths can be specified, and
+.B
+mkisoimage
+will merge the files found in all of the specified path components to form the cdrom
+image.
+.PP
+If the option
+.I \-graft\-points
+has been specified, 
+it is possible to graft the paths at points other than the root
+directory, and it is possible to graft files or directories onto the
+cdrom image with names different than what they have in the source filesystem.  This is
+easiest to illustrate with a couple of examples.   Let's start by assuming that a local
+file ../old.lis exists, and you wish to include it in the cdrom image.
+
+
+	foo/bar/=../old.lis
+
+will include the file old.lis in the cdrom image at /foo/bar/old.lis, while
+
+	foo/bar/xxx=../old.lis
+
+will include the file old.lis in the cdrom image at /foo/bar/xxx.  The
+same sort of syntax can be used with directories as well.
+.B mkisoimage
+will create any directories required such that the graft
+points exist on the cdrom image - the directories do not need to
+appear in one of the paths.  By default, any directories that are created on 
+the fly like this will have permissions 0555 and appear to be owned by the
+person running mkisoimage.  If you wish other permissions or owners of
+the intermediate directories, see \-uid, \-gid, \-dir\-mode, \-file\-mode and
+\-new\-dir\-mode.
+.PP
+.B mkisoimage
+will also run on Win9X/NT4 machines when compiled with Cygnus' cygwin
+(available from http://sourceware.cygnus.com/cygwin/). Therefore most
+references in this man page to
+.I Unix
+can be replaced with
+.IR Win32 .
+
+.SH OPTIONS
+.TP
+.BI \-abstract " FILE
+Specifies the abstract file name.
+There is space on the disc for 37 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with ABST=filename.
+If specified in both places, the command line version is used.
+.TP
+.BI \-A " application_id
+Specifies a text string that will be written into the volume header.
+This should describe the application that will be on the disc.  There
+is space on the disc for 128 characters of information.  This parameter can
+also be set in the file
+.B \&.m\&kisofsrc
+with APPI=id.
+If specified in both places, the command line version is used.
+.TP
+.B \-allow\-leading\-dots
+.TP
+.B \-ldots
+Allow ISO9660 filenames to begin with a period.  Usually, a leading dot is
+replaced with an underscore in order to maintain MS-DOS compatibility.
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.B \-allow\-lowercase
+This options allows lower case characters to appear in ISO9660 file names.
+.br
+This violates the ISO9660 standard, but it happens to work on some systems.
+Use with caution.
+.TP
+.B \-allow\-multidot
+This options allows more than one dot to appear in ISO9660 filenames.
+A leading dot is not affected by this option, it
+may be allowed separately using the
+.B \-allow\-leading\-dots
+option.
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.BI \-biblio " FILE
+Specifies the bibliographic file name.
+There is space on the disc for 37 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with BIBLO=filename.
+If specified in both places, the command line version is used.
+.TP
+.B \-cache\-inodes
+Cache inode and device numbers to find hard links to files.
+If
+.B mkisoimage
+finds a hard link (a file with multiple names), then the file will only
+appear once on the CD. This helps to save space on the CD.
+The option
+.B \-cache\-inodes
+is default on Unix like operating systems.
+Be careful when using this option on a filesystem without unique
+inode numbers as it may result in files containing the wrong content on CD.
+.TP
+.B \-no\-cache\-inodes
+Do not cache inode and device numbers.
+This option is needed whenever a filesystem does not have unique
+inode numbers. It is the default on
+.BR Cygwin .
+As the Microsoft operating system that runs below
+.B Cygwin
+is not POSIX compliant, it does not have unique inode numbers.
+Cygwin creates fake inode numbers from a hash algorithm that
+is not 100% correct.
+If
+.B mkisoimage
+would cache inodes on Cygwin, it would believe that some files are
+identical although they are not. The result in this case are files
+that contain the wrong content if a significant amount of different
+files (> ~5000) is in inside the tree that is to be archived.
+This does not happen when the
+.B \-no\-cache\-inodes is used, but the disadvantage is that
+.B mkisoimage
+cannot detect hardlinks anymore and the resulting CD image may be larger
+than expected.
+.TP
+.BI \-alpha\-boot " alpha_boot_image
+Specifies the path and filename of the boot image to be used when
+making an Alpha/SRM bootable CD. The pathname must be relative to the
+source path specified to
+.B mkisoimage.
+.TP
+.BI \-hppa\-bootloader " hppa_bootloader_image
+Specifies the path and filename of the boot image to be used when
+making an HPPA bootable CD. The pathname must be relative to the
+source path specified to
+.B mkisoimage.
+Other options are required, at the very least a kernel file name and
+the boot command line. See the
+.B HPPA NOTES
+section below for more information.
+.TP
+.BI \-hppa\-cmdline " hppa_boot_command_line
+Specifies the command line to be passed to the hppa boot loader when
+making a bootable CD. Separate the parameters with spaces or
+commas. More options must be passed to
+.B mkisoimage,
+at the very least a kernel file name and the boot loader file
+name. See the
+.B HPPA NOTES
+section below for more information.
+.TP
+.BI \-hppa\-kernel\-32 " hppa_kernel_32
+Specifies the path and filename of the 32-bit kernel image to be used
+when making an HPPA bootable CD. The pathname must be relative to the
+source path specified to
+.B mkisoimage.
+Other options are required, at the very least the boot loader file
+name and the boot command line. See the
+.B HPPA NOTES
+section below for more information.
+.TP
+.BI \-hppa\-kernel\-64 " hppa_kernel_64
+Specifies the path and filename of the 64-bit kernel image to be used
+when making an HPPA bootable CD. The pathname must be relative to the
+source path specified to
+.B mkisoimage.
+Other options are required, at the very least the boot loader file
+name and the boot command line. See the
+.B HPPA NOTES
+section below for more information.
+.TP
+.BI \-hppa\-ramdisk " hppa_ramdisk_image
+Specifies the path and filename of the ramdisk image to be used when
+making an HPPA bootable CD. The pathname must be relative to the
+source path specified to
+.B mkisoimage.
+This parameter is
+.B optional.
+Other options are required, at the very
+least a kernel file name and the boot command line. See the
+.B HPPA NOTES
+section below for more information.
+.TP
+.BI \-mips\-boot " mips_boot_image
+Specifies the path and filename of the boot image to be used when
+making an SGI/big-endian MIPS bootable CD. The pathname must be
+relative to the source path specified to
+.B mkisoimage.
+This option may be specified several times to allow the addition of
+multiple boot images, up to a maximum of 15.
+.TP
+.BI \-mipsel\-boot " mipsel_boot_image
+Specifies the path and filename of the boot image to be used when
+making an DEC/little-endian MIPS bootable CD. The pathname must be
+relative to the source path specified to
+.B mkisoimage.
+.TP
+.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
+Specifies a comma separated list of boot images that are needed to make
+a bootable CD for sparc systems.
+Partition 0 is used for the ISO9660 image, the first image file is mapped
+to partition 1.
+There may be empty fields in the comma separated list.
+The maximum number of possible partitions is 8 so it is impossible to specify
+more than 7 partition images.
+This option is required to make a bootable CD for Sun sparc systems.
+If the
+.B \-B
+or
+.B \-sparc\-boot
+option has been specified, the first sector of the resulting image will
+contain a Sun disk label. This disk label specifies slice 0 for the
+ISO9660 image and slice 1 .\|.\|. slice 7 for the boot images that
+have been specified with this option. Byte offset 512 .\|.\|. 8191
+within each of the additional boot images must contain a primary boot
+that works for the appropriate sparc architecture. The rest of each
+of the images usually contains an ufs filesystem that is used primary
+kernel boot stage.
+.sp
+The implemented boot method is the boot method found with SunOS 4.x and SunOS 5.x.
+However, it does not depend on SunOS internals but only on properties of
+the Open Boot prom. For this reason, it should be usable for any OS
+that boots off a sparc system.
+.sp
+For more information also see the 
+.B NOTES
+section below.
+.sp
+If the special filename
+.B "..."
+is used, the actual and all following boot partitions are mapped to the
+previous partition. If
+.B mkisoimage
+is called with
+.BI "\-G " image " \-B " ...
+all boot partitions are mapped to the partition that contains the ISO9660
+filesystem image and the generic boot image that is located in the first
+16 sectors of the disk is used for all architectures.
+.TP
+.BI \-b " eltorito_boot_image
+Specifies the path and filename of the boot image to be used when making
+an "El Torito" bootable CD. The pathname must be relative to the source
+path specified to
+.B mkisoimage.
+This option is required to make an "El Torito" bootable CD.
+The boot image must be exactly the size of either a 1200, 1440, or a 2880
+kB floppy, and
+.B mkisoimage
+will use this size when creating the output ISO9660
+filesystem. It is assumed that the first 512 byte sector should be read
+from the boot image (it is essentially emulating a normal floppy drive).
+This will work, for example, if the boot image is a LILO based boot floppy.
+.sp
+If the boot image is not an image of a floppy, you need to add one of the
+options:
+.BR \-hard\-disk\-boot " or " \-no\-emul\-boot .
+If the system should not boot off the emulated disk, use
+.BR \-no\-boot .
+.sp
+If the
+.B \-sort
+option has not been specified, the boot images are sorted
+with low priority (+2) to the beginning of the medium.
+If you don't like this, you need to specify a sort weight of 0 for the boot images.
+.TP
+.B \-eltorito\-alt\-boot
+Start with a new set of "El Torito" boot parameters.
+This allows to have more than one El Torito boot on a CD.
+A maximum of 63 El Torito boot entries may be put on a single CD.
+.TP
+.BI \-B " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
+.TP
+.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
+Specifies a comma separated list of boot images that are needed to make
+a bootable CD for sparc systems.
+Partition 0 is used for the ISO9660 image, the first image file is mapped
+to partition 1.
+There may be empty fields in the comma separated list.
+The maximum number of possible partitions is 8 so it is impossible to specify
+more than 7 partition images.
+This option is required to make a bootable CD for Sun sparc systems.
+If the
+.B \-B
+or
+.B \-sparc\-boot
+option has been specified, the first sector of the resulting image will
+contain a Sun disk label. This disk label specifies slice 0 for the
+ISO9660 image and slice 1 .\|.\|. slice 7 for the boot images that
+have been specified with this option. Byte offset 512 .\|.\|. 8191
+within each of the additional boot images must contain a primary boot
+that works for the appropriate sparc architecture. The rest of each
+of the images usually contains an ufs filesystem that is used primary
+kernel boot stage.
+.sp
+The implemented boot method is the boot method found with SunOS 4.x and SunOS 5.x.
+However, it does not depend on SunOS internals but only on properties of
+the Open Boot prom. For this reason, it should be usable for any OS
+that boots off a sparc system.
+.sp
+For more information also see the 
+.B NOTES
+section below.
+.sp
+If the special filename
+.B "..."
+is used, the actual and all following boot partitions are mapped to the
+previous partition. If
+.B mkisoimage
+is called with
+.BI "\-G " image " \-B " ...
+all boot partitions are mapped to the partition that contains the ISO9660
+filesystem image and the generic boot image that is located in the first
+16 sectors of the disk is used for all architectures.
+.TP
+.BI \-G " generic_boot_image
+Specifies the path and filename of the generic boot image to be used when making
+a generic bootable CD.
+The
+.B generic_boot_image
+will be placed on the first 16 sectors of the CD. The first 16 sectors
+are the sectors that are located before the ISO9660 primary volume descriptor.
+If this option is used together with the
+.B \-sparc\-boot
+option, the Sun disk label will overlay the first 512 bytes of the generic
+boot image.
+.TP
+.BI \-hard\-disk\-boot
+Specifies that the boot image used to create "El Torito" bootable CDs is
+a hard disk image. The hard disk image must begin with a master boot
+record that contains a single partition.
+.TP
+.BI \-no\-emul\-boot
+Specifies that the boot image used to create "El Torito" bootable CDs is
+a 'no emulation' image. The system will load and execute this image without
+performing any disk emulation.
+.TP
+.BI \-no\-boot
+Specifies that the created "El Torito" CD should be marked as not bootable. The
+system will provide an emulated drive for the image, but will boot off
+a standard boot device.
+.TP
+.BI \-boot\-load\-seg " segment_address
+Specifies the load segment address of the boot image for no-emulation
+"El Torito" CDs.
+.TP
+.BI \-boot\-load\-size " load_sectors
+Specifies the number of "virtual" (512-byte) sectors to load in
+no-emulation mode.  The default is to load the entire boot file.  Some
+BIOSes may have problems if this is not a multiple of 4.
+.TP
+.BI \-boot\-info\-table
+Specifies that a 56-byte table with information of the CD-ROM layout
+will be patched in at offset 8 in the boot file.  If this option is
+given, the boot file is modified in the source filesystem, so make
+sure to make a copy if this file cannot be easily regenerated!  See
+the
+.B "EL TORITO BOOT INFO TABLE
+section for a description of this table.
+.TP
+.BI \-C " last_sess_start,next_sess_start
+This option is needed when
+.B mkisoimage
+is used to create a CD Extra or the image of a second session or a 
+higher level session for a multi session disk.
+The option
+.B \-C
+takes a pair of two numbers separated by a comma. The first number is the
+sector number of the first sector in the last session of the disk
+that should be appended to.
+The second number is the starting sector number of the new session.
+The expected pair of numbers may be retrieved by calling
+.B "wodim \-msinfo ...
+If the
+.B \-C
+option is used in conjunction with the
+.B \-M
+option,
+.B mkisoimage
+will create a filesystem image that is intended to be a continuation
+of the previous session.
+If the
+.B \-C
+option is used without the
+.B \-M
+option,
+.B mkisoimage
+will create a filesystem image that is intended to be used for a second
+session on a CD Extra. This is a multi session CD that holds audio data
+in the first session and a ISO9660 filesystem in the second session.
+.TP
+.BI \-c " boot_catalog
+Specifies the path and filename of the boot catalog to be used when making
+an "El Torito" bootable CD. The pathname must be relative to the source
+path specified to
+.B mkisoimage.
+This option is required to make a bootable CD.
+This file will be inserted into the output tree and not created
+in the source filesystem, so be
+sure the specified filename does not conflict with an existing file, as
+it will be excluded. Usually a name like "boot.catalog" is
+chosen.
+.sp
+If the
+.B \-sort
+option has not been specified, the boot catalog sorted
+with low priority (+1) to the beginning of the medium.
+If you don't like this, you need to specify a sort weight of 0 for the boot catalog.
+.TP
+.B \-check\-oldnames
+Check all filenames imported from old session for compliance with
+actual 
+.B mkisoimage 
+ISO9660 file naming rules.
+It his option is not present, only names with a length > 31 are checked
+as these files are a hard violation of the ISO9660 standard.
+.TP
+.BI \-check\-session " FILE
+Check all old sessions for compliance with
+actual 
+.B mkisoimage 
+ISO9660 file naming rules.
+This is a high level option that is a combination of the options:
+.BI \-M " FILE " "\-C 0,0 \-check\-oldnames
+For the parameter 
+.I FILE
+see description of
+.B \-M
+option.
+.TP
+.BI \-copyright " FILE
+Specifies the copyright file name.
+There is space on the disc for 37 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with COPY=filename.
+If specified in both places, the command line version is used.
+.TP
+.B \-d
+Omit trailing period from files that do not have a period.
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.B \-D
+Do not use deep directory relocation, and instead just pack them in the
+way we see them.
+.br
+If ISO9660:1999 has not been selected,
+this violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.BI \-dir\-mode " mode
+Overrides the mode of directories used to create the image to
+.IR mode .
+Specifying this option automatically enables Rock Ridge extensions.
+.TP
+.B \-dvd\-video
+Generate a DVD-Video compliant UDF file system. This is done by sorting the
+order of the content of the appropriate files and by adding padding 
+between the files if needed.
+Note that the sorting only works if the DVD-Video filenames include upper case
+characters only.
+.br
+.br
+Note that in order to get a DVD-Video compliant filesystem image, you need
+to prepare a DVD-Video compliant directory tree. This means you need to
+have a directory VIDEO_TS (all caps) in the root directory of the resulting DVD
+and you should have a directory AUDIO_TS. The directory VIDEO_TS needs to
+include all needed files (file names must be all caps) for a compliant DVD-Video
+filesystem.
+.TP
+.B \-f
+Follow symbolic links when generating the filesystem.  When this option is not
+in use, symbolic links will be entered using Rock Ridge if enabled, otherwise
+the file will be ignored.
+.TP
+.BI \-file\-mode " mode
+Overrides the mode of regular files used to create the image to
+.IR mode .
+Specifying this option automatically enables Rock Ridge extensions.
+.TP
+.BI \-gid " gid
+Overrides the gid read from the source files to the value of
+.IR gid . 
+Specifying this option automatically enables Rock Ridge extensions.
+.TP
+.B \-gui
+Switch the behaviour for a GUI. This currently makes the output more verbose
+but may have other effects in future.
+.TP
+.B \-graft\-points
+Allow to use graft points for filenames. If this option is used, all filenames
+are checked for graft points. The filename is divided at the first unescaped
+equal sign. All occurrences of '\\\\' and '=' characters must be escaped with '\\\\'
+if 
+.I \-graft\-points
+has been specified.
+.TP
+.BI \-hide " glob
+Hide
+.I glob
+from being seen on the ISO9660 or Rock Ridge directory.
+.I glob
+is a shell wild-card-style pattern that must match any part of the filename 
+or path.
+Multiple globs may be hidden.
+If
+.I glob
+matches a directory, then the contents of that directory will be hidden.
+In order to match a directory name, make sure the pathname does not include
+a trailing '/' character.
+All the hidden files will still be written to the output CD image file.
+Should be used with the
+.B \-hide\-joliet
+option. See README.hide for more details.
+.TP
+.BI \-hide\-list " file
+A file containing a list of
+.I globs
+to be hidden as above.
+.TP
+.BI \-hidden " glob
+Add the hidden (existence) ISO9660 directory attribute for
+.IR glob .
+This attribute will prevent 
+.I glob
+from being listed on DOS based systems if the /A flag is not used for the listing.
+.I glob
+is a shell wild-card-style pattern that must match any part of the filename 
+or path.
+In order to match a directory name, make sure the pathname does not include
+a trailing '/' character.
+Multiple globs may be hidden.
+.TP
+.BI \-hidden\-list " file
+A file containing a list of
+.I globs
+to get the hidden attribute as above.
+.TP
+.BI \-hide\-joliet " glob
+Hide
+.I glob
+from being seen on the Joliet directory.
+.I glob
+is a shell wild-card-style pattern that must match any part of the filename 
+or path.
+Multiple globs may be hidden.
+If
+.I glob
+matches a directory, then the contents of that directory will be hidden.
+In order to match a directory name, make sure the pathname does not include
+a trailing '/' character.
+All the hidden files will still be written to the output CD image file.
+Should be used with the
+.B \-hide
+option. See README.hide for more details.
+.TP
+.BI \-hide\-joliet\-list " file
+A file containing a list of
+.I globs
+to be hidden as above.
+.TP
+.B \-hide\-joliet\-trans\-tbl
+Hide the
+.B TRANS.TBL
+files from the Joliet tree.
+These files usually don't make sense in the Joliet World as they list
+the real name and the ISO9660 name which may both be different from the
+Joliet name.
+.TP
+.B \-hide\-rr\-moved
+Rename the directory
+.B RR_MOVED
+to
+.B .rr_moved
+in the Rock Ridge tree.
+It seems to be impossible to completely hide the
+.B RR_MOVED
+directory from the Rock Ridge tree.
+This option only makes the visible tree better to understand for
+people who don't know what this directory is for.
+If you need to have no
+.B RR_MOVED
+directory at all, you should use the
+.B \-D
+option. Note that in case that the
+.B \-D
+option has been specified, the resulting filesystem is not ISO9660
+level-1 compliant and will not be readable on MS-DOS.
+See also 
+.B NOTES
+section for more information on the 
+.B RR_MOVED
+directory.
+.TP
+.BI \-input\-charset " charset
+Input charset that defines the characters used in local file names.
+To get a list of valid charset names, call
+.B "mkisoimage \-input\-charset help.
+To get a 1:1 mapping, you may use
+.B default
+as charset name. The default initial values are
+.I cp437
+on DOS based systems and
+.I iso8859-1
+on all other systems.
+See 
+.B "CHARACTER SETS
+section below for more details.
+.TP
+.BI \-output\-charset " charset
+Output charset that defines the characters that will be used in Rock Ridge
+file names. Defaults to the input charset. See
+.B "CHARACTER SETS
+section below for more details.
+.TP
+.BI \-iso\-level " level
+Set the ISO9660 conformance level. Valid numbers are 1..3 and 4.
+.sp
+With level 1, files may only consist of one section and filenames are
+restricted to 8.3 characters.
+.sp
+With level 2, files may only consist of one section.
+.sp
+With level 3, no restrictions (other than ISO-9660:1988) do apply.
+.sp
+With all ISO9660 levels from 1..3, all filenames are restricted to upper
+case letters, numbers and the underscore (_). The maximum filename
+length is restricted to 31 characters, the directory nesting level
+is restricted to 8 and the maximum path length is limited to 255 characters.
+.sp
+Level 4 officially does not exists but 
+.B mkisoimage
+maps it to ISO-9660:1999 which is ISO9660 version 2.
+.sp
+With level 4, an enhanced volume descriptor with version number
+and file structure version number set to 2 is emitted.
+There may be more than 8 levels of directory nesting,
+there is no need for a file to contain a dot and the dot has no
+more special meaning,
+file names do not have version numbers,
+.\" (f XXX ??? The character used for filling byte positions which are
+.\"     specified to be characters is subject to agreement between the
+.\"     originator and the recipient of the volume),
+the maximum length for files and directory is raised to 207.
+If Rock Ridge is used, the maximum ISO9660 name length is reduced to 197.
+.sp
+When creating Version 2 images,
+.B mkisoimage
+emits an enhanced volume descriptor which looks similar to a primary volume
+descriptor but is slightly different. Be careful not to use broken software
+to make ISO9660 images bootable by assuming a second PVD copy and patching 
+this putative PVD copy into an El Torito VD.
+.TP
+.B \-J
+Generate Joliet directory records in addition to regular ISO9660 file
+names.  This is primarily useful when the discs are to be used on Windows
+machines.  The Joliet filenames are specified in Unicode and
+each path component can be up to 64 Unicode characters long.
+Note that Joliet is not a standard - CDs that use only Joliet extensions but no
+standard Rock Ridge extensions may usually only be used on Microsoft Win32
+systems. Furthermore, the fact that the filenames are limited to 64 characters
+and the fact that Joliet uses the UTF-16 coding for Unicode characters causes
+interoperability problems.
+.TP
+.B \-joliet\-long
+Allow Joliet filenames to be up to 103 Unicode characters. This breaks the
+Joliet specification - but appears to work. Use with caution. The number
+103 is derived from: the maximum Directory Record Length (254), minus the
+length of Directory Record (33), minus CD-ROM XA System Use Extension
+Information (14), divided by the UTF-16 character size (2).
+.TP
+.BI \-jcharset " charset
+Same as using
+.B \-input\-charset
+.I charset
+and
+.B \-J
+options. See
+.B "CHARACTER SETS
+section below for more details.
+.TP
+.B \-l
+Allow full 31 character filenames.  Normally the ISO9660 filename will be in an
+8.3 format which is compatible with MS-DOS, even though the ISO9660 standard
+allows filenames of up to 31 characters.  If you use this option, the disc may
+be difficult to use on a MS-DOS system, but this comes in handy on some other
+systems (such as the Amiga).
+Use with caution.
+.TP
+.B \-L
+Outdated option reserved by POSIX.1-2001, use
+.B \-allow\-leading\-dots
+instead.
+This option will get POSIX.1-2001 semantics with mkisoimage-2.02.
+.TP
+.BI \-jigdo\-jigdo " jigdo_file
+Produce a jigdo .jigdo file as well as the .iso. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-jigdo\-template " template_file
+Produce a jigdo .template file as well as the .iso. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-jigdo\-min\-file\-size " size
+Specify the minimum size for a file to be listed in the .jigdo
+file. Default (and minimum allowed) is 1KB. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-jigdo\-force\-md5 " path
+Specify a file pattern where files MUST be contained in the
+externally-suplied MD5 list as supplied by \-md5\-list. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-jigdo\-exclude " path
+Specify a file pattern where files will not be listed in the .jigdo
+file. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-jigdo\-map " path
+Specify a pattern mapping for the jigdo file
+(e.g. Debian=/mirror/debian). See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-md5\-list " md5_file
+Specify a file containing the MD5sums, sizes and pathnames of the
+files to be included in the .jigdo file. See the
+.B JIGDO NOTES
+section below for more information.
+.TP
+.BI \-log\-file " log_file
+Redirect all error, warning and informational messages to
+.I log_file
+instead of the standard error.
+.TP
+.BI \-m " glob
+Exclude
+.I glob
+from being written to CD-ROM.
+.I glob
+is a shell wild-card-style pattern that must match part of the filename (not 
+the path as with option
+.BR \-x ).
+Technically
+.I glob
+is matched against the
+.I d->d_name
+part of the directory entry.
+Multiple globs may be excluded.
+Example:
+
+mkisoimage \-o rom \-m '*.o' \-m core \-m foobar
+
+would exclude all files ending in ".o", called "core" or "foobar" to be
+copied to CD-ROM. Note that if you had a directory called "foobar" it too (and
+of course all its descendants) would be excluded.
+.sp
+NOTE: The
+.B \-m
+and
+.B \-x
+option description should both be updated, they are wrong.
+Both now work identical and use filename globbing. A file is excluded if either
+the last component matches or the whole path matches.
+.TP
+.BI \-exclude\-list " file
+A file containing a list of
+.I globs
+to be exclude as above.
+.TP
+.B \-max\-iso9660\-filenames
+Allow 37 chars in ISO9660 filenames.
+This option forces the
+.B \-N
+option as the extra name space is taken from the space reserved for
+ISO9660 version numbers.
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Although a conforming application needs to provide a buffer space of at
+least 37 characters, disks created with this option may cause a buffer
+overflow in the reading operating system. Use with extreme care.
+.TP
+.BI \-M " path
+or
+.TP
+.BI \-M " device
+or
+.TP
+.BI \-dev " device
+Specifies path to existing ISO9660 image to be merged. The alternate form
+takes a SCSI device specifier that uses the same syntax as the
+.B "dev=
+parameter of
+.B wodim.
+The output of 
+.B mkisoimage
+will be a new session which should get written to the end of the
+image specified in \-M.  Typically this requires multi-session capability
+for the recorder and cdrom drive that you are attempting to write this
+image to.
+This option may only be used in conjunction with the
+.B \-C
+option.
+.TP
+.B \-N
+Omit version numbers from ISO9660 file names.
+.br
+This violates the ISO9660 standard, but no one really uses the
+version numbers anyway.
+Use with caution.
+.TP
+.BI \-new\-dir\-mode " mode
+Mode to use when creating new directories in the filesystem image.  The default
+mode is 0555.
+.TP
+.B \-nobak
+.TP
+.B \-no\-bak
+Do not include backup files files on the ISO9660 filesystem.
+If the
+.B \-no\-bak
+option is specified, files that contain the characters '~' or '#'
+or end in '.bak' will not be included (these are typically backup files
+for editors under Unix).
+.TP
+.B \-force\-rr
+Do not use the automatic Rock Ridge attributes recognition for previous sessions.
+This helps to show rotten ISO9660 extension records as e.g. created by NERO burning ROM.
+.TP
+.B \-no\-rr
+Do not use the Rock Ridge attributes from previous sessions.
+This may help to avoid getting into trouble when
+.B mkisoimage
+finds illegal Rock Ridge signatures on an old session.
+.TP
+.B \-no\-split\-symlink\-components
+Don't split the SL components, but begin a new Continuation Area (CE)
+instead. This may waste some space, but the SunOS 4.1.4 cdrom driver
+has a bug in reading split SL components (link_size = component_size 
+instead of link_size += component_size).
+.sp
+Note that this option has been introduced by Eric Youngdale in 1997.
+It is questionable whether it makes sense at all.
+When it has been introduced,
+.B mkisoimage 
+did have a serious bug that did create defective CE signatures if
+a symlink contained `/../'.
+This CE signature bug in
+.B mkisoimage
+has been fixed in May 2003.
+.TP
+.B \-no\-split\-symlink\-fields
+Don't split the SL fields, but begin a new Continuation Area (CE)
+instead. This may waste some space, but the SunOS 4.1.4 and
+Solaris 2.5.1 cdrom driver have a bug in reading split SL fields
+(a `/' can be dropped).
+.sp
+Note that this option has been introduced by Eric Youngdale in 1997.
+It is questionable whether it makes sense at all.
+When it has been introduced,
+.B mkisoimage 
+did have a serious bug that did create defective CE signatures if
+a symlink contained `/../'.
+This CE signature bug in
+.B mkisoimage
+has been fixed in May 2003.
+.TP
+.BI \-o " filename
+is the name of the file to which the ISO9660 filesystem image should be
+written.  This can be a disk file, a tape drive, or it can correspond directly
+to the device name of the optical disc writer.  If not specified, stdout is
+used.  Note that the output can also be a block special device for a regular
+disk drive, in which case the disk partition can be mounted and examined to
+ensure that the premastering was done correctly.
+.TP
+.B \-pad
+Pad the end of the whole image by 150 sectors (300 kB).
+If the option
+.B \-B
+is used, then there is a padding at the end of the ISO9660 partition 
+and before the beginning of the boot partitions.
+The size of this padding is chosen to make the first boot partition start
+on a sector number that is a multiple of 16.
+.sp
+The padding is needed as many operating systems (e.g. Linux)
+implement read ahead bugs in their filesystem I/O. These bugs result in read
+errors on one or more files that are located at the end of a track. They are
+usually present when the CD is written in Track at Once mode or when
+the disk is written as mixed mode CD where an audio track follows the
+data track.
+.sp
+To avoid problems with I/O error on the last file on the filesystem,
+the 
+.B \-pad
+option has been made the default.
+.TP
+.B \-no\-pad
+Do not Pad the end by 150 sectors (300 kB) and do not make the the boot partitions
+start on a multiple of 16 sectors.
+.TP
+.BI \-path\-list " file
+A file containing a list of
+.I pathspec
+directories and filenames to be added to the ISO9660 filesystem. This list
+of pathspecs are processed after any that appear on the command line. If the
+argument is
+.IR \- ,
+then the list is read from the standard input.
+.TP
+.B \-P
+Outdated option reserved by POSIX.1-2001, use
+.B \-publisher
+instead.
+This option will get POSIX.1-2001 semantics with mkisoimage-2.02.
+.TP
+.BI \-publisher " publisher_id
+Specifies a text string that will be written into the volume header.
+This should describe the publisher of the CD-ROM, usually with a
+mailing address and phone number.  There is space on the disc for 128
+characters of information.  This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with PUBL=.
+If specified in both places, the command line version is used.
+.TP
+.BI \-p " preparer_id
+Specifies a text string that will be written into the volume header.
+This should describe the preparer of the CD-ROM, usually with a mailing
+address and phone number.  There is space on the disc for 128
+characters of information.  This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with PREP=.
+If specified in both places, the command line version is used.
+.TP
+.B \-print\-size
+Print estimated filesystem size in multiples of the sector size (2048 bytes)
+and exit. This option is needed for
+Disk At Once mode and with some CD-R drives when piping directly into
+.B wodim.
+In this case it is needed to know the size of the filesystem before the
+actual CD creation is done.
+The option \-print\-size allows to get this size from a "dry-run" before
+the CD is actually written.
+Old versions of
+.B mkisoimage
+did write this information (among other information) to 
+.IR stderr .
+As this turns out to be hard to parse, the number without any other information
+is now printed on 
+.B stdout
+too.
+If you like to write a simple shell script, redirect
+.B stderr
+and catch the number from
+.BR stdout .
+This may be done with:
+.sp
+.B "cdblocks=` mkisoimage \-print\-size \-quiet .\|.\|. `
+.sp
+.B "mkisoimage .\|.\|. | wodim .\|.\|. tsize=${cdblocks}s -"
+.TP
+.B \-quiet
+This makes
+.B mkisoimage
+even less verbose.  No progress output will be provided.
+.TP
+.B \-R
+Generate SUSP and RR records using the Rock Ridge protocol to further describe
+the files on the ISO9660 filesystem.
+.TP
+.B \-r
+This is like the \-R option, but file ownership and modes are set to
+more useful values.  The uid and gid are set to zero, because they are
+usually only useful on the author's system, and not useful to the
+client.  All the file read bits are set true, so that files and
+directories are globally readable on the client.  If any execute bit is
+set for a file, set all of the execute bits, so that executables are
+globally executable on the client.  If any search bit is set for a
+directory, set all of the search bits, so that directories are globally
+searchable on the client.  All write bits are cleared, because the
+filesystem will be mounted read-only in any case.  If any of the special
+mode bits are set, clear them, because file locks are not useful on a
+read-only file system, and set-id bits are not desirable for uid 0 or
+gid 0.
+When used on Win32, the execute bit is set on
+.I all
+files. This is a result of the lack of file permissions on Win32 and the
+Cygwin POSIX emulation layer.  See also \-uid \-gid, \-dir\-mode, \-file\-mode
+and \-new\-dir\-mode.
+.TP
+.B \-relaxed\-filenames
+The option
+.B \-relaxed\-filenames
+allows ISO9660 filenames to include digits, upper case characters
+and all other 7 bit ASCII characters (resp. anything except lowercase
+characters).
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.BI \-root " dir
+Moves all files and directories into
+.I dir
+in the image. This is essentially the
+same as using 
+.B -graft-points
+and adding
+.I dir
+in front of every pathspec, but is easier to use.
+
+.I dir
+may actually be several levels deep. It is
+created with the same permissions as other graft points.
+.TP
+.BI \-old-root " dir
+This option is necessary when writing a multisession
+image and the previous (or even older) session was written with
+.BI -root " dir.
+Using a directory name not found in the previous session
+causes
+.B mkisoimage
+to abort with an error.
+
+Without this option,
+.B mkisoimage
+would not be able to find unmodified files and would
+be forced to write their data into the image once more.
+
+.B \-root
+and
+.B \-old-root
+are meant to be used together to do incremental backups.
+The initial session would e.g. use:
+.BI "mkisoimage \-root backup_1 " dirs\f0.
+The next incremental backup with
+.BI "mkisoimage \-root backup_2 \-old-root backup_1 " dirs\f0.
+would take another snapshot of these directories. The first
+snapshot would be found in
+.BR backup_1 ,
+the second one in
+.BR backup_2 ,
+but only modified or new files need to be written
+into the second session.
+
+Without these options, new files would be added and old ones would be
+preserved. But old ones would be overwritten if the file was
+modified. Recovering the files by copying the whole directory back
+from CD would also restore files that were deleted
+intentionally. Accessing several older versions of a file requires
+support by the operating system to choose which sessions are to be
+mounted.
+.TP
+.BI \-sort " sort file
+Sort file locations on the media. Sorting is controlled by a file that
+contains pairs of filenames and sorting offset weighting.
+If the weighting is higher, the file will be located closer to the
+beginning of the media, if the weighting is lower, the file will be located
+closer to the end of the media. There must be only one space or tabs
+character between the filename and the
+weight and the weight must be the last characters on a line. The filename
+is taken to include all the characters up to, but not including the last
+space or tab character on a line. This is to allow for space characters to
+be in, or at the end of a filename.
+This option does
+.B not
+sort the order of the file names that appear
+in the ISO9660 directory. It sorts the order in which the file data is
+written to the CD image - which may be useful in order to optimize the
+data layout on a CD. See README.sort for more details.
+.TP
+.BI \-sparc\-boot " img_sun4,img_sun4c,img_sun4m,img_sun4d,img_sun4e
+See
+.B \-B
+option above.
+.TP
+.BI \-sparc\-label " label
+Set the Sun disk label name for the Sun disk label that is created with the
+.B \-sparc-boot
+option.
+.TP
+.B \-split\-output
+Split the output image into several files of approximately 1 GB.
+This helps to create DVD sized ISO9660 images on operating systems without
+large file support.
+Wodim will concatenate more than one file into a single track if writing
+to a DVD.
+To make
+.B \-split\-output
+work, the 
+.BI \-o " filename"
+option must be specified. The resulting outout images will be named:
+.IR filename_00 , filename_01, filename_02 ...
+.TP
+.BI \-stream\-media\-size " #
+Select streaming operation and set the media size to # sectors.
+This allows you to pipe the output of the tar program into mkisoimage
+and to create a ISO9660 filesystem without the need of an intermediate
+tar archive file. 
+If this option has been specified,
+.B mkisoimage
+reads from 
+.B stdin 
+and creates a file with the name
+.BR STREAM.IMG .
+The maximum size of the file (with padding) is 200 sectors less than the 
+specified media size. If 
+.B \-no\-pad
+has been specified, the file size is 50 sectors less than the specified media size.
+If the file is smaller, then mkisoimage will write padding. This may take a while.
+.sp
+The option 
+.B \-stream\-media\-size
+creates simple ISO9660 filesystems only and may not used together with multi-session
+or hybrid filesystem options.
+.TP
+.BI \-stream\-file\-name " name
+Reserved for future use.
+.TP
+.BI \-sunx86\-boot " UFS-img,,,AUX1-img
+Specifies a comma separated list of filesystem images that are needed to make
+a bootable CD for Solaris x86 systems.
+.sp
+Note that partition 1 is used for the ISO9660 image and that partition 2 is
+the whole disk, so partition 1 and 2 may not be used by external partition data.
+The first image file is mapped to partition 0.
+There may be empty fields in the comma separated list,
+and list entries for partition 1 and 2 must be empty.
+The maximum number of supported partitions is 8 (although the Solaris x86
+partition table could support up to 16 partitions), so it is impossible
+to specify more than 6 partition images.
+This option is required to make a bootable CD for Solaris x86 systems.
+.sp
+If the
+.B \-sunx86\-boot
+option has been specified, the first sector of the resulting image will
+contain a PC fdisk label with a Solaris type 0x82 fdisk partition that
+starts at offset 512 and spans the whole CD.
+In addition, for the Solaris type 0x82 fdisk partition, there is a
+SVr4 disk label at offset 1024 in the first sector of the CD.
+This disk label specifies slice 0 for the first (usually UFS type)
+filesystem image that is used to boot the PC and slice 1 for
+the ISO9660 image.
+Slice 2 spans the whole CD slice 3 .\|.\|. slice 7 may be used for additional
+filesystem images that have been specified with this option.
+.sp
+A Solaris x86 boot CD uses a 1024 byte sized primary boot that uses the
+.B "El-Torito no-emulation 
+boot mode and a secondary generic boot that is in CD sectors 1\|.\|.15.
+For this reason, both
+.BI "-b " bootimage " -no\-emul\-boot
+and
+.BI \-G " genboot
+must be specified.
+.TP
+.BI \-sunx86\-label " label
+Set the SVr4 disk label name for the SVr4 disk label that is created with the
+.B \-sunx86-boot
+option.
+.TP
+.BI \-sysid " ID
+Specifies the system ID.
+There is space on the disc for 32 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with SYSI=system_id.
+If specified in both places, the command line version is used.
+.TP
+.B \-T
+Generate a file TRANS.TBL in each directory on the CD-ROM, which can be used
+on non-Rock Ridge capable systems to help establish the correct file names.
+There is also information present in the file that indicates the major and
+minor numbers for block and character devices, and each symlink has the name of
+the link file given.
+.TP
+.BI \-table\-name " TABLE_NAME
+Alternative translation table file name (see above). Implies the
+.B \-T
+option.
+If you are creating a multi-session image you must use the same name
+as in the previous session.
+.TP
+.BI \-ucs\-level " level
+Set Unicode conformance level in the Joliet SVD. The default level is 3.
+It may be set to 1..3 using this option.
+.TP
+.B \-udf
+Include 
+.B UDF
+support in the generated filesystem image.
+.B UDF
+support is currently in alpha status and for this reason, it is not possible
+to create UDF only images. 
+.B UDF
+data structures are currently coupled to the Joliet structures, so there are many
+pitfalls with the current implementation. There is no UID/GID support,
+there is no POSIX permission support, there is no support for symlinks.
+Note that 
+.B UDF
+wastes the space from sector ~20 to sector 256 at the beginning of the disk
+in addition to the space needed for real 
+.B UDF 
+data structures.
+.TP
+.BI \-uid " uid
+Overrides the uid read from the source files to the value of
+.IR uid . 
+Specifying this option automatically enables Rock Ridge extensions.
+.TP
+.B \-use\-fileversion
+The option 
+.B \-use\-fileversion
+allows mkisoimage to use file version numbers from the filesystem.
+If the option is not specified, 
+.B mkisoimage
+creates a version number of 1 for all files.
+File versions are strings in the range 
+.I ";1"
+to
+.I ";32767"
+This option is the default on VMS. 
+.TP
+.B \-U
+Allows "Untranslated" filenames, completely violating the ISO9660 standards
+described above. Forces on the \-d, \-l, \-N, \-allow\-leading\-dots,
+\-relaxed\-filenames,
+\-allow\-lowercase, \-allow\-multidot and \-no\-iso\-translate
+flags. It allows more
+than one '.' character in the filename, as well as mixed case filenames.
+This is useful on HP-UX system, where the built-in CDFS filesystem does
+not recognize ANY extensions. Use with extreme caution.
+.TP
+.B \-no\-iso\-translate
+Do not translate the characters '#' and '~' which are invalid for ISO9660 filenames.
+These characters are though invalid often used by Microsoft systems.
+.br
+This violates the ISO9660 standard, but it happens to work on many systems.
+Use with caution.
+.TP
+.BI \-V " volid
+Specifies the volume ID (volume name or label) to be written into the
+master block. 
+There is space on the disc for 32 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with VOLI=id.
+If specified in both places, the command line version is used.  Note that
+if you assign a volume ID, this is the name that will be used as the mount
+point used by the Solaris volume management system and the name that is
+assigned to the disc on a Microsoft Win32 or Apple Mac platform.
+.TP
+.BI \-volset " ID
+Specifies the volset ID.
+There is space on the disc for 128 characters of information.
+This parameter can also be set in the file
+.B \&.m\&kisofsrc
+with VOLS=volset_id.
+If specified in both places, the command line version is used.
+.TP
+.BI \-volset\-size " #
+Sets the volume set size to #.
+The volume set size is the number of CDs that are in a CD volume set.
+A volume set is a collection of one or more volumes, on which a set of
+files is recorded.
+.sp
+Volume Sets are not intended to be used to create a set numbered CDs
+that are part of e.g. a Operation System installation set of CDs.
+Volume Sets are rather used to record a big directory tree that would not
+fit on a single volume.
+Each volume of a Volume Set contains a description of all the directories
+and files that are recorded on the volumes where the sequence numbers
+are less than, or equal to, the assigned Volume Set Size of the current
+volume.
+.sp
+.B mkisoimage
+currently does not support a
+.B \-volset\-size
+that is larger than 1.
+.sp
+The option
+.B \-volset\-size
+must be specified before
+.B \-volset\-seqno
+on each command line.
+.TP
+.BI \-volset\-seqno " #
+Sets the volume set sequence number to #.
+The volume set sequence number is the index number of the current
+CD in a CD set.
+The option
+.B \-volset\-size
+must be specified before
+.B \-volset\-seqno
+on each command line.
+.TP
+.B \-v
+Verbose execution. If given twice on the command line, extra debug information
+will be printed.
+.TP
+.BI \-x " path
+Exclude
+.I path
+from being written to CD-ROM.
+.I path
+must be the complete pathname that results from concatenating the pathname
+given as command line argument and the path relative to this directory.
+Multiple paths may be excluded.
+Example: 
+
+mkisoimage \-o cd \-x /local/dir1 \-x /local/dir2 /local
+.sp
+NOTE: The
+.B \-m
+and
+.B \-x
+option description should both be updated, they are wrong.
+Both now work identical and use filename globbing. A file is excluded if either
+the last component matches or the whole path matches.
+.TP
+.B \-z
+Generate special RRIP records for transparently compressed files.
+This is only of use and interest for hosts that support transparent
+decompression, such as Linux 2.4.14 or later.  You must specify the
+.B \-R
+or
+.B \-r
+options to enable Rock Ridge, and generate compressed files using the
+.B mkzftree
+utility before running
+.BR mkisoimage .
+Note that transparent compression is a nonstandard Rock Ridge extension.
+The resulting disks are only transparently readable if used on Linux.
+On other operating systems you will need to call
+.B mkzftree
+by hand to decompress the files.
+
+.SH "HFS OPTIONS
+.TP
+.B \-hfs
+Create an ISO9660/HFS hybrid CD. This option should be used in conjunction
+with the
+.BR \-map ,
+.B \-magic
+and/or the various
+.I double dash
+options given below.
+.TP
+.B \-apple
+Create an ISO9660 CD with Apple's extensions. Similar to the
+.B \-hfs
+option, except that the Apple Extensions to ISO9660 are added instead of
+creating an HFS hybrid volume.
+Former 
+.B mkisoimage
+versions did include Rock Ridge attributes by default if 
+.B \-apple
+was specified. This versions of
+.B mkisoimage
+does not do this anymore. If you like to have Rock Ridge attributes,
+you need to specify this separately.
+.TP
+.BI \-map " mapping_file
+Use the
+.I mapping_file
+to set the CREATOR and TYPE information for a file based on the
+filename's extension. A filename is 
+mapped only if it is not one of the know Apple/Unix file formats. See the
+.B "HFS CREATOR/TYPE
+section below.
+.TP
+.BI \-magic " magic_file
+The CREATOR and TYPE information is set by using a file's
+.I magic number
+(usually the first few bytes of a file). The
+.I magic_file
+is only used if a file is not one of the known Apple/Unix file formats, or
+the filename extension has not been mapped using the
+.B \-map
+option. See the 
+.B "HFS CREATOR/TYPE
+section below for more details.
+.TP
+.BI \-hfs\-creator " CREATOR
+Set the default CREATOR for all files. Must be exactly 4 characters. See the
+.B "HFS CREATOR/TYPE
+section below for more details.
+.TP
+.BI \-hfs\-type " TYPE
+Set the default TYPE for all files. Must be exactly 4 characters. See the
+.B "HFS CREATOR/TYPE
+section below for more details.
+.TP
+.B \-probe
+Search the contents of files for all the known Apple/Unix file formats.
+See the
+.B HFS MACINTOSH FILE FORMATS
+section below for more about these formats.
+However, the only way to check for
+.I MacBinary
+and
+.I AppleSingle
+files is to open and read them. Therefore this option
+.I may
+increase processing time. It is better to use one or more
+.I double dash
+options given below if the Apple/Unix formats in use are known.
+.TP
+.B \-no\-desktop
+Do not create (empty) Desktop files. New HFS Desktop files will be created
+when the CD is used on a Macintosh (and stored in the System Folder).
+By default, empty Desktop files are added to the HFS volume.
+.TP
+.B \-mac\-name
+Use the HFS filename as the starting point for the ISO9660, Joliet and
+Rock Ridge file names. See the
+.B HFS MACINTOSH FILE NAMES
+section below for more information.
+.TP
+.BI \-boot\-hfs\-file " driver_file
+Installs the
+.I driver_file
+that
+.I may
+make the CD bootable on a Macintosh. See the
+.B HFS BOOT DRIVER
+section below. (Alpha).
+.TP
+.B \-part
+Generate an HFS partition table. By default, no partition table is generated,
+but some older Macintosh CD-ROM drivers need an HFS partition table on the
+CD-ROM to be able to recognize a hybrid CD-ROM.
+.TP
+.BI \-auto " AutoStart_file
+Make the HFS CD use the QuickTime 2.0 Autostart feature to launch an
+application or document. The given filename must be the name of a document or
+application located at the top level of the CD. The filename must be less
+than 12 characters. (Alpha).
+.TP
+.BI \-cluster\-size " size
+Set the size in bytes of the cluster or allocation units of PC Exchange
+files. Implies the
+.B \-\-exchange
+option. See the
+.B HFS MACINTOSH FILE FORMATS
+section below.
+.TP
+.BI \-hide\-hfs " glob
+Hide
+.I glob
+from the HFS volume. The file or directory will still exist in the
+ISO9660 and/or Joliet directory.
+.I glob
+is a shell wild-card-style pattern that must match any part of the filename
+Multiple globs may be excluded.
+Example:
+
+mkisoimage \-o rom \-hfs \-hide\-hfs '*.o' \-hide\-hfs foobar
+
+would exclude all files ending in ".o" or called "foobar" 
+from the HFS volume. Note that if you had a directory called
+"foobar" it too (and of course all its descendants) would be excluded.
+The
+.I glob
+can also be a path name relative to the source directories given on the
+command line. Example:
+
+mkisoimage \-o rom \-hfs \-hide\-hfs src/html src
+
+would exclude just the file or directory called "html" from the "src"
+directory. Any other file or directory called "html" in the tree will
+not be excluded.
+Should be used with the
+.B \-hide
+and/or
+.B \-hide\-joliet
+options.
+In order to match a directory name, make sure the pathname does not include
+a trailing '/' character. See README.hide for more details.
+.TP
+.BI \-hide\-hfs\-list " file
+A file containing a list of
+.I globs
+to be hidden as above.
+.TP
+.BI \-hfs\-volid " hfs_volid
+Volume name for the HFS partition. This is the name that is
+assigned to the disc on a Macintosh and replaces the
+.I volid
+used with the 
+.B \-V
+option
+.TP
+.B \-icon\-position
+Use the icon position information, if it exists, from the Apple/Unix file.
+The icons will appear in the same position as they would on a Macintosh
+desktop. Folder location and size on screen, its scroll positions, folder
+View (view as Icons, Small Icons, etc.) are also preserved.
+This option may become set by default in the future.
+(Alpha).
+.TP
+.BI \-root\-info " file
+Set the location, size on screen, scroll positions, folder View etc. for the
+root folder of an HFS volume. See README.rootinfo for more information.
+(Alpha)
+.TP
+.BI \-prep\-boot " FILE
+PReP boot image file. Up to 4 are allowed. See README.prep_boot (Alpha)
+.TP
+.BI \-input\-hfs\-charset " charset
+Input charset that defines the characters used in HFS file names when
+used with the
+.I \-mac\-name
+option.
+The default charset is cp10000 (Mac Roman)
+.I cp10000
+(Mac Roman)
+See
+.B "CHARACTER SETS
+and
+.B "HFS MACINTOSH FILE NAMES
+sections below for more details.
+.TP
+.BI \-output\-hfs\-charset " charset
+Output charset that defines the characters that will be used in the HFS
+file names. Defaults to the input charset. See
+.B "CHARACTER SETS
+section below for more details.
+.TP
+.B \-hfs\-unlock
+By default,
+.B mkisoimage
+will create an HFS volume that is
+.IR locked .
+This option leaves the volume unlocked so that other applications (e.g.
+hfsutils) can modify the volume. See the
+.B "HFS PROBLEMS/LIMITATIONS
+section below for warnings about using this option.
+.TP
+.BI \-hfs\-bless " folder_name
+"Bless" the given directory (folder). This is usually the 
+.B System Folder
+and is used in creating HFS bootable CDs. The name of the directory must
+be the whole path name as
+.B mkisoimage
+sees it. e.g. if the given pathspec is ./cddata and the required folder is
+called System Folder, then the whole path name is "./cddata/System Folder"
+(remember to use quotes if the name contains spaces).
+.TP
+.BI \-hfs\-parms " PARAMETERS
+Override certain parameters used to create the HFS file system. Unlikely to
+be used in normal circumstances. See the libhfs_iso/hybrid.h source file for
+details.
+.TP
+.B \-\-cap
+Look for AUFS CAP Macintosh files. Search for CAP Apple/Unix file formats
+only. Searching for the other possible Apple/Unix file formats is disabled,
+unless other
+.I double dash
+options are given.
+.TP
+.B \-\-netatalk
+Look for NETATALK Macintosh files
+.TP
+.B \-\-double
+Look for AppleDouble Macintosh files
+.TP
+.B \-\-ethershare
+Look for Helios EtherShare Macintosh files
+.TP
+.B \-\-ushare
+Look for IPT UShare Macintosh files
+.TP
+.B \-\-exchange
+Look for PC Exchange Macintosh files
+.TP
+.B \-\-sgi
+Look for SGI Macintosh files
+.TP
+.B \-\-xinet
+Look for XINET Macintosh files
+.TP
+.B \-\-macbin
+Look for MacBinary Macintosh files
+.TP
+.B \-\-single
+Look for AppleSingle Macintosh files
+.TP
+.B \-\-dave
+Look for Thursby Software Systems DAVE Macintosh files
+.TP
+.B \-\-sfm
+Look for Microsoft's Services for Macintosh files (NT only) (Alpha)
+.TP
+.B \-\-osx\-double
+Look for MacOS X AppleDouble Macintosh files
+.TP
+.B \-\-osx\-hfs
+Look for MacOS X HFS Macintosh files
+
+.SH "CHARACTER SETS
+.B mkisoimage
+processes file names in a POSIX compliant way as strings of 8-bit characters.
+To represent all codings for all languages, 8-bit characters are not
+sufficient. Unicode or
+.B ISO-10646
+define character codings that need at least 21 bits to represent all
+known languages. They may be represented with
+.BR UTF-32 ", " UTF-16 " or " UTF-8
+coding.
+.B UTF-32
+uses a plain 32-bit coding but seems to be uncommon. 
+.B UTF-16
+is used by Microsoft with Win32 with the disadvantage that it only supports
+a subset of all codes and that 16-bit characters are not compliant with
+the POSIX filesystem interface.
+.PP
+Modern Unix operating systems may use
+.B UTF-8
+coding for filenames. This coding allows to use the complete Unicode code set.
+Each 32-bit character is represented by one or more 8-bit characters.
+If a character is coded in
+.B ISO-8859-1
+(used in Central Europe and North America) is maps 1:1 to a 
+.BR UTF-32 " or " UTF-16 "
+coded Unicode character.
+If a character is coded in
+.B "7-Bit ASCII
+(used in USA and other countries with limited character set)
+is maps 1:1 to a 
+.BR UTF-32 ", " UTF-16 " or " UTF-8
+coded Unicode character.
+Character codes that cannot be represented as a single byte in UTF-8
+(typically if the value is > 0x7F) use escape sequences that map to more than
+one 8-bit character.
+.PP
+If all operating systems would use 
+.B UTF-8
+coding,
+.B mkisoimage
+would not need to recode characters in file names.
+Unfortunately, Apple uses completely nonstandard codings and Microsoft
+uses a Unicode coding that is not compatible with the POSIX filename
+interface.
+.PP
+For all non
+.B UTF-8
+coded operating systems, the actual character
+that each byte represents depends on the
+.I character set
+or
+.I codepage
+(which is the name used by Microsoft)
+used by the local operating system in use - the characters in a character
+set will reflect the region or natural language used by the user.
+.PP
+Usually character codes 0x00-0x1f are control characters, codes 0x20-0x7f
+are the 7 bit ASCII characters and (on PC's and Mac's) 0x80-0xff are used
+for other characters.
+Unfortunately even this does not follow ISO standards that reserve the
+range 0x80-0x9f for control characters and only allow 0xa0-0xff for other
+characters.
+.PP
+As there is a lot more than 256 characters/symbols in use, only a small
+subset are represented in a character set. Therefore the same character code
+may represent a different character in different character sets. So a file name
+generated, say in central Europe, may not display the same character
+when viewed on a machine in, say eastern Europe.
+.PP
+To make matters more complicated, different operating systems use
+different character sets for the region or language. For example the character
+code for "small e with acute accent" may be character code 0x82 on a PC, 
+code 0x8e on a Macintosh and code 0xe9 on a Unix system.
+Note while the codings used on a PC or Mac are nonstandard,
+Unicode codes this character as 0x00000000e9 which is basically the
+same value as the value used by most Unix systems.
+.PP
+As long as not all operating systems and applications will use the Unicode
+character set as the basis for file names in a unique way, it may be
+necessary to specify which character set your file names use in and which
+character set the file names should appear on the CD.
+.PP
+There are four options to specify the character sets you want to use:
+.IP \-input\-charset
+Defines the local character set you are using on your host machine.
+Any character set conversions that take place will use this character
+set as the staring point. The default input character sets are
+.I cp437
+on DOS based systems and
+.I iso8859-1
+on all other systems.
+
+If the
+.I \-J
+option is given, then the Unicode equivalents of the input character set
+will be used in the Joliet directory. Using the 
+.I \-jcharset
+option is the same as using the
+.I \-input\-charset
+and
+.I \-J
+options.
+.IP \-output\-charset
+Defines the character set that will be used with for the Rock Ridge names
+on the CD. Defaults to the input character set. Only likely to be useful
+if used on a non-Unix platform. e.g. using
+.B mkisoimage
+on a Microsoft Win32 machine to create Rock Ridge CDs. If you are using
+.B mkisoimage
+on a Unix machine, it is likely that the output character set
+will be the same as the input character set.
+.IP \-input\-hfs\-charset
+Defines the HFS character set used for HFS file names decoded from
+any of the various Apple/Unix file formats. Only useful when used with
+.I \-mac\-name
+option. See the
+.B HFS MACINTOSH FILE NAMES
+for more information. Defaults to
+.I cp10000
+(Mac Roman).
+.IP \-output\-hfs\-charset
+Defines the HFS character set used to create HFS file names from the input
+character set in use. In most cases this will be from the character set
+given with the
+.I \-input\-charset
+option. Defaults to the input HFS character set.
+.PP
+There are a number of character sets built in to
+.IR mkisoimage .
+To get a listing, use
+.B "mkisoimage \-input\-charset help.
+This list doesn't include the charset derived from the current locale,
+if mkisoimage is built with iconv support.
+.PP
+Additional character sets can be read from file for any of the character
+set options by giving a filename as the argument to the options. The given
+file will only be read if its name does not match one of the built in
+character sets.
+.PP
+The format of the character set files is the same as the mapping files
+available from http://www.unicode.org/Public/MAPPINGS The format of these
+files is:
+
+	Column #1 is the input byte code (in hex as 0xXX)
+.br
+	Column #2 is the Unicode (in hex as 0xXXXX)
+.br
+	Rest of the line is ignored.
+
+Any blank line, line without two (or more) columns in the above format
+or comments lines (starting with the # character) are ignored without any
+warnings. Any missing input code is mapped to Unicode character 0x0000.
+.PP
+Note that there is no support for 16 bit UNICODE (UTF-16) or 32 bit UNICODE
+(UTF-32) coding because this coding is not POSIX compliant. There should 
+be support for UTF-8 UNICODE coding which is compatible to POSIX filenames
+and supported by moder Unix implementations such as Solaris.
+.PP
+A 1:1 character set mapping can be defined by using the keyword
+.I default
+as the argument to any of the character set options. This is the behaviour
+of older (v1.12) versions of
+.BR mkisoimage .
+.PP
+The ISO9660 file names generated from the input filenames are not converted
+from the input character set. The ISO9660 character set is a very limited
+subset of the ASCII characters, so any conversion would be pointless.
+.PP
+Any character that
+.B mkisoimage
+can not convert will be replaced with a '_' character.
+.PP
+.SH "HFS CREATOR/TYPE
+A Macintosh file has two properties associated with it which define
+which application created the file, the
+.I CREATOR
+and what data the file contains, the
+.IR TYPE .
+Both are (exactly) 4 letter strings. Usually this
+allows a Macintosh user to double-click on a file and launch the correct
+application etc. The CREATOR and TYPE of a particular file can be found by
+using something like ResEdit (or similar) on a Macintosh.
+.LP
+The CREATOR and TYPE information is stored in all the various Apple/Unix
+encoded files.
+For other files it is possible to base the CREATOR and TYPE on the
+filename's extension using a
+.I mapping
+file (the
+.B \-map
+option) and/or using the
+.I magic number
+(usually a
+.I signature
+in the first few bytes)
+of a file (the
+.B \-magic
+option). If both these options are given, then their order on the command
+line is important. If the
+.B \-map
+option is given first, then a filename extension match is attempted
+before a magic number match. However, if the
+.B \-magic
+option is given first, then a magic number match is attempted before a
+filename extension match.
+.PP
+If a mapping or magic file is not used, or no match is found then the default
+CREATOR and TYPE for all regular files can be set by using entries in the 
+.B \&.m\&kisofsrc
+file or using the 
+.B \-hfs\-creator
+and/or
+.B \-hfs\-type
+options, otherwise the default CREATOR and TYPE are 'Unix' and 'TEXT'.
+.PP
+The format of the
+.I mapping
+file is the same
+.I afpfile
+format as used by
+.IR aufs .
+This file has five columns for the
+.IR extension ,
+.I file
+.IR translation ,
+.IR CREATOR ,
+.I TYPE
+and
+.IR Comment .
+Lines starting with the '#' character are
+comment lines and are ignored. An example file would be like:
+.LP
+.TS
+tab (/);
+l s s s s
+l s s s s
+l l l l l .
+# Example filename mapping file
+#
+# EXTN/XLate/CREATOR/TYPE/Comment
+\&.tif/Raw/'8BIM'/'TIFF'/"Photoshop TIFF image"
+\&.hqx/Ascii/'BnHq'/'TEXT'/"BinHex file"
+\&.doc/Raw/'MSWD'/'WDBN'/"Word file"
+\&.mov/Raw/'TVOD'/'MooV'/"QuickTime Movie"
+*/Ascii/'ttxt'/'TEXT'/"Text file"
+.TE
+.LP
+Where:
+.IP
+The first column
+.I EXTN
+defines the Unix filename extension to be
+mapped. The default mapping for any filename extension that doesn't
+match is defined with the "*" character.
+.IP
+The
+.I Xlate
+column defines the type of text translation between the Unix and
+Macintosh file it is ignored by
+.BR mkisoimage ,
+but is kept to be compatible with
+.BR aufs (1).
+Although 
+.B mkisoimage
+does not alter the contents of a file, if a binary file has it's TYPE
+set as 'TEXT', it
+.I may
+be read incorrectly on a Macintosh. Therefore a better choice for the
+default TYPE may be '????'
+.IP
+The
+.I CREATOR
+and
+.I TYPE
+keywords must be 4 characters long and enclosed in single quotes.
+.IP
+The comment field is enclosed in double quotes - it is ignored by
+.BR mkisoimage ,
+but is kept to be compatible with 
+.BR aufs .
+.PP
+The format of the
+.I magic
+file is almost identical to the
+.BR magic (5)
+file used by the Linux
+.BR file (1)
+command - the routines for reading and decoding the
+.I magic
+file are based on the Linux
+.BR file (1)
+command.
+.PP
+This file has four tab separated columns for the 
+.I byte
+.IR offset ,
+.IR type ,
+.I test
+and
+.IR message .
+Lines starting with the '#' character are
+comment lines and are ignored. An example file would be like:
+.LP
+.TS
+tab (/);
+l s s s
+l s s s
+l l l l .
+# Example magic file
+#
+# off/type/test/message
+0/string/GIF8/8BIM GIFf  GIF image
+0/beshort/0xffd8/8BIM JPEG  image data
+0/string/SIT!/SIT! SIT!  StuffIt Archive
+0/string/\\037\\235/LZIV ZIVU  standard Unix compress
+0/string/\\037\\213/GNUz ZIVU  gzip compressed data
+0/string/%!/ASPS TEXT  Postscript
+0/string/\\004%!/ASPS TEXT  PC Postscript with a ^D to start
+4/string/moov/txtt MooV  QuickTime movie file (moov)
+4/string/mdat/txtt MooV  QuickTime movie file (mdat)
+.TE
+.PP
+The format of the file is described in the
+.BR magic (4)
+man page. The only difference here is that for each entry in the magic file, the
+.I message
+for the initial offset
+.B must
+be 4 characters for the CREATOR followed by 4 characters for the TYPE -
+white space is
+optional between them. Any other characters on this line are ignored.
+Continuation lines (starting with a '>') are also ignored i.e. only the initial
+offset lines are used.
+.PP
+Using the
+.B \-magic
+option may significantly increase processing time as each file has to opened
+and read to find it's magic number.
+.PP
+In summary, for all files, the default CREATOR is 'Unix' and the default
+TYPE is 'TEXT'.  These can be changed by using entries in the 
+.I \&.m\&kisofsrc 
+file or by using the
+.B \-hfs\-creator
+and/or
+.B \-hfs\-type
+options. 
+.PP
+If the a file is in one of the known Apple/Unix formats (and the format
+has been selected), then the CREATOR and TYPE are taken from the values
+stored in the Apple/Unix file.
+.PP
+Other files can have their CREATOR and TYPE set from their file name
+extension (the
+.B \-map
+option), or their magic number (the
+.B \-magic
+option). If the default match is used in the
+.I mapping
+file, then these values override the default CREATOR and TYPE.
+.PP
+A full CREATOR/TYPE database can be found at 
+http://www.angelfire.com/il/szekely/index.html
+
+.SH "HFS MACINTOSH FILE FORMATS
+Macintosh files have two parts called the
+.I Data
+and
+.I Resource
+fork. Either may be empty. Unix (and many other OSs) can only
+cope with files having one part (or fork). To add to this, Macintosh files
+have a number of attributes associated with them - probably the most
+important are the TYPE and CREATOR. Again Unix has no concept of these
+types of attributes.
+.PP
+e.g. a Macintosh file may be a JPEG image where the image is stored in the
+Data fork and a desktop thumbnail stored in the Resource fork. It is usually
+the information in the data fork that is useful across platforms.
+.PP
+Therefore to store a Macintosh file on a Unix filesystem, a way has to be
+found to cope with the two forks and the extra attributes (which are
+referred to as the
+.I finder
+.IR info ).
+Unfortunately, it seems that every software package that stores Macintosh
+files on Unix has chosen a completely different storage method.
+.PP
+The Apple/Unix formats that
+.I mkisoimage
+(partially) supports are:
+.IP "CAP AUFS format"
+Data fork stored in a file. Resource fork in subdirectory .resource
+with same filename as data fork. Finder info
+in .finderinfo subdirectory with same filename.
+.IP "AppleDouble/Netatalk"
+Data fork stored in a file. Resource fork stored in a file with
+same name prefixed with "%". Finder info also stored in same
+"%" file. Netatalk uses the same format, but the resource
+fork/finderinfo stored in subdirectory .AppleDouble with same
+name as data fork.
+.IP AppleSingle
+Data structures similar to above, except both forks and finder
+info are stored in one file.
+.IP "Helios EtherShare"
+Data fork stored in a file. Resource fork and finder info together in
+subdirectory .rsrc with same filename as data fork.
+.IP "IPT UShare"
+Very similar to the EtherShare format, but the finder info
+is stored slightly differently.
+.IP MacBinary
+Both forks and finder info stored in one file.
+.IP "Apple PC Exchange"
+Used by Macintoshes to store Apple files on DOS (FAT) disks.
+Data fork stored in a file. Resource fork in subdirectory
+resource.frk (or RESOURCE.FRK). Finder info as one record
+in file finder.dat (or FINDER.DAT). Separate finder.dat for
+each data fork directory.
+.IP
+Note: 
+.I mkisoimage
+needs to know the native FAT cluster size of the disk that the PC Exchange
+files are on (or have been copied from). This size is given by the
+.B \-cluster\-size
+option.
+The cluster or allocation size can be found by using the DOS utility
+.BR CHKDSK .
+.IP
+May not work with PC Exchange v2.2 or higher files (available with MacOS 8.1).
+DOS media containing PC Exchange files should be mounted as type
+.B msdos
+(not
+.BR vfat )
+when using Linux.
+.IP "SGI/XINET"
+Used by SGI machines when they mount HFS disks. Data fork stored
+in a file. Resource fork in subdirectory .HSResource with same
+name. Finder info as one record in file .HSancillary. Separate .HSancillary
+for each data fork directory.
+.IP "Thursby Software Systems DAVE"
+Allows Macintoshes to store Apple files on SMB servers.
+Data fork stored in a file. Resource fork in subdirectory
+resource.frk. Uses the AppleDouble format to store resource fork.
+.IP "Services for Macintosh"
+Format of files stored by NT Servers on NTFS filesystems. Data fork is
+stored as "filename". Resource fork stored as a NTFS
+.I stream
+called "filename:AFP_Resource". The finder info is stored as a NTFS
+.I stream
+called "filename:Afp_AfpInfo". These streams are normally invisible to the
+user.
+.IP
+Warning: mkisoimage only partially supports the SFM format. If an HFS file
+or folder stored on the NT server contains an
+.I illegal
+NT character in its name, then NT converts these characters to
+.I Private Use Unicode
+characters. The characters are: " * / < > ? \ | also a space or
+period if it is the last character of the file name, character codes 0x01
+to 0x1f (control characters) and Apple' apple logo.
+.IP
+Unfortunately, these private Unicode characters are not
+readable by the mkisoimage NT executable. Therefore any file or directory
+name containing these characters will be ignored - including the contents of
+any such directory.
+.IP "MacOS X AppleDouble"
+When HFS/HFS+ files are copied or saved by MacOS X on to a non-HFS file
+system (e.g. UFS, NFS etc.), the files are stored in AppleDouble format.
+Data fork stored in a file. Resource fork stored in a file with
+same name prefixed with "._". Finder info also stored in same "._" file.
+.IP "MacOS X HFS (Alpha)"
+Not really an Apple/Unix encoding, but actual HFS/HFS+ files on a MacOS X
+system. Data fork stored in a file. Resource fork stored in a pseudo file
+with the same name with the suffix '/rsrc'. The finderinfo is only
+available via a MacOS X library call.
+.IP
+Notes: (also see README.macosx)
+.IP
+Only works when used on MacOS X.
+.IP
+If a file is found with a zero
+length resource fork and empty finderinfo, it is assumed not to have
+any Apple/Unix encoding - therefore a TYPE and CREATOR can be set using
+other methods.
+.LP
+.I mkisoimage
+will attempt to set the CREATOR, TYPE, date and possibly other flags from
+the finder info. Additionally, if it exists, the Macintosh filename is set
+from the finder info, otherwise the Macintosh name is based on the Unix
+filename - see the
+.B "HFS MACINTOSH FILE NAMES
+section below.
+.PP
+When using the
+.B \-apple
+option, the TYPE and CREATOR are stored in the optional System Use or SUSP field
+in the ISO9660 Directory Record - in much the same way as the Rock Ridge
+attributes are. In fact to make life easy, the Apple extensions are added
+at the beginning of the existing Rock Ridge attributes (i.e. to get the Apple
+extensions you get the Rock Ridge extensions as well).
+.PP
+The Apple extensions require the resource fork to be stored as an ISO9660
+.I associated
+file. This is just like any normal file stored in the ISO9660 filesystem
+except that the associated file flag is set in the Directory Record (bit
+2). This file has the same name as the data fork (the file seen by
+non-Apple machines). Associated files are normally ignored by other OSs
+.PP
+When using the
+.B \-hfs
+option, the TYPE and CREATOR plus other finder info, are stored in a separate
+HFS directory, not visible on the ISO9660 volume. The HFS directory references
+the same data and resource fork files described above.
+.PP
+In most cases, it is better to use the
+.B \-hfs
+option instead of the
+.B \-apple
+option, as the latter imposes the limited ISO9660 characters allowed in
+filenames. However, the Apple extensions do give the advantage that the
+files are packed on the disk more efficiently and it may be possible to fit 
+more files on a CD - important when the total size of the source files is
+approaching 650MB.
+
+.SH "HFS MACINTOSH FILE NAMES
+Where possible, the HFS filename that is stored with an Apple/Unix file
+is used for the HFS part of the CD. However, not all the Apple/Unix
+encodings store the HFS filename with the finderinfo. In these cases,
+the Unix filename is used - with escaped special characters. Special
+characters include '/' and characters with codes over 127.
+.PP
+AUFS escapes these characters by using ":" followed by the character code
+as two hex digits. Netatalk and EtherShare have a similar scheme, but uses
+"%" instead of a ":".
+.PP
+If mkisoimage can not find an HFS filename, it uses the Unix name, with
+any %xx or :xx characters (xx == two hex digits) converted to a single
+character code. If "xx" are not hex digits ([0-9a-fA-F]), then they are
+left alone - although any remaining ":" is converted to "%" as colon
+is the HFS directory separator. Care must be taken, as an ordinary Unix
+file with %xx or :xx will also be converted. e.g.
+.PP
+.TS
+l l 
+l s
+l l
+l s
+l l .
+This:2fFile	converted to This/File
+	
+This:File	converted to This%File
+	
+This:t7File	converted to This%t7File
+.TE
+.PP
+Although HFS filenames appear to support upper and lower case letters,
+the filesystem is case insensitive. i.e. the filenames "aBc" and "AbC"
+are the same. If a file is found in a directory with the same HFS name,
+then
+.I mkisoimage
+will attempt, where possible, to make a unique name by adding '_' characters
+to one of the filenames. 
+.PP
+If an HFS filename exists for a file, then mkisoimage can use this name as
+the starting point for the ISO9660, Joliet and Rock Ridge filenames using
+the
+.B \-mac\-name
+option. Normal Unix files without an HFS name will still use their Unix name.
+e.g.
+.PP
+If a
+.I MacBinary
+(or
+.I PC
+.IR Exchange )
+file is stored as 
+.I someimage.gif.bin
+on the Unix filesystem, but contains a HFS file called
+.IR someimage.gif ,
+then this is the name that would appear on the HFS part of the CD. However, as
+mkisoimage uses the Unix name as the starting point for the other names, then
+the ISO9660 name generated will probably be 
+.I SOMEIMAG.BIN
+and the Joliet/Rock Ridge would be
+.IR someimage.gif.bin .
+Although the actual data (in this case) is a GIF image. This option will use
+the HFS filename as the starting point and the ISO9660 name will probably be
+.I SOMEIMAG.GIF
+and the Joliet/Rock Ridge would be
+.IR someimage.gif .
+.PP
+Using the
+.B \-mac\-name
+option will not currently work with the
+.B \-T
+option - the Unix
+name will be used in the TRANS.TBL file, not the Macintosh name.
+.PP
+The character set used to convert any HFS file name to a Joliet/Rock Ridge
+file name defaults to
+.I cp10000
+(Mac Roman).
+The character set used can be specified using the
+.I \-input\-hfs\-charset
+option. Other built in HFS character sets are: cp10006 (MacGreek),
+cp10007 (MacCyrillic), cp10029 (MacLatin2), cp10079 (MacIcelandandic) and
+cp10081 (MacTurkish).
+.PP
+Note: the character codes used by HFS file names taken from the various
+Apple/Unix formats will not be converted as they are assumed to be in the
+correct Apple character set. Only the Joliet/Rock Ridge names derived from
+the HFS file names will be converted.
+.PP
+The existing mkisoimage code will filter out any illegal characters for the
+ISO9660 and Joliet filenames, but as mkisoimage expects to be dealing
+directly with Unix names, it leaves the Rock Ridge names as is.
+But as '/' is a legal HFS filename character, the
+.B \-mac\-name
+option converts '/' to a '_' in Rock Ridge filenames.
+.PP
+If the Apple extensions are used, then only the ISO9660 filenames will
+appear on the Macintosh. However, as the Macintosh ISO9660 drivers can use
+.I Level 2
+filenames, then you can use options like
+.B \-allow\-multidot
+without problems on
+a Macintosh - still take care over the names, for example
+.I this.file.name
+will be converted to
+.I THIS.FILE
+i.e. only have one '.', also filename
+.I abcdefgh
+will be seen as
+.I ABCDEFGH
+but
+.I abcdefghi
+will be seen as
+.I ABCDEFGHI.
+i.e. with a '.' at the end - don't know if this is a Macintosh
+problem or m\&kisofs/mkhybrid problem. All filenames will be in upper case
+when viewed on a Macintosh. Of course, DOS/Win3.X machines will not be able
+to see Level 2 filenames...
+
+.SH "HFS CUSTOM VOLUME/FOLDER ICONS
+To give a HFS CD a custom icon, make sure the root (top level) folder includes
+a standard Macintosh volume icon file. To give a volume a custom icon on
+a Macintosh, an icon has to be pasted over the volume's icon in the "Get Info"
+box of the volume. This creates an invisible file called 'Icon\\r' ('\\r' is
+the 'carriage return' character) in the root folder.
+.P
+A custom folder icon is very similar - an invisible file called 'Icon\\r'
+exits in the folder itself.
+.P
+Probably the easiest way to create a custom icon that mkisoimage can use, is to
+format a blank HFS floppy disk on a Mac, paste an icon to its "Get Info"
+box. If using Linux with the HFS module installed, mount the floppy using
+something like:
+
+	mount \-t hfs /dev/fd0 /mnt/floppy
+
+The floppy will be mounted as a CAP file system by default. Then run mkisoimage
+using something like:
+
+	mkisoimage \-\-cap \-o output source_dir /mnt/floppy
+
+If you are not using Linux, then you can use the hfsutils to copy the icon
+file from the floppy. However, care has to be taken, as the icon file
+contains a control character. e.g.
+
+	hmount /dev/fd0
+.br
+	hdir \-a
+.br
+	hcopy \-m Icon^V^M icon_dir/icon
+
+Where '^V^M' is control\-V followed by control\-M. Then run 
+.B mkisoimage
+by using something like:
+
+	mkisoimage \-\-macbin \-o output source_dir icon_dir
+.PP
+The procedure for creating/using custom folder icons is very similar - paste
+an icon to folder's "Get Info" box and transfer the resulting 'Icon\\r'
+file to the relevant directory in the mkisoimage source tree.
+.PP
+You may want to hide the icon files from the ISO9660 and Joliet trees.
+.PP
+To give a custom icon to a Joliet CD, follow the instructions found at:
+http://www.fadden.com/cdrfaq/faq03.html#[3-21]
+
+.SH "HFS BOOT DRIVER
+It 
+.I may
+be possible to make the hybrid CD bootable on a Macintosh.
+.PP
+A bootable HFS CD requires an Apple CD-ROM (or compatible) driver, a bootable
+HFS partition and the necessary System, Finder, etc. files.
+.PP
+A driver can be obtained from any other Macintosh bootable CD-ROM using the
+.I apple_driver
+utility. This file can then be used with the
+.B \-boot\-hfs\-file
+option.
+.PP
+The HFS partition (i.e. the hybrid disk in our case) must contain a
+suitable System Folder, again from another CD-ROM or disk.
+.PP
+For a partition to be bootable, it must have it's 
+.I boot block
+set. The boot
+block is in the first two blocks of a partition. For a non-bootable partition
+the boot block is full of zeros. Normally, when a System file is copied to
+partition on a Macintosh disk, the boot block is filled with a number of
+required settings - unfortunately I don't know the full spec for the boot
+block, so I'm guessing that the following will work OK.
+.PP
+Therefore, the utility
+.I apple_driver
+also extracts the boot block from the
+first HFS partition it finds on the given CD-ROM and this is used for the
+HFS partition created by
+.BR mkisoimage .
+.IP "PLEASE NOTE"
+By using a driver from an Apple CD and copying Apple software to your CD,
+you become liable to obey Apple Computer, Inc. Software License Agreements.
+.SH "EL TORITO BOOT INFORMATION TABLE
+When the
+.B \-boot\-info\-table
+option is given,
+.B mkisoimage
+will modify the boot file specified by the
+.B \-b
+option by inserting a 56-byte "boot information table" at offset 8 in
+the file.  This modification is done in the source filesystem, so make
+sure you use a copy if this file is not easily recreated!  This file
+contains pointers which may not be easily or reliably obtained at boot
+time.
+.PP
+The format of this table is as follows; all integers are in
+section 7.3.1 ("little endian") format.
+.sp
+.RS +.2i
+.ta 1.0i 2.5i 3.5i
+.nf
+Offset	Name	Size	Meaning
+ 8	bi_pvd	4 bytes	LBA of primary volume descriptor
+12	bi_file	4 bytes	LBA of boot file
+16	bi_length	4 bytes	Boot file length in bytes
+20	bi_csum	4 bytes	32-bit checksum
+24	bi_reserved	40 bytes	Reserved
+.fi
+.RE
+.sp
+The 32-bit checksum is the sum of all the 32-bit words in the boot
+file starting at byte offset 64.  All linear block addresses (LBAs)
+are given in CD sectors (normally 2048 bytes).
+.SH "HPPA NOTES"
+To make a bootable CD for HPPA, at the very least a boot loader file (
+.B \-hppa\-bootloader
+), a kernel image file (32- or 64-bit or both, depending on hardware)
+and a boot command line (
+.B \-hppa\-cmdline
+) must be specified. Some systems can boot either a 32- or a 64-bit
+kernel, and the choice of which one to use will be made by the
+firmware. Optionally, a ramdisk can be used for the root filesystem
+using
+.B \-hppa\-cmdline.
+.SH "JIGDO NOTES"
+Jigdo is a useful tool to help in the distribution of large files like CD and
+DVD images. See Richard Atterer's site for more details. Debian CDs and DVD ISO
+images are published on the web in jigdo format to allow end users to download
+them more efficiently.
+.PP
+To create jigdo and template files alongside the ISO image from
+mkisoimage, you must first generate a list of the files that will be
+used, in the following format:
+.sp
+.RS +.2i
+.ta 2.0i 2.0i 5.0i
+.nf
+MD5sum   File size  Path
+32 chars 12 chars   to end of line
+.fi
+.RE
+.sp
+The MD5sum should be written in jigdo's pseudo-base64 format. The file
+size should be in decimal, and the path to the file must be absolute.
+.PP
+Once you have this file, call mkisoimage with all of your normal command
+line parameters. Specify the output filenames for the jigdo and
+template files using \-jigdo\-jigdo and \-jigdo\-template, and pass in
+the location of your MD5 list with the \-md5\-list option.
+.PP
+If there are files that you do NOT want to be added into the jigdo
+file (e.g. if they are likely to change often), specify them using
+\-jigdo\-ignore. If you want to verify some of the files as they are
+written into the image, specify them using \-jigdo\-force\-md5. If any
+files don't match, mkisoimage will then abort. Both of these options take
+regular expressions as input. It is possible to restrict the set of
+files that will be used further based on size - use the
+\-jigdo\-min\-file\-size option.
+.PP
+Finally, the jigdo code needs to know how to map the files it is given
+onto a mirror-style configuration. Specify how to map paths using the
+\-jigdo\-map option. Using "Debian=/mirror/debian" will cause all
+paths starting with "/mirror/debian" to be mapped to "Debian:<file>"
+in the output jigdo file.
+.SH CONFIGURATION
+.B mkisoimage
+looks for the
+.B \&.m\&kisofsrc
+file,
+first in the current working directory,
+then in the user's home directory,
+and then in the directory in which the
+.B mkisoimage
+binary is stored.  This file is assumed to contain a series of lines
+of the form
+.BI TAG= value
+, and in this way you can specify certain options.
+The case of the tag is not significant.
+Some fields in the volume header
+are not settable on the command line, but can be altered through this
+facility.
+Comments may be placed in this file,
+using lines which start with a hash (#) character.
+.TP
+.B APPI
+The application identifier
+should describe the application that will be on the disc.
+There is space on the disc for 128 characters of information.
+May be overridden using the
+.B \-A
+command line option.
+.TP
+.B COPY
+The copyright information,
+often the name of a file on the disc containing the copyright notice.
+There is space in the disc for 37 characters of information.
+May be overridden using the
+.B \-copyright
+command line option.
+.TP
+.B ABST
+The abstract information,
+often the name of a file on the disc containing an abstract.
+There is space in the disc for 37 characters of information.
+May be overridden using the
+.B \-abstract
+command line option.
+.TP
+.B BIBL
+The bibliographic information,
+often the name of a file on the disc containing a bibliography.
+There is space in the disc for 37 characters of information.
+May be overridden using the
+.B \-bilio
+command line option.
+.TP
+.B PREP
+This should describe the preparer of the CD-ROM,
+usually with a mailing address and phone number.
+There is space on the disc for 128 characters of information.
+May be overridden using the
+.B \-p
+command line option.
+.TP
+.B PUBL
+This should describe the publisher of the CD-ROM,
+usually with a mailing address and phone number.
+There is space on the disc for 128 characters of information.
+May be overridden using the
+.B \-publisher
+command line option.
+.TP
+.B SYSI
+The System Identifier.
+There is space on the disc for 32 characters of information.
+May be overridden using the
+.B \-sysid
+command line option.
+.TP
+.B VOLI
+The Volume Identifier.
+There is space on the disc for 32 characters of information.
+May be overridden using the
+.B \-V
+command line option.
+.TP
+.B VOLS
+The Volume Set Name.
+There is space on the disc for 128 characters of information.
+May be overridden using the
+.B \-volset
+command line option.
+.TP
+.B HFS_TYPE
+The default TYPE for Macintosh files. Must be exactly 4 characters.
+May be overridden using the
+.B \-hfs\-type
+command line option.
+.TP
+.B HFS_CREATOR
+The default CREATOR for Macintosh files. Must be exactly 4 characters.
+May be overridden using the
+.B \-hfs\-creator
+command line option.
+.PP
+.B mkisoimage
+can also be configured at compile time with defaults for many of these fields.
+See the file defaults.h.
+
+.SH EXAMPLES
+.PP
+To create a vanilla ISO9660 filesystem image in the file 
+.IR cd.iso ,
+where the directory
+.I cd_dir
+will become the root directory if the CD, call:
+.PP
+% mkisoimage \-o cd.iso cd_dir
+.PP
+To create a CD with Rock Ridge extensions of
+the source directory
+.IR cd_dir :
+.PP
+% mkisoimage \-o cd.iso \-R cd_dir
+.PP
+To create a CD with Rock Ridge extensions of
+the source directory
+.I cd_dir
+where all files have at least read permission and all files
+are owned by
+.IR root ,
+call:
+.PP
+% mkisoimage \-o cd.iso \-r cd_dir
+.PP
+To write a tar archive directly to a CD that will later contain a simple
+ISO9660 filesystem with the tar archive call:
+.PP
+% star \-c . | mkisoimage \-stream\-media\-size 333000 | \\
+.br
+wodim dev=b,t,l \-dao tsize=333000s \-
+.PP
+To create a HFS hybrid CD with the Joliet and Rock Ridge extensions of
+the source directory
+.IR cd_dir :
+.PP
+% mkisoimage \-o cd.iso \-R \-J \-hfs cd_dir
+.PP
+To create a HFS hybrid CD from the source directory 
+.I cd_dir
+that contains
+Netatalk Apple/Unix files:
+.PP
+% mkisoimage \-o cd.iso \-\-netatalk cd_dir
+.PP
+To create a HFS hybrid CD from the source directory
+.IR cd_dir ,
+giving all files
+CREATOR and TYPES based on just their filename extensions listed in the file 
+"mapping".:
+.PP
+% mkisoimage \-o cd.iso \-map mapping cd_dir
+.PP
+To create a CD with the 'Apple Extensions to ISO9660', from the source
+directories
+.I cd_dir
+and
+.IR another_dir.
+Files in all the known Apple/Unix format
+are decoded and any other files are given CREATOR and TYPE based on their
+magic number given in the file "magic":
+.PP
+% mkisoimage \-o cd.iso \-apple \-magic magic \-probe \\
+.br
+        cd_dir another_dir
+.PP
+The following example puts different files on the CD that all have
+the name README, but have different contents when seen as a
+ISO9660/Rock Ridge, Joliet or HFS CD.
+.PP
+Current directory contains:
+.PP
+% ls \-F
+.br
+README.hfs     README.joliet  README.Unix    cd_dir/
+.PP
+The following command puts the contents of the directory
+.I cd_dir
+on the
+CD along with the three README files - but only one will be seen from
+each of the three filesystems:
+.PP
+% mkisoimage \-o cd.iso \-hfs \-J \-r \-graft\-points \\
+.br
+        \-hide README.hfs \-hide README.joliet \\
+.br
+        \-hide\-joliet README.hfs \-hide\-joliet README.Unix \\
+.br
+        \-hide\-hfs README.joliet \-hide\-hfs README.Unix \\
+.br
+        README=README.hfs README=README.joliet \\
+.br
+        README=README.Unix cd_dir
+.PP
+i.e. the file README.hfs will be seen as README on the HFS CD and the
+other two README files will be hidden. Similarly for the Joliet and
+ISO9660/Rock Ridge CD.
+.PP
+There are probably all sorts of strange results possible with
+combinations of the hide options ...
+
+.SH AUTHOR
+.PP
+.br
+Eric Youngdale <ericy at gnu.ai.mit.edu> or <eric at andante.org> wrote the
+first versions (1993 .\|.\|. 1998) of the m\&kisofs utility.
+The copyright for old versions of the m\&kisofs utility is held by
+Yggdrasil Computing, Incorporated.
+.PP
+Major additional parts were written or contributed by the following authors. Also
+see the MAINTAINER section below for recent information.
+.PP
+J\*org Schilling 
+wrote the SCSI transport library and its adaptation layer to
+.B mkisoimage
+and newer parts (starting from 1999) of the utility, this makes
+.B mkisoimage
+.br
+Copyright (C) 1999, 2000, 2001 J\*org Schilling.
+.PP
+HFS hybrid code, Copyright (C) James Pearson 1997, 1998, 1999, 2000, 2001
+.PP
+libhfs code, Copyright (C) 1996, 1997 Robert Leslie
+.PP
+libunls code, Copyright (C) James Pearson 2000, (C) Joerg Schilling 2001-2006, (C) Jungshik Shin 2002
+.PP
+iconv code, Copyright (C) 2003 Jungshik Shin, (C) 2003 Jaakko Heinonen
+.PP
+See MAINTAINER section for contact information.
+.SH NOTES
+.PP
+.B mkisoimage
+is not based on the standard mk*fs tools for Unix, because we must generate
+a complete copy of an existing filesystem on a disk in the ISO9660
+filesystem.  The name mkisoimage is probably a bit of a misnomer, since it
+not only creates the filesystem, but it also populates it.
+However, the appropriate tool name for a Unix tool that creates populated
+filesystems - mkproto - is not well known.
+.PP
+.B mkisoimage
+may safely be installed suid root. This may be needed to allow
+.B mkisoimage
+to read the previous session when creating a multi session image.
+.PP
+If 
+.B mkisoimage 
+is creating a filesystem image with Rock Ridge attributes and the
+directory nesting level of the source directory tree is too much
+for ISO9660, 
+.B mkisoimage 
+will do deep directory relocation.
+This results in a directory called
+.B RR_MOVED
+in the root directory of the CD. You cannot avoid this directory.
+.PP
+The sparc boot support that is implemented with the
+.B \-sparc\-boot
+options completely follows the official Sparc CD boot requirements from
+the Boot prom in Sun Sparc systems. Some Linux distributions for Sparc
+systems use a boot loader called
+.B SILO
+that unfortunately is not Sparc CD boot compliant.
+It is annoyingly to see that the Authors of SILO don't fix SILO but instead
+provide a completely unneeded "patch" to mkisoimage that incorporates far
+more source than the fix for SILO would need.
+.SH BUGS
+.TP
+\(bu
+Any files that have hard links to files not in the tree being copied to the
+ISO9660 filesystem will have an incorrect file reference count.
+.TP
+\(bu
+Does not check for SUSP record(s) in "." entry of the
+root directory to verify the existence of Rock Ridge
+enhancements.
+.sp
+This problem is present when reading old sessions while
+adding data in multi-session mode.
+.TP
+\(bu
+Does not properly read relocated directories in multi-session
+mode when adding data.
+.sp
+Any relocated deep directory is lost if the new session does not
+include the deep directory.
+.sp
+Repeat by: create first session with deep directory relocation
+then add new session with a single dir that differs from the
+old deep path.
+.TP
+\(bu
+Does not re-use RR_MOVED when doing multi-session from TRANS.TBL
+.TP
+\(bu
+Does not create whole_name entry for RR_MOVED in multi-session
+mode.
+.PP
+There may be some other ones.  Please, report them to the author.
+
+.SH "HFS PROBLEMS/LIMITATIONS
+I have had to make several assumptions on how I expect the modified
+libhfs routines to work, however there may be situations that either
+I haven't thought of, or come across when these assumptions fail.
+Therefore I can't guarantee that mkisoimage will work as expected
+(although I haven't had a major problem yet). Most of the HFS features work
+fine, however, some are not fully tested. These are marked as
+.I Alpha
+above.
+.PP
+Although HFS filenames appear to support upper and lower case letters,
+the filesystem is case insensitive. i.e. the filenames "aBc" and "AbC"
+are the same. If a file is found in a directory with the same HFS name, then
+.I mkisoimage
+will attempt, where possible, to make a unique name by adding '_' characters
+to one of the filenames.
+.PP
+HFS file/directory names that share the first 31 characters have
+_N' (N == decimal number) substituted for the last few characters
+to generate unique names.
+.PP
+Care must be taken when "grafting" Apple/Unix files or directories (see
+above for the method and syntax involved). It is not possible to use a
+new name for an Apple/Unix encoded file/directory. e.g. If a Apple/Unix
+encoded file called "oldname" is to added to the CD, then you can not use
+the command line:
+.IP
+mkisoimage \-o output.raw \-hfs \-graft\-points newname=oldname cd_dir
+.LP
+mkisoimage will be unable to decode "oldname". However, you can graft
+Apple/Unix encoded files or directories as long as you do not attempt to
+give them new names as above.
+.PP
+When creating an HFS volume with the multisession options,
+.B \-M
+and
+.BR \-C ,
+only files in the last session will be in the HFS volume. i.e. mkisoimage can
+not
+.I add
+existing files from previous sessions to the HFS volume.
+.PP
+However, if each session is created with the
+.B \-part
+option, then each session will appear as 
+separate volumes when mounted on a Mac. In this case, it is worth using the 
+.B \-V
+or
+.B \-hfs\-volid
+option to give each session a unique volume name,
+otherwise each "volume" will appear on the Desktop with the same name.
+.PP
+Symbolic links (as with all other non-regular files) are not added to
+the HFS directory.
+.PP
+Hybrid volumes may be larger than pure ISO9660 volumes
+containing the same data. In some cases (e.g. DVD sized volumes) the hybrid
+volume may be significantly larger. As an HFS volume gets bigger, so does the
+allocation block size (the smallest amount of space a file can occupy).
+For a 650Mb CD, the allocation block is 10Kb, for a 4.7Gb DVD it will be
+about 70Kb.
+.PP
+The maximum number of files in an HFS volume is about 65500 - although
+the real limit will be somewhat less than this.
+.PP
+The resulting hybrid volume can be accessed on a Unix machine by using
+the hfsutils routines. However, no changes can be made to the volume as it
+is set as
+.B locked.
+The option
+.B \-hfs\-unlock
+will create an output image that is unlocked - however no changes should be
+made to the contents of the volume (unless you really know what you are
+doing) as it's not a "real" HFS volume.
+.PP
+Using the
+.B \-mac\-name
+option will not currently work with the
+.B \-T
+option - the Unix
+name will be used in the TRANS.TBL file, not the Macintosh name.
+.PP
+Although 
+.B mkisoimage
+does not alter the contents of a file, if a binary file has it's TYPE
+set as 'TEXT', it
+.I may
+be read incorrectly on a Macintosh. Therefore a better choice for the
+default TYPE may be '????'
+.PP
+The
+.B \-mac\-boot\-file
+option may not work at all...
+.PP
+May not work with PC Exchange v2.2 or higher files (available with MacOS 8.1).
+DOS media containing PC Exchange files should be mounted as type
+.B msdos
+(not
+.BR vfat )
+when using Linux.
+.PP
+The SFM format is only partially supported - see
+.B HFS MACINTOSH FILE FORMATS
+section above.
+.PP
+It is not possible to use the the
+.B \-sparc\-boot
+or
+.B \-generic\-boot
+options with the 
+.B \-boot\-hfs\-file
+or
+.B \-prep\-boot
+options.
+.PP
+.B mkisoimage
+should be able to create HFS hybrid images over 4Gb, although this has not
+been fully tested.
+
+.SH "SEE ALSO
+.BR wodim (1),
+.BR mkzftree (8),
+.BR magic (5),
+.BR apple_driver (8).
+
+.SH "FUTURE IMPROVEMENTS
+Some sort of gui interface.
+.SH AVAILABILITY
+.B m\&kisofs
+is available as part of the cdrkit package from
+http://alioth.debian.org/projects/debburn/. For other implementations/spinoffs
+of mkisoimage, look at the homepage of the particular developers.
+.B hfsutils
+from ftp://ftp.mars.org/pub/hfs
+.SH "MAILING LISTS
+If you want to actively take part on the development of m\&kisofs,
+you may join the Cdrkit developers mailing list by following the instructions on:
+.nf
+.sp
+https://alioth.debian.org/mail/?group_id=31006	
+.sp
+.fi
+and include the word
+.I subscribe
+in the body.
+The mail address of the list is:
+.nf
+.B
+debburn-devel at lists.alioth.debian.org
+.fi
+
+.SH MAINTAINER
+.PP
+This is the Cdrkit spinoff of the original mkisofs application. Maintained by:
+.nf
+Joerg Jaspert
+Eduard Bloch
+Steve McIntyre
+Ben Hutchings
+and other contributors
+.PP
+Cdrkit implementation of mkisoimage is derived from mkisofs in the Cdrtools
+package [1] (however now developed independently), having previous maintainers:
+.PP
+.nf
+J\*org Schilling
+Seestr. 110
+D-13353 Berlin
+Germany
+.fi
+.PP
+.nf
+James Pearson (HFS MKHYBRID MAINTAINER)
+j.pearson at ge.ucl.ac.uk
+
+.PP
+If you have support questions, send them to:
+.PP
+.B
+debburn-devel at lists.alioth.debian.org
+
+.PP
+Note that Cdrkit is not affiliated to Cdrtools and vice versa.
+
+.SH ACKNOWLEDGEMENTS
+UNIX is a registered trademark of The Open Group in the US and other countries.
+
+.SH SOURCES
+.PP
+.br
+[1] Cdrtools 2.01.01a08 from May 2006, http://cdrecord.berlios.de
+

Copied: cdrkit/trunk/mkisoimage/mkisoimage.c (from rev 449, cdrkit/trunk/mkisoimage/mkisofs.c)
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisoimage.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -0,0 +1,3769 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ *
+ * Patched version with stuff from the Debian's cdrtools.
+ * Replaced various warnings/disclaimers with more simple ones.
+ *
+ * Eduard Bloch <blade at debian.org>
+*/
+/* @(#)mkisoimage.c	1.167 06/01/30 joerg */
+#ifndef lint
+static	char sccsid[] =
+	"@(#)mkisoimage.c	1.167 06/01/30 joerg";
+#endif
+/*
+ * Program mkisoimage.c - generate iso9660 filesystem  based upon directory
+ * tree on hard disk.
+ *
+ * Written by Eric Youngdale (1993).
+ *
+ * Copyright 1993 Yggdrasil Computing, Incorporated
+ * Copyright (c) 1999,2000-2004 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 at ge.ucl.ac.uk 22/2/2000 */
+
+#include <mconfig.h>
+#include "mkisoimage.h"
+#include <errno.h>
+#include <timedefs.h>
+#include <fctldefs.h>
+#include <ctype.h>
+#include "match.h"
+#include "exclude.h"
+#include <unls.h>	/* For UNICODE translation */
+#include <schily.h>
+#ifdef UDF
+#include "udf.h"
+#endif
+
+#ifdef	NEED_O_BINARY
+#include <io.h>					/* for setmode() prototype */
+#endif
+
+#include "getopt.h"	/* Always include local (nonstandard) getopt.h */
+
+#ifdef VMS
+#include "vms.h"
+#endif
+
+#ifdef	no_more_needed
+#ifdef __NetBSD__
+#include <sys/resource.h>
+#endif
+#endif	/* no_more_needed */
+
+#ifdef USE_ICONV
+#include <locale.h>
+#include <langinfo.h>
+#endif
+
+struct directory *root = NULL;
+int		path_ind;
+
+char	version_string[] = "mkisoimage 2.01.01a05-unofficial-iconv";
+
+char		*outfile;
+FILE		*discimage;
+unsigned int	next_extent	= 0;
+unsigned int	last_extent	= 0;
+unsigned int	session_start	= 0;
+unsigned int	path_table_size	= 0;
+unsigned int	path_table[4]	= {0, };
+unsigned int	path_blocks	= 0;
+
+
+unsigned int	jpath_table_size = 0;
+unsigned int	jpath_table[4]	= {0, };
+unsigned int	jpath_blocks	= 0;
+
+struct iso_directory_record root_record;
+struct iso_directory_record jroot_record;
+
+char	*extension_record = NULL;
+int	extension_record_extent = 0;
+int	extension_record_size = 0;
+
+/* These variables are associated with command line options */
+int	check_oldnames = 0;
+int	check_session = 0;
+int	use_eltorito = 0;
+int	hard_disk_boot = 0;
+int	not_bootable = 0;
+int	no_emul_boot = 0;
+int	load_addr = 0;
+int	load_size = 0;
+int	boot_info_table = 0;
+int	use_alphaboot = 0;
+int	use_sparcboot = 0;
+int	use_hppaboot = 0;
+int	use_mipsboot = 0;
+int	use_mipselboot = 0;
+int	use_sunx86boot = 0;
+int	use_genboot = 0;
+int	use_RockRidge = 0;
+int	use_XA = 0;
+int	osecsize = 0;	/* Output-sector size, 0 means default secsize 2048 */
+int	use_Joliet = 0;
+int	jlen = JMAX;	/* maximum Joliet file name length */
+int	verbose = 1;
+int	debug = 0;
+int	gui = 0;
+int	all_files = 1;	/* New default is to include all files */
+int	follow_links = 0;
+#ifdef	IS_CYGWIN
+int	cache_inodes = 0; /* Do not cache inodes on Cygwin by default */
+#else
+int	cache_inodes = 1; /* Cache inodes if OS has unique inodes */
+#endif
+int	rationalize = 0;
+int	rationalize_uid = 0;
+int	rationalize_gid = 0;
+int	rationalize_filemode = 0;
+int	rationalize_dirmode = 0;
+uid_t	uid_to_use = 0;		/* when rationalizing uid */
+gid_t	gid_to_use = 0;		/* when rationalizing gid */
+int	filemode_to_use = 0;	/* if non-zero, when rationalizing file mode */
+int	dirmode_to_use = 0;	/* if non-zero, when rationalizing dir mode */
+int	new_dir_mode = 0555;
+int	generate_tables = 0;
+int	dopad = 1;	/* Now default to do padding */
+int	print_size = 0;
+int	split_output = 0;
+char	*icharset = NULL;	/* input charset to convert to UNICODE */
+char	*ocharset = NULL;	/* output charset to convert from UNICODE */
+char	*preparer = PREPARER_DEFAULT;
+char	*publisher = PUBLISHER_DEFAULT;
+char	*appid = APPID_DEFAULT;
+char	*copyright = COPYRIGHT_DEFAULT;
+char	*biblio = BIBLIO_DEFAULT;
+char	*abstract = ABSTRACT_DEFAULT;
+char	*volset_id = VOLSET_ID_DEFAULT;
+char	*volume_id = VOLUME_ID_DEFAULT;
+char	*system_id = SYSTEM_ID_DEFAULT;
+char	*boot_catalog = BOOT_CATALOG_DEFAULT;
+char	*boot_image = BOOT_IMAGE_DEFAULT;
+char	*genboot_image = BOOT_IMAGE_DEFAULT;
+int	ucs_level = 3;		/* We now have Unicode tables so use level 3 */
+int	volume_set_size = 1;
+int	volume_sequence_number = 1;
+
+struct eltorito_boot_entry_info *first_boot_entry = NULL;
+struct eltorito_boot_entry_info *last_boot_entry = NULL;
+struct eltorito_boot_entry_info *current_boot_entry = NULL;
+
+int	use_graft_ptrs;		/* Use graft points */
+int	jhide_trans_tbl;	/* Hide TRANS.TBL from Joliet tree */
+int	hide_rr_moved;		/* Name RR_MOVED .rr_moved in Rock Ridge tree */
+int	omit_period = 0;	/* Violates iso9660, but these are a pain */
+int	transparent_compression = 0; /* So far only works with linux */
+int	omit_version_number = 0; /* May violate iso9660, but noone uses vers */
+int	no_rr = 0;		/* Do not use RR attributes from old session */
+int	force_rr = 0;		/* Force to use RR attributes from old session */
+Uint	RR_relocation_depth = 6; /* Violates iso9660, but most systems work */
+int	iso9660_level = 1;
+int	iso9660_namelen = LEN_ISONAME; /* 31 characters, may be set to 37 */
+int	full_iso9660_filenames = 0; /* Full 31 character iso9660 filenames */
+int	relaxed_filenames = 0;	/* For Amiga.  Disc will not work with DOS */
+int	allow_lowercase = 0;	/* Allow lower case letters */
+int	allow_multidot = 0;	/* Allow more than on dot in filename */
+int	iso_translate = 1;	/* 1 == enables '#', '-' and '~' removal */
+int	allow_leading_dots = 0;	/* DOS cannot read names with leading dots */
+#ifdef	VMS
+int	use_fileversion = 1;	/* Use file version # from filesystem */
+#else
+int	use_fileversion = 0;	/* Use file version # from filesystem */
+#endif
+int	split_SL_component = 1;	/* circumvent a bug in the SunOS driver */
+int	split_SL_field = 1;	/* circumvent a bug in the SunOS */
+char	*trans_tbl = "TRANS.TBL"; /* default name for translation table */
+int	stream_media_size = 0;	/* # of blocks on the media */
+char	*stream_filename = "STREAM.IMG;1"; /* Default stream file name */
+
+#ifdef APPLE_HYB
+int	apple_hyb = 0;		/* create HFS hybrid flag */
+int	apple_ext = 0;		/* create HFS extensions flag */
+int	apple_both = 0;		/* common flag (for above) */
+int	hfs_extra = 0;		/* extra HFS blocks added to end of ISO vol */
+int	use_mac_name = 0;	/* use Mac name for ISO/Joliet/RR flag */
+hce_mem	*hce;			/* libhfs/mkisoimage extras */
+char	*hfs_boot_file = 0;	/* name of HFS boot file */
+int	gen_pt = 0;		/* generate HFS partition table */
+char	*autoname = 0;		/* AutoStart filename */
+char	*magic_filename = 0;	/* name of magic file */
+int	probe = 0;		/* search files for HFS/Unix type */
+int	nomacfiles = 0;		/* don't look for Mac/Unix files */
+int	hfs_select = 0;		/* Mac/Unix types to select */
+int	create_dt = 1;		/* create the Desktp files */
+int	afe_size = 0;		/* Apple File Exchange block size */
+int	hfs_last = MAG_LAST;	/* process magic file after map file */
+char	*deftype = APPLE_TYPE_DEFAULT;	/* default Apple TYPE */
+char	*defcreator = APPLE_CREATOR_DEFAULT;	/* default Apple CREATOR */
+char	*hfs_volume_id = NULL;	/* HFS volume ID */
+int	icon_pos = 0;		/* Keep icon position */
+char	*hfs_icharset = NULL;	/* input HFS charset name */
+char    *hfs_ocharset = NULL;	/* output HFS charset name */
+int	hfs_lock = 1;		/* lock HFS volume (read-only) */
+char	*hfs_bless = NULL;	/* name of folder to 'bless' (System Folder) */
+char	*hfs_parms = NULL;	/* low level HFS parameters */
+
+#ifdef PREP_BOOT
+char	*prep_boot_image[4];
+int	use_prep_boot = 0;
+int	use_chrp_boot = 0;
+#endif	/* PREP_BOOT */
+#endif	/* APPLE_HYB */
+
+#ifdef UDF
+int	use_udf = 0;
+#endif
+
+#ifdef DVD_VIDEO
+int	dvd_video = 0;
+#endif
+
+#ifdef SORTING
+int	do_sort = 0;		/* sort file data */
+#endif /* SORTING */
+
+#ifdef USE_ICONV
+int   iconv_possible;
+#endif
+
+struct unls_table *in_nls = NULL;  /* input UNICODE conversion table */
+struct unls_table *out_nls = NULL; /* output UNICODE conversion table */
+#ifdef APPLE_HYB
+struct unls_table *hfs_inls = NULL; /* input HFS UNICODE conversion table */
+struct unls_table *hfs_onls = NULL; /* output HFS UNICODE conversion table */
+#endif /* APPLE_HYB */
+
+struct rcopts {
+	char		*tag;
+	char		**variable;
+};
+
+struct rcopts rcopt[] = {
+	{"PREP", &preparer},
+	{"PUBL", &publisher},
+	{"APPI", &appid},
+	{"COPY", &copyright},
+	{"BIBL", &biblio},
+	{"ABST", &abstract},
+	{"VOLS", &volset_id},
+	{"VOLI", &volume_id},
+	{"SYSI", &system_id},
+#ifdef APPLE_HYB
+	{"HFS_TYPE", &deftype},
+	{"HFS_CREATOR", &defcreator},
+#endif	/* APPLE_HYB */
+	{NULL, NULL}
+};
+
+/*
+ * In case it isn't obvious, the option handling code was ripped off
+ * from GNU-ld.
+ */
+struct ld_option {
+	/* The long option information.  */
+	struct option	opt;
+	/* The short option with the same meaning ('\0' if none).  */
+	char		shortopt;
+	/* The name of the argument (NULL if none).  */
+	const char	*arg;
+	/*
+	 * The documentation string.  If this is NULL, this is a synonym for
+	 * the previous option.
+	 */
+	const char	*doc;
+	enum {
+		/* Use one dash before long option name.  */
+		ONE_DASH,
+		/* Use two dashes before long option name.  */
+		TWO_DASHES,
+		/* Don't mention this option in --help output.  */
+		NO_HELP
+	} control;
+};
+
+/*
+ * Codes used for the long options with no short synonyms. Note that all these
+ * values must not be ASCII or EBCDIC.
+ */
+#define	OPTION_HELP			1000
+#define	OPTION_QUIET			1001
+#define	OPTION_NOSPLIT_SL_COMPONENT	1002
+#define	OPTION_NOSPLIT_SL_FIELD		1003
+#define	OPTION_PRINT_SIZE		1004
+#define	OPTION_SPLIT_OUTPUT		1005
+#define	OPTION_ABSTRACT			1006
+#define	OPTION_BIBLIO			1007
+#define	OPTION_COPYRIGHT		1008
+#define	OPTION_SYSID			1009
+#define	OPTION_VOLSET			1010
+#define	OPTION_VOLSET_SIZE		1011
+#define	OPTION_VOLSET_SEQ_NUM		1012
+#define	OPTION_I_HIDE			1013
+#define	OPTION_J_HIDE			1014
+#define	OPTION_LOG_FILE			1015
+#define	OPTION_PVERSION			1016
+#define	OPTION_NOBAK			1017
+#define	OPTION_SPARCLABEL		1018
+#define	OPTION_HARD_DISK_BOOT		1019
+#define	OPTION_NO_EMUL_BOOT		1020
+#define	OPTION_NO_BOOT			1021
+#define	OPTION_BOOT_LOAD_ADDR		1022
+#define	OPTION_BOOT_LOAD_SIZE		1023
+#define	OPTION_BOOT_INFO_TABLE		1024
+#define	OPTION_HIDE_TRANS_TBL		1025
+#define	OPTION_HIDE_RR_MOVED		1026
+#define	OPTION_GUI			1027
+#define	OPTION_TRANS_TBL		1028
+#define	OPTION_P_LIST			1029
+#define	OPTION_I_LIST			1030
+#define	OPTION_J_LIST			1031
+#define	OPTION_X_LIST			1032
+#define	OPTION_NO_RR			1033
+#define	OPTION_JCHARSET			1034
+#define	OPTION_PAD			1035
+#define	OPTION_H_HIDE			1036
+#define	OPTION_H_LIST			1037
+#define	OPTION_CHECK_OLDNAMES		1038
+
+#ifdef SORTING
+#define	OPTION_SORT			1039
+#endif /* SORTING */
+#define	OPTION_UCS_LEVEL		1040
+#define	OPTION_ISO_TRANSLATE		1041
+#define	OPTION_ISO_LEVEL		1042
+#define	OPTION_RELAXED_FILENAMES	1043
+#define	OPTION_ALLOW_LOWERCASE		1044
+#define	OPTION_ALLOW_MULTIDOT		1045
+#define	OPTION_USE_FILEVERSION		1046
+#define	OPTION_MAX_FILENAMES		1047
+#define	OPTION_ALT_BOOT			1048
+#define	OPTION_USE_GRAFT		1049
+
+#define	OPTION_INPUT_CHARSET		1050
+#define	OPTION_OUTPUT_CHARSET		1051
+
+#define	OPTION_NOPAD			1052
+#define	OPTION_UID			1053
+#define	OPTION_GID			1054
+#define	OPTION_FILEMODE			1055
+#define	OPTION_DIRMODE			1056
+#define	OPTION_NEW_DIR_MODE		1057
+#define	OPTION_CACHE_INODES		1058
+#define	OPTION_NOCACHE_INODES		1059
+
+#define	OPTION_CHECK_SESSION		1060
+#define	OPTION_FORCE_RR			1061
+
+#define	OPTION_DEBUG			1062
+
+#define	OPTION_JLONG			1063
+
+#define	OPTION_STREAM_FILE_NAME		1064
+#define	OPTION_STREAM_CD_SIZE		1065
+
+#define	OPTION_XA			1066
+#define	OPTION_XA_RATIONALIZED		1067
+
+#define	OPTION_SUNX86BOOT		1068
+#define	OPTION_SUNX86LABEL		1069
+
+#define	OPTION_ALLOW_LEADING_DOTS	1070
+#define	OPTION_PUBLISHER		1071
+
+#ifdef		JIGDO_TEMPLATE
+#define	OPTION_JTT_OUTPUT		1101
+#define	OPTION_JTJ_OUTPUT		1102
+#define	OPTION_JT_MIN_SIZE		1103
+#define	OPTION_JT_PATH_MAP		1104
+#define	OPTION_JT_MD5_LIST		1105
+#define	OPTION_JT_INCLUDE		1106
+#define	OPTION_JT_EXCLUDE		1107
+#endif
+
+#define	OPTION_BOOTALPHA		1200
+
+#define	OPTION_HPPA_CMDLINE 		1210
+#define	OPTION_HPPA_KERNEL_32   	1211
+#define	OPTION_HPPA_KERNEL_64   	1212
+#define	OPTION_HPPA_BOOTLOADER  	1213
+#define	OPTION_HPPA_RAMDISK     	1214
+
+#define	OPTION_BOOTMIPS     		1220
+
+#define	OPTION_BOOTMIPSEL   		1230
+
+#ifdef UDF
+#define	OPTION_UDF			1500
+#endif
+#ifdef DVD_VIDEO
+#define	OPTION_DVD			1501
+#endif
+
+#ifdef APPLE_HYB
+#define	OPTION_CAP			2000
+#define	OPTION_NETA			2001
+#define	OPTION_DBL			2002
+#define	OPTION_ESH			2003
+#define	OPTION_FE			2004
+#define	OPTION_SGI			2005
+#define	OPTION_MBIN			2006
+#define	OPTION_SGL			2007
+/* aliases */
+#define	OPTION_USH			2008
+#define	OPTION_XIN			2009
+
+#define	OPTION_DAVE			2010
+#define	OPTION_SFM			2011
+#define	OPTION_XDBL			2012
+#define	OPTION_XHFS			2013
+
+#define	OPTION_PROBE			2020
+#define	OPTION_MACNAME			2021
+#define	OPTION_NOMACFILES		2022
+#define	OPTION_BOOT_HFS_FILE		2023
+#define	OPTION_MAGIC_FILE		2024
+
+#define	OPTION_HFS_LIST			2025
+
+#define	OPTION_GEN_PT			2026
+
+#define	OPTION_CREATE_DT		2027
+#define	OPTION_HFS_HIDE			2028
+
+#define	OPTION_AUTOSTART		2029
+#define	OPTION_BSIZE			2030
+#define	OPTION_HFS_VOLID		2031
+#define	OPTION_PREP_BOOT		2032
+#define	OPTION_ICON_POS			2033
+
+#define	OPTION_HFS_TYPE			2034
+#define	OPTION_HFS_CREATOR		2035
+
+#define	OPTION_ROOT_INFO		2036
+
+#define	OPTION_HFS_INPUT_CHARSET	2037
+#define	OPTION_HFS_OUTPUT_CHARSET	2038
+
+#define	OPTION_HFS_UNLOCK		2039
+#define	OPTION_HFS_BLESS		2040
+#define	OPTION_HFS_PARMS		2041
+
+#define	OPTION_CHRP_BOOT		2042
+
+#define	OPTION_RELOC_ROOT		2043
+#define	OPTION_RELOC_OLD_ROOT		2044
+
+#define	OPTION_MAP_FILE			2045
+
+#endif	/* APPLE_HYB */
+
+static int	save_pname = 0;
+
+static const struct ld_option ld_options[] =
+{
+	{{"nobak", no_argument, NULL, OPTION_NOBAK},
+	'\0', NULL, "Do not include backup files", ONE_DASH},
+	{{"no-bak", no_argument, NULL, OPTION_NOBAK},
+	'\0', NULL, "Do not include backup files", ONE_DASH},
+	{{"abstract", required_argument, NULL, OPTION_ABSTRACT},
+	'\0', "FILE", "Set Abstract filename", ONE_DASH},
+	{{"appid", required_argument, NULL, 'A'},
+	'A', "ID", "Set Application ID", ONE_DASH},
+	{{"biblio", required_argument, NULL, OPTION_BIBLIO},
+	'\0', "FILE", "Set Bibliographic filename", ONE_DASH},
+	{{"cache-inodes", no_argument, NULL, OPTION_CACHE_INODES},
+	'\0', NULL, "Cache inodes (needed to detect hard links)", ONE_DASH},
+	{{"no-cache-inodes", no_argument, NULL, OPTION_NOCACHE_INODES},
+	'\0', NULL, "Do not cache inodes (if filesystem has no unique unides)", ONE_DASH},
+	{{"check-oldnames", no_argument, NULL, OPTION_CHECK_OLDNAMES},
+	'\0', NULL, "Check all imported ISO9660 names from old session", ONE_DASH},
+	{{"check-session", required_argument, NULL, OPTION_CHECK_SESSION},
+	'\0', "FILE", "Check all ISO9660 names from previous session", ONE_DASH},
+	{{"copyright", required_argument, NULL, OPTION_COPYRIGHT},
+	'\0', "FILE", "Set Copyright filename", ONE_DASH},
+	{{"debug", no_argument, NULL, OPTION_DEBUG},
+	'\0', NULL, "Set debug flag", ONE_DASH},
+	{{"eltorito-boot", required_argument, NULL, 'b'},
+	'b', "FILE", "Set El Torito boot image name", ONE_DASH},
+	{{"eltorito-alt-boot", no_argument, NULL, OPTION_ALT_BOOT},
+	'\0', NULL, "Start specifying alternative El Torito boot parameters", ONE_DASH},
+	{{"sparc-boot", required_argument, NULL, 'B'},
+	'B', "FILES", "Set sparc boot image names", ONE_DASH},
+	{{"sunx86-boot", required_argument, NULL, OPTION_SUNX86BOOT},
+	'\0', "FILES", "Set sunx86 boot image names", ONE_DASH},
+	{{"generic-boot", required_argument, NULL, 'G'},
+	'G', "FILE", "Set generic boot image name", ONE_DASH},
+	{{"sparc-label", required_argument, NULL, OPTION_SPARCLABEL},
+	'\0', "label text", "Set sparc boot disk label", ONE_DASH},
+	{{"sunx86-label", required_argument, NULL, OPTION_SUNX86LABEL},
+	'\0', "label text", "Set sunx86 boot disk label", ONE_DASH},
+	{{"eltorito-catalog", required_argument, NULL, 'c'},
+	'c', "FILE", "Set El Torito boot catalog name", ONE_DASH},
+	{{"cdrecord-params", required_argument, NULL, 'C'},
+	'C', "PARAMS", "Magic paramters from cdrecord", ONE_DASH},
+	{{"omit-period", no_argument, NULL, 'd'},
+	'd', NULL, "Omit trailing periods from filenames (violates ISO9660)", ONE_DASH},
+	{{"dir-mode", required_argument, NULL, OPTION_DIRMODE},
+	'\0', "mode", "Make the mode of all directories this mode.", ONE_DASH},
+	{{"disable-deep-relocation", no_argument, NULL, 'D'},
+	'D', NULL, "Disable deep directory relocation (violates ISO9660)", ONE_DASH},
+	{{"file-mode", required_argument, NULL, OPTION_FILEMODE},
+	'\0', "mode", "Make the mode of all plain files this mode.", ONE_DASH},
+	{{"follow-links", no_argument, NULL, 'f'},
+	'f', NULL, "Follow symbolic links", ONE_DASH},
+	{{"gid", required_argument, NULL, OPTION_GID},
+	'\0', "gid", "Make the group owner of all files this gid.",
+	ONE_DASH},
+	{{"graft-points", no_argument, NULL, OPTION_USE_GRAFT},
+	'\0', NULL, "Allow to use graft points for filenames", ONE_DASH},
+	{{"root", required_argument, NULL, OPTION_RELOC_ROOT},
+	'\0', "DIR", "Set root directory for all new files and directories", ONE_DASH},
+	{{"old-root", required_argument, NULL, OPTION_RELOC_OLD_ROOT},
+	'\0', "DIR", "Set root directory in previous session that is searched for files", ONE_DASH},
+	{{"help", no_argument, NULL, OPTION_HELP},
+	'\0', NULL, "Print option help", ONE_DASH},
+	{{"hide", required_argument, NULL, OPTION_I_HIDE},
+	'\0', "GLOBFILE", "Hide ISO9660/RR file", ONE_DASH},
+	{{"hide-list", required_argument, NULL, OPTION_I_LIST},
+	'\0', "FILE", "File with list of ISO9660/RR files to hide", ONE_DASH},
+	{{"hidden", required_argument, NULL, OPTION_H_HIDE},
+	'\0', "GLOBFILE", "Set hidden attribute on ISO9660 file", ONE_DASH},
+	{{"hidden-list", required_argument, NULL, OPTION_H_LIST},
+	'\0', "FILE", "File with list of ISO9660 files with hidden attribute", ONE_DASH},
+	{{"hide-joliet", required_argument, NULL, OPTION_J_HIDE},
+	'\0', "GLOBFILE", "Hide Joliet file", ONE_DASH},
+	{{"hide-joliet-list", required_argument, NULL, OPTION_J_LIST},
+	'\0', "FILE", "File with list of Joliet files to hide", ONE_DASH},
+	{{"hide-joliet-trans-tbl", no_argument, NULL, OPTION_HIDE_TRANS_TBL},
+	'\0', NULL, "Hide TRANS.TBL from Joliet tree", ONE_DASH},
+	{{"hide-rr-moved", no_argument, NULL, OPTION_HIDE_RR_MOVED},
+	'\0', NULL, "Rename RR_MOVED to .rr_moved in Rock Ridge tree", ONE_DASH},
+	{{"gui", no_argument, NULL, OPTION_GUI},
+	'\0', NULL, "Switch behaviour for GUI", ONE_DASH},
+	{{NULL, required_argument, NULL, 'i'},
+	'i', "ADD_FILES", "No longer supported", TWO_DASHES},
+	{{"input-charset", required_argument, NULL, OPTION_INPUT_CHARSET},
+	'\0', "CHARSET", "Local input charset for file name conversion", ONE_DASH},
+	{{"output-charset", required_argument, NULL, OPTION_OUTPUT_CHARSET},
+	'\0', "CHARSET", "Output charset for file name conversion", ONE_DASH},
+	{{"iso-level", required_argument, NULL, OPTION_ISO_LEVEL},
+	'\0', "LEVEL", "Set ISO9660 conformance level (1..3) or 4 for ISO9660 version 2", ONE_DASH},
+	{{"joliet", no_argument, NULL, 'J'},
+	'J', NULL, "Generate Joliet directory information", ONE_DASH},
+	{{"joliet-long", no_argument, NULL, OPTION_JLONG},
+	'\0', NULL, "Allow Joliet file names to be 103 Unicode characters", ONE_DASH},
+	{{"jcharset", required_argument, NULL, OPTION_JCHARSET},
+	'\0', "CHARSET", "Local charset for Joliet directory information", ONE_DASH},
+	{{"full-iso9660-filenames", no_argument, NULL, 'l'},
+	'l', NULL, "Allow full 31 character filenames for ISO9660 names", ONE_DASH},
+	{{"max-iso9660-filenames", no_argument, NULL, OPTION_MAX_FILENAMES},
+	'\0', NULL, "Allow 37 character filenames for ISO9660 names (violates ISO9660)", ONE_DASH},
+
+	{{"allow-leading-dots", no_argument, NULL, OPTION_ALLOW_LEADING_DOTS},
+	'\0', NULL, "Allow ISO9660 filenames to start with '.' (violates ISO9660)", ONE_DASH},
+	{{"ldots", no_argument, NULL, OPTION_ALLOW_LEADING_DOTS},
+	'\0', NULL, "Allow ISO9660 filenames to start with '.' (violates ISO9660)", ONE_DASH},
+
+/* POSIX.1-2001 REMOVE -----> */
+	{{"allow-leading-dots", no_argument, NULL, 'L'},
+	'L', NULL, "OLD Pre-POSIX.1-2001 option - don't use -L", ONE_DASH},
+/* -----> END POSIX.1-2001 REMOVE */
+
+	{{"log-file", required_argument, NULL, OPTION_LOG_FILE},
+	'\0', "LOG_FILE", "Re-direct messages to LOG_FILE", ONE_DASH},
+	{{"exclude", required_argument, NULL, 'm'},
+	'm', "GLOBFILE", "Exclude file name", ONE_DASH},
+	{{"exclude-list", required_argument, NULL, OPTION_X_LIST},
+	'\0', "FILE", "File with list of file names to exclude", ONE_DASH},
+	{{"pad", no_argument, NULL, OPTION_PAD},
+	0, NULL, "Pad output to a multiple of 32k (default)", ONE_DASH},
+	{{"no-pad", no_argument, NULL, OPTION_NOPAD},
+	0, NULL, "Do not pad output to a multiple of 32k", ONE_DASH},
+	{{"prev-session", required_argument, NULL, 'M'},
+	'M', "FILE", "Set path to previous session to merge", ONE_DASH},
+	{{"dev", required_argument, NULL, 'M'},
+	'\0', "SCSIdev", "Set path to previous session to merge", ONE_DASH},
+	{{"omit-version-number", no_argument, NULL, 'N'},
+	'N', NULL, "Omit version number from ISO9660 filename (violates ISO9660)", ONE_DASH},
+	{{"new-dir-mode", required_argument, NULL, OPTION_NEW_DIR_MODE},
+	'\0', "mode", "Mode used when creating new directories.", ONE_DASH},
+	{{"force-rr", no_argument, NULL, OPTION_FORCE_RR},
+	0, NULL, "Inhibit automatic Rock Ridge detection for previous session", ONE_DASH},
+	{{"no-rr", no_argument, NULL, OPTION_NO_RR},
+	0, NULL, "Inhibit reading of Rock Ridge attributes from previous session", ONE_DASH},
+	{{"no-split-symlink-components", no_argument, NULL, OPTION_NOSPLIT_SL_COMPONENT},
+	0, NULL, "Inhibit splitting symlink components", ONE_DASH},
+	{{"no-split-symlink-fields", no_argument, NULL, OPTION_NOSPLIT_SL_FIELD},
+	0, NULL, "Inhibit splitting symlink fields", ONE_DASH},
+	{{"output", required_argument, NULL, 'o'},
+	'o', "FILE", "Set output file name", ONE_DASH},
+	{{"path-list", required_argument, NULL, OPTION_P_LIST},
+	'\0', "FILE", "File with list of pathnames to process", ONE_DASH},
+	{{"preparer", required_argument, NULL, 'p'},
+	'p', "PREP", "Set Volume preparer", ONE_DASH},
+	{{"print-size", no_argument, NULL, OPTION_PRINT_SIZE},
+	'\0', NULL, "Print estimated filesystem size and exit", ONE_DASH},
+	{{"publisher", required_argument, NULL, OPTION_PUBLISHER},
+	'\0', "PUB", "Set Volume publisher", ONE_DASH},
+/* POSIX.1-2001 REMOVE -----> */
+	{{"publisher", required_argument, NULL, 'P'},
+	'P', "PUB", "OLD Pre-POSIX.1-2001 option - don't use -P", ONE_DASH},
+/* -----> END POSIX.1-2001 REMOVE */
+	{{"quiet", no_argument, NULL, OPTION_QUIET},
+	'\0', NULL, "Run quietly", ONE_DASH},
+	{{"rational-rock", no_argument, NULL, 'r'},
+	'r', NULL, "Generate rationalized Rock Ridge directory information", ONE_DASH},
+	{{"rock", no_argument, NULL, 'R'},
+	'R', NULL, "Generate Rock Ridge directory information", ONE_DASH},
+	{{"sectype", required_argument, NULL, 's'},
+	's', "TYPE", "Set output sector type to e.g. data/xa1/raw", ONE_DASH},
+
+	{{"alpha-boot", required_argument, NULL, OPTION_BOOTALPHA},
+	'\0', "FILE", "Set alpha boot image name (relative to image root)", ONE_DASH},
+
+	{{"hppa-cmdline", required_argument, NULL, OPTION_HPPA_CMDLINE},
+	'\0', "CMDLINE", "Set hppa boot command line (relative to image root)", ONE_DASH},
+	{{"hppa-kernel-32", required_argument, NULL, OPTION_HPPA_KERNEL_32},
+	'\0', "FILE", "Set hppa 32-bit image name (relative to image root)", ONE_DASH},
+	{{"hppa-kernel-64", required_argument, NULL, OPTION_HPPA_KERNEL_64},
+	'\0', "FILE", "Set hppa 64-bit image name (relative to image root)", ONE_DASH},
+	{{"hppa-bootloader", required_argument, NULL, OPTION_HPPA_BOOTLOADER},
+	'\0', "FILE", "Set hppa boot loader file name (relative to image root)", ONE_DASH},
+	{{"hppa-ramdisk", required_argument, NULL, OPTION_HPPA_RAMDISK},
+	'\0', "FILE", "Set hppa ramdisk file name (relative to image root)", ONE_DASH},
+
+	{{"mips-boot", required_argument, NULL, OPTION_BOOTMIPS},
+	'\0', "FILE", "Set mips boot image name (relative to image root)", ONE_DASH},
+
+	{{"mipsel-boot", required_argument, NULL, OPTION_BOOTMIPSEL},
+	'\0', "FILE", "Set mipsel boot image name (relative to image root)", ONE_DASH},
+
+#ifdef JIGDO_TEMPLATE
+	{{"jigdo-jigdo", required_argument, NULL, OPTION_JTJ_OUTPUT},
+	'\0', "FILE", "Produce a jigdo .jigdo file as well as the .iso", ONE_DASH },
+	{{"jigdo-template", required_argument, NULL, OPTION_JTT_OUTPUT},
+	'\0', "FILE", "Produce a jigdo .template file as well as the .iso", ONE_DASH },
+	{{"jigdo-min-file-size", required_argument, NULL, OPTION_JT_MIN_SIZE},
+	'\0', "SIZE", "Minimum size for a file to be listed in the jigdo file", ONE_DASH },
+	{{"jigdo-force-md5", required_argument, NULL, OPTION_JT_INCLUDE},
+	'\0', "PATTERN", "Pattern(s) where files MUST match an externally-supplied MD5sum", ONE_DASH },
+	{{"jigdo-exclude", required_argument, NULL, OPTION_JT_EXCLUDE},
+	'\0', "PATTERN", "Pattern(s) to exclude from the jigdo file", ONE_DASH },
+	{{"jigdo-map", required_argument, NULL, OPTION_JT_PATH_MAP},
+	'\0', "PATTERN1=PATTERN2", "Pattern(s) to map paths (e.g. Debian=/mirror/debian)", ONE_DASH },
+	{{"md5-list", required_argument, NULL, OPTION_JT_MD5_LIST},
+	'\0', "FILE", "File containing MD5 sums of the files that should be checked", ONE_DASH },
+#endif
+
+#ifdef SORTING
+	{ {"sort", required_argument, NULL, OPTION_SORT},
+	'\0', "FILE", "Sort file content locations according to rules in FILE", ONE_DASH },
+#endif /* SORTING */
+
+	{{"split-output", no_argument, NULL, OPTION_SPLIT_OUTPUT},
+	'\0', NULL, "Split output into files of approx. 1GB size", ONE_DASH},
+	{{"stream-file-name", required_argument, NULL, OPTION_STREAM_FILE_NAME},
+	'\0', "FILE_NAME", "Set the stream file ISO9660 name (incl. version)", ONE_DASH},
+	{{"stream-media-size", required_argument, NULL, OPTION_STREAM_CD_SIZE},
+	'\0', "#", "Set the size of your CD media in sectors", ONE_DASH},
+	{{"sysid", required_argument, NULL, OPTION_SYSID},
+	'\0', "ID", "Set System ID", ONE_DASH},
+	{{"translation-table", no_argument, NULL, 'T'},
+	'T', NULL, "Generate translation tables for systems that don't understand long filenames", ONE_DASH},
+	{{"table-name", required_argument, NULL, OPTION_TRANS_TBL},
+	'\0', "TABLE_NAME", "Translation table file name", ONE_DASH},
+	{{"ucs-level", required_argument, NULL, OPTION_UCS_LEVEL},
+	'\0', "LEVEL", "Set Joliet UCS level (1..3)", ONE_DASH},
+
+#ifdef UDF
+	{{"udf", no_argument, NULL, OPTION_UDF},
+	'\0', NULL, "Generate UDF file system", ONE_DASH},
+#endif
+
+#ifdef DVD_VIDEO
+	{{"dvd-video", no_argument, NULL, OPTION_DVD},
+	'\0', NULL, "Generate DVD-Video compliant UDF file system", ONE_DASH},
+#endif
+
+	{{"uid", required_argument, NULL, OPTION_UID},
+	'\0', "uid", "Make the owner of all files this uid.",
+	ONE_DASH},
+	{{"untranslated-filenames", no_argument, NULL, 'U'},
+	/* CSTYLED */
+	'U', NULL, "Allow Untranslated filenames (for HPUX & AIX - violates ISO9660). Forces -l, -d, -N, -allow-leading-dots, -relaxed-filenames, -allow-lowercase, -allow-multidot", ONE_DASH},
+	{{"relaxed-filenames", no_argument, NULL, OPTION_RELAXED_FILENAMES},
+	'\0', NULL, "Allow 7 bit ASCII except lower case characters (violates ISO9660)", ONE_DASH},
+	{{"no-iso-translate", no_argument, NULL, OPTION_ISO_TRANSLATE},
+	'\0', NULL, "Do not translate illegal ISO characters '~', '-' and '#' (violates ISO9660)", ONE_DASH},
+	{{"allow-lowercase", no_argument, NULL, OPTION_ALLOW_LOWERCASE},
+	'\0', NULL, "Allow lower case characters in addition to the current character set (violates ISO9660)", ONE_DASH},
+	{{"allow-multidot", no_argument, NULL, OPTION_ALLOW_MULTIDOT},
+	'\0', NULL, "Allow more than one dot in filenames (e.g. .tar.gz) (violates ISO9660)", ONE_DASH},
+	{{"use-fileversion", no_argument, NULL, OPTION_USE_FILEVERSION},
+	'\0', "LEVEL", "Use file version # from filesystem", ONE_DASH},
+	{{"verbose", no_argument, NULL, 'v'},
+	'v', NULL, "Verbose", ONE_DASH},
+	{{"version", no_argument, NULL, OPTION_PVERSION},
+	'\0', NULL, "Print the current version", ONE_DASH},
+	{{"volid", required_argument, NULL, 'V'},
+	'V', "ID", "Set Volume ID", ONE_DASH},
+	{{"volset", required_argument, NULL, OPTION_VOLSET},
+	'\0', "ID", "Set Volume set ID", ONE_DASH},
+	{{"volset-size", required_argument, NULL, OPTION_VOLSET_SIZE},
+	'\0', "#", "Set Volume set size", ONE_DASH},
+	{{"volset-seqno", required_argument, NULL, OPTION_VOLSET_SEQ_NUM},
+	'\0', "#", "Set Volume set sequence number", ONE_DASH},
+	{{"old-exclude", required_argument, NULL, 'x'},
+	'x', "FILE", "Exclude file name(depreciated)", ONE_DASH},
+	{{"hard-disk-boot", no_argument, NULL, OPTION_HARD_DISK_BOOT},
+	'\0', NULL, "Boot image is a hard disk image", ONE_DASH},
+	{{"no-emul-boot", no_argument, NULL, OPTION_NO_EMUL_BOOT},
+	'\0', NULL, "Boot image is 'no emulation' image", ONE_DASH},
+	{{"no-boot", no_argument, NULL, OPTION_NO_BOOT},
+	'\0', NULL, "Boot image is not bootable", ONE_DASH},
+	{{"boot-load-seg", required_argument, NULL, OPTION_BOOT_LOAD_ADDR},
+	'\0', "#", "Set load segment for boot image", ONE_DASH},
+	{{"boot-load-size", required_argument, NULL, OPTION_BOOT_LOAD_SIZE},
+	'\0', "#", "Set numbers of load sectors", ONE_DASH},
+	{{"boot-info-table", no_argument, NULL, OPTION_BOOT_INFO_TABLE},
+	'\0', NULL, "Patch boot image with info table", ONE_DASH},
+	{{"XA", no_argument, NULL, OPTION_XA},
+	'\0', NULL, "Generate XA directory attruibutes", ONE_DASH},
+	{{"xa", no_argument, NULL, OPTION_XA_RATIONALIZED},
+	'\0', NULL, "Generate rationalized XA directory attruibutes", ONE_DASH},
+	{{"transparent-compression", no_argument, NULL, 'z'},
+	'z', NULL, "Enable transparent compression of files", ONE_DASH},
+
+#ifdef APPLE_HYB
+	{{"hfs-type", required_argument, NULL, OPTION_HFS_TYPE},
+	'\0', "TYPE", "Set HFS default TYPE", ONE_DASH},
+	{{"hfs-creator", required_argument, NULL, OPTION_HFS_CREATOR},
+	'\0', "CREATOR", "Set HFS default CREATOR", ONE_DASH},
+	{{"apple", no_argument, NULL, 'g'},
+	'g', NULL, "Add Apple ISO9660 extensions", ONE_DASH},
+	{{"hfs", no_argument, NULL, 'h'},
+	'h', NULL, "Create ISO9660/HFS hybrid", ONE_DASH},
+	{{"map", required_argument, NULL, OPTION_MAP_FILE},
+	'\0', "MAPPING_FILE", "Map file extensions to HFS TYPE/CREATOR", ONE_DASH},
+/* POSIX.1-2001 REMOVE -----> */
+	{{"map", required_argument, NULL, 'H'},
+	'H', "MAPPING_FILE", "OLD Pre-POSIX.1-2001 option - don't use -H", ONE_DASH},
+/* -----> END POSIX.1-2001 REMOVE */
+	{{"magic", required_argument, NULL, OPTION_MAGIC_FILE},
+	'\0', "FILE", "Magic file for HFS TYPE/CREATOR", ONE_DASH},
+	{{"probe", no_argument, NULL, OPTION_PROBE},
+	'\0', NULL, "Probe all files for Apple/Unix file types", ONE_DASH},
+	{{"mac-name", no_argument, NULL, OPTION_MACNAME},
+	'\0', NULL, "Use Macintosh name for ISO9660/Joliet/RockRidge file name",
+	ONE_DASH},
+	{{"no-mac-files", no_argument, NULL, OPTION_NOMACFILES},
+	'\0', NULL, "Do not look for Unix/Mac files (depreciated)", ONE_DASH},
+	{{"boot-hfs-file", required_argument, NULL, OPTION_BOOT_HFS_FILE},
+	'\0', "FILE", "Set HFS boot image name", ONE_DASH},
+	{{"part", no_argument, NULL, OPTION_GEN_PT},
+	'\0', NULL, "Generate HFS partition table", ONE_DASH},
+	{{"cluster-size", required_argument, NULL, OPTION_BSIZE},
+	'\0', "SIZE", "Cluster size for PC Exchange Macintosh files", ONE_DASH},
+	{{"auto", required_argument, NULL, OPTION_AUTOSTART},
+	'\0', "FILE", "Set HFS AutoStart file name", ONE_DASH},
+	{{"no-desktop", no_argument, NULL, OPTION_CREATE_DT},
+	'\0', NULL, "Do not create the HFS (empty) Desktop files", ONE_DASH},
+	{{"hide-hfs", required_argument, NULL, OPTION_HFS_HIDE},
+	'\0', "GLOBFILE", "Hide HFS file", ONE_DASH},
+	{{"hide-hfs-list", required_argument, NULL, OPTION_HFS_LIST},
+	'\0', "FILE", "List of HFS files to hide", ONE_DASH},
+	{{"hfs-volid", required_argument, NULL, OPTION_HFS_VOLID},
+	'\0', "HFS_VOLID", "Volume name for the HFS partition", ONE_DASH},
+	{{"icon-position", no_argument, NULL, OPTION_ICON_POS},
+	'\0', NULL, "Keep HFS icon position", ONE_DASH},
+	{{"root-info", required_argument, NULL, OPTION_ROOT_INFO},
+	'\0', "FILE", "finderinfo for root folder", ONE_DASH},
+	{{"input-hfs-charset", required_argument, NULL, OPTION_HFS_INPUT_CHARSET},
+	'\0', "CHARSET", "Local input charset for HFS file name conversion", ONE_DASH},
+	{{"output-hfs-charset", required_argument, NULL, OPTION_HFS_OUTPUT_CHARSET},
+	'\0', "CHARSET", "Output charset for HFS file name conversion", ONE_DASH},
+	{{"hfs-unlock", no_argument, NULL, OPTION_HFS_UNLOCK},
+	'\0', NULL, "Leave HFS Volume unlocked", ONE_DASH},
+	{{"hfs-bless", required_argument, NULL, OPTION_HFS_BLESS},
+	'\0', "FOLDER_NAME", "Name of Folder to be blessed", ONE_DASH},
+	{{"hfs-parms", required_argument, NULL, OPTION_HFS_PARMS},
+	'\0', "PARAMETERS", "Comma separated list of HFS parameters", ONE_DASH},
+#ifdef PREP_BOOT
+	{{"prep-boot", required_argument, NULL, OPTION_PREP_BOOT},
+	'\0', "FILE", "PReP boot image file -- up to 4 are allowed", ONE_DASH},
+	{{"chrp-boot", no_argument, NULL, OPTION_CHRP_BOOT},
+	'\0', NULL, "Add CHRP boot header", ONE_DASH},
+#endif	/* PREP_BOOT */
+	{{"cap", no_argument, NULL, OPTION_CAP},
+	'\0', NULL, "Look for AUFS CAP Macintosh files", TWO_DASHES},
+	{{"netatalk", no_argument, NULL, OPTION_NETA},
+	'\0', NULL, "Look for NETATALK Macintosh files", TWO_DASHES},
+	{{"double", no_argument, NULL, OPTION_DBL},
+	'\0', NULL, "Look for AppleDouble Macintosh files", TWO_DASHES},
+	{{"ethershare", no_argument, NULL, OPTION_ESH},
+	'\0', NULL, "Look for Helios EtherShare Macintosh files", TWO_DASHES},
+	{{"exchange", no_argument, NULL, OPTION_FE},
+	'\0', NULL, "Look for PC Exchange Macintosh files", TWO_DASHES},
+	{{"sgi", no_argument, NULL, OPTION_SGI},
+	'\0', NULL, "Look for SGI Macintosh files", TWO_DASHES},
+	{{"macbin", no_argument, NULL, OPTION_MBIN},
+	'\0', NULL, "Look for MacBinary Macintosh files", TWO_DASHES},
+	{{"single", no_argument, NULL, OPTION_SGL},
+	'\0', NULL, "Look for AppleSingle Macintosh files", TWO_DASHES},
+	{{"ushare", no_argument, NULL, OPTION_USH},
+	'\0', NULL, "Look for IPT UShare Macintosh files", TWO_DASHES},
+	{{"xinet", no_argument, NULL, OPTION_XIN},
+	'\0', NULL, "Look for XINET Macintosh files", TWO_DASHES},
+	{{"dave", no_argument, NULL, OPTION_DAVE},
+	'\0', NULL, "Look for DAVE Macintosh files", TWO_DASHES},
+	{{"sfm", no_argument, NULL, OPTION_SFM},
+	'\0', NULL, "Look for SFM Macintosh files", TWO_DASHES},
+	{{"osx-double", no_argument, NULL, OPTION_XDBL},
+	'\0', NULL, "Look for MacOS X AppleDouble Macintosh files", TWO_DASHES},
+	{{"osx-hfs", no_argument, NULL, OPTION_XHFS},
+	'\0', NULL, "Look for MacOS X HFS Macintosh files", TWO_DASHES},
+#endif	/* APPLE_HYB */
+};
+
+#define	OPTION_COUNT (sizeof ld_options / sizeof (ld_options[0]))
+
+static	void	read_rcfile(char *appname);
+static	void	susage(int excode);
+static	void	usage(int excode);
+int	iso9660_date(char *result, time_t crtime);
+static	void	hide_reloc_dir(void);
+static	char *get_pnames(int argc, char **argv, int opt, char *pname, 
+								  int pnsize, FILE *fp);
+char *findgequal(char *s);
+static	char *escstrcpy(char *to, char *from);
+void *e_malloc(size_t size);
+
+static void
+read_rcfile(char *appname)
+{
+	FILE		*rcfile = (FILE *) NULL;
+	struct rcopts	*rco;
+	char		*pnt,
+			*pnt1;
+	char		linebuffer[256];
+	static char	rcfn[] = ".mkisoimagerc";
+	char		filename[1000];
+	int		linum;
+
+	strcpy(filename, rcfn);
+	if (access(filename, R_OK) == 0)
+		rcfile = fopen(filename, "r");
+	if (!rcfile && errno != ENOENT)
+#ifdef	USE_LIBSCHILY
+		errmsg("Cannot open '%s'.\n", filename);
+#else
+		perror(filename);
+#endif
+
+	if (!rcfile) {
+		pnt = getenv("MKISOFSRC");
+		if (pnt && strlen(pnt) <= sizeof (filename)) {
+			strcpy(filename, pnt);
+			if (access(filename, R_OK) == 0)
+				rcfile = fopen(filename, "r");
+			if (!rcfile && errno != ENOENT)
+#ifdef	USE_LIBSCHILY
+				errmsg("Cannot open '%s'.\n", filename);
+#else
+				perror(filename);
+#endif
+		}
+	}
+	if (!rcfile) {
+		pnt = getenv("HOME");
+		if (pnt && strlen(pnt) + strlen(rcfn) + 2 <=
+							sizeof (filename)) {
+			strcpy(filename, pnt);
+			strcat(filename, "/");
+			strcat(filename, rcfn);
+			if (access(filename, R_OK) == 0)
+				rcfile = fopen(filename, "r");
+			if (!rcfile && errno != ENOENT)
+#ifdef	USE_LIBSCHILY
+				errmsg("Cannot open '%s'.\n", filename);
+#else
+				perror(filename);
+#endif
+		}
+	}
+	if (!rcfile && strlen(appname) + sizeof (rcfn) + 2 <=
+							sizeof (filename)) {
+		strcpy(filename, appname);
+		pnt = strrchr(filename, '/');
+		if (pnt) {
+			strcpy(pnt + 1, rcfn);
+			if (access(filename, R_OK) == 0)
+				rcfile = fopen(filename, "r");
+			if (!rcfile && errno != ENOENT)
+#ifdef	USE_LIBSCHILY
+				errmsg("Cannot open '%s'.\n", filename);
+#else
+				perror(filename);
+#endif
+		}
+	}
+	if (!rcfile)
+		return;
+	if (verbose > 0) {
+		fprintf(stderr, "Using \"%s\"\n", filename);
+	}
+	/* OK, we got it.  Now read in the lines and parse them */
+	linum = 0;
+	while (fgets(linebuffer, sizeof (linebuffer), rcfile)) {
+		char	*name;
+		char	*name_end;
+
+		++linum;
+		/* skip any leading white space */
+		pnt = linebuffer;
+		while (*pnt == ' ' || *pnt == '\t')
+			++pnt;
+		/*
+		 * If we are looking at a # character, this line is a comment.
+		 */
+		if (*pnt == '#')
+			continue;
+		/*
+		 * The name should begin in the left margin.  Make sure it is
+		 * in upper case.  Stop when we see white space or a comment.
+		 */
+		name = pnt;
+		while (*pnt && (isalpha((unsigned char) *pnt) || *pnt == '_')) {
+			if (islower((unsigned char) *pnt))
+				*pnt = toupper((unsigned char) *pnt);
+			pnt++;
+		}
+		if (name == pnt) {
+			fprintf(stderr, "%s:%d: name required\n", filename,
+					linum);
+			continue;
+		}
+		name_end = pnt;
+		/* Skip past white space after the name */
+		while (*pnt == ' ' || *pnt == '\t')
+			pnt++;
+		/* silently ignore errors in the rc file. */
+		if (*pnt != '=') {
+			fprintf(stderr, "%s:%d: equals sign required after '%.*s'\n",
+						filename, linum,
+						/* XXX Should not be > int */
+						(int)(name_end-name), name);
+			continue;
+		}
+		/* Skip pas the = sign, and any white space following it */
+		pnt++;	/* Skip past '=' sign */
+		while (*pnt == ' ' || *pnt == '\t')
+			pnt++;
+
+		/* now it is safe to NUL terminate the name */
+
+		*name_end = 0;
+
+		/* Now get rid of trailing newline */
+
+		pnt1 = pnt;
+		while (*pnt1) {
+			if (*pnt1 == '\n') {
+				*pnt1 = 0;
+				break;
+			}
+			pnt1++;
+		}
+		/* OK, now figure out which option we have */
+		for (rco = rcopt; rco->tag; rco++) {
+			if (strcmp(rco->tag, name) == 0) {
+				*rco->variable = strdup(pnt);
+				break;
+			}
+		}
+		if (rco->tag == NULL) {
+			fprintf(stderr, "%s:%d: field name \"%s\" unknown\n",
+				filename, linum,
+				name);
+		}
+	}
+	if (ferror(rcfile))
+#ifdef	USE_LIBSCHILY
+		errmsg("Read error on '%s'.\n", filename);
+#else
+		perror(filename);
+#endif
+	fclose(rcfile);
+}
+
+char	*path_table_l = NULL;
+char	*path_table_m = NULL;
+
+char	*jpath_table_l = NULL;
+char	*jpath_table_m = NULL;
+
+int	goof = 0;
+
+#ifndef TRUE
+#define	TRUE 1
+#endif
+
+#ifndef FALSE
+#define	FALSE 0
+#endif
+
+static void
+susage(int excode)
+{
+	const char	*program_name = "mkisoimage";
+
+	fprintf(stderr, "Usage: %s [options] -o file directory ...\n", program_name);
+	fprintf(stderr, "\nUse %s -help\n", program_name);
+	fprintf(stderr, "to get a list of valid options.\n");
+	fprintf(stderr, 
+        "\nNOTE: This version of mkisoimage differs from the one published by Eric Youngdale\n"
+        "and from the one included in cdrtools (by Joerg Schilling).\n"
+        "It provides a different set of features and has different problems.\n"
+        "Report errors to debburn-devel at lists.alioth.debian.org.\n");
+
+	exit(excode);
+}
+
+static void
+usage(int excode)
+{
+	const char	*program_name = "mkisoimage";
+
+#if 0
+	fprintf(stderr, "Usage:\n");
+	fprintf(stderr,
+		"mkisoimage [-o outfile] [-R] [-V volid] [-v] [-a] \
+[-T]\n [-l] [-d] [-V] [-D] [-L] [-p preparer]"
+		"[-P publisher] [ -A app_id ] [-z] \n \
+[-b boot_image_name] [-c boot_catalog-name] \
+[-x path -x path ...] path\n");
+#endif
+
+	int	i;
+
+/*	const char **targets, **pp;*/
+
+	fprintf(stderr, "Usage: %s [options] file...\n", program_name);
+
+	fprintf(stderr, "Options:\n");
+	for (i = 0; i < (int)OPTION_COUNT; i++) {
+		if (ld_options[i].doc != NULL) {
+			int	comma;
+			int	len;
+			int	j;
+
+			fprintf(stderr, "  ");
+
+			comma = FALSE;
+			len = 2;
+
+			j = i;
+			do {
+				if (ld_options[j].shortopt != '\0' &&
+					ld_options[j].control != NO_HELP) {
+					fprintf(stderr, "%s-%c",
+						comma ? ", " : "",
+						ld_options[j].shortopt);
+					len += (comma ? 2 : 0) + 2;
+					if (ld_options[j].arg != NULL) {
+						if (ld_options[j].opt.has_arg != optional_argument) {
+							fprintf(stderr, " ");
+							++len;
+						}
+						fprintf(stderr, "%s",
+							ld_options[j].arg);
+						len += strlen(ld_options[j].arg);
+					}
+					comma = TRUE;
+				}
+				++j;
+			}
+			while (j < (int)OPTION_COUNT && ld_options[j].doc == NULL);
+
+			j = i;
+			do {
+				if (ld_options[j].opt.name != NULL &&
+					ld_options[j].control != NO_HELP) {
+					fprintf(stderr, "%s-%s%s",
+						comma ? ", " : "",
+						ld_options[j].control == TWO_DASHES ? "-" : "",
+						ld_options[j].opt.name);
+					len += ((comma ? 2 : 0)
+						+ 1
+						+ (ld_options[j].control == TWO_DASHES ? 1 : 0)
+						+ strlen(ld_options[j].opt.name));
+					if (ld_options[j].arg != NULL) {
+						fprintf(stderr, " %s",
+							ld_options[j].arg);
+						len += 1 +
+						    strlen(ld_options[j].arg);
+					}
+					comma = TRUE;
+				}
+				++j;
+			}
+			while (j < (int)OPTION_COUNT && ld_options[j].doc == NULL);
+
+			if (len >= 30) {
+				fprintf(stderr, "\n");
+				len = 0;
+			}
+			for (; len < 30; len++)
+				fputc(' ', stderr);
+
+			fprintf(stderr, "%s\n", ld_options[i].doc);
+		}
+	}
+	fprintf(stderr, 
+        "\nNOTE: This version of mkisoimage differs from the one published by Eric Youngdale\n"
+        "and from the one included in cdrtools (by Joerg Schilling).\n"
+        "It provides a different set of features and has different problems.\n"
+        "Report errors to debburn-devel at lists.alioth.debian.org.\n");
+	exit(excode);
+}
+
+
+/*
+ * Fill in date in the iso9660 format
+ *
+ * The standards  state that the timezone offset is in multiples of 15
+ * minutes, and is what you add to GMT to get the localtime.  The U.S.
+ * is always at a negative offset, from -5h to -8h (can vary a little
+ * with DST,  I guess).  The Linux iso9660 filesystem has had the sign
+ * of this wrong for ages (mkisoimage had it wrong too for the longest time).
+ */
+int
+iso9660_date(char *result, time_t crtime)
+{
+	struct tm	*local;
+
+	local = localtime(&crtime);
+	result[0] = local->tm_year;
+	result[1] = local->tm_mon + 1;
+	result[2] = local->tm_mday;
+	result[3] = local->tm_hour;
+	result[4] = local->tm_min;
+	result[5] = local->tm_sec;
+
+	/*
+	 * Must recalculate proper timezone offset each time, as some files use
+	 * daylight savings time and some don't...
+	 */
+	result[6] = local->tm_yday;	/* save yday 'cause gmtime zaps it */
+	local = gmtime(&crtime);
+	local->tm_year -= result[0];
+	local->tm_yday -= result[6];
+	local->tm_hour -= result[3];
+	local->tm_min -= result[4];
+	if (local->tm_year < 0) {
+		local->tm_yday = -1;
+	} else {
+		if (local->tm_year > 0)
+			local->tm_yday = 1;
+	}
+
+	result[6] = -(local->tm_min + 60 *
+			(local->tm_hour + 24 * local->tm_yday)) / 15;
+
+	return (0);
+}
+
+/* hide "./rr_moved" if all its contents are hidden */
+static void
+hide_reloc_dir()
+{
+	struct directory_entry *s_entry;
+
+	for (s_entry = reloc_dir->contents; s_entry; s_entry = s_entry->next) {
+		if (strcmp(s_entry->name, ".") == 0 ||
+				strcmp(s_entry->name, "..") == 0)
+			continue;
+
+		if ((s_entry->de_flags & INHIBIT_ISO9660_ENTRY) == 0)
+			return;
+	}
+
+	/* all entries are hidden, so hide this directory */
+	reloc_dir->dir_flags |= INHIBIT_ISO9660_ENTRY;
+	reloc_dir->self->de_flags |= INHIBIT_ISO9660_ENTRY;
+}
+
+/*
+ * get pathnames from the command line, and then from given file
+ */
+static char *
+get_pnames(int argc, char **argv, int opt, char *pname, int pnsize, FILE *fp)
+{
+	int	len;
+
+	/* we may of already read the first line from the pathnames file */
+	if (save_pname) {
+		save_pname = 0;
+		return (pname);
+	}
+
+	if (opt < argc)
+		return (argv[opt]);
+
+	if (fp == NULL)
+		return ((char *) 0);
+
+	if (fgets(pname, pnsize, fp)) {
+		/* Discard newline */
+		len = strlen(pname);
+		if (pname[len - 1] == '\n') {
+			pname[len - 1] = '\0';
+		}
+		return (pname);
+	}
+	return ((char *) 0);
+}
+
+extern char	*cdrecord_data;
+
+int
+main(int argc, char *argv[])
+{
+	struct directory_entry de;
+
+#ifdef HAVE_SBRK
+	unsigned long	mem_start;
+
+#endif
+	struct stat	statbuf;
+	char		*merge_image = NULL;
+	char		*reloc_root = NULL;
+	char		*reloc_old_root = NULL;
+	struct iso_directory_record *mrootp = NULL;
+	struct output_fragment *opnt;
+	int		longind;
+	char		shortopts[OPTION_COUNT * 3 + 2];
+	struct option	longopts[OPTION_COUNT + 1];
+	int		c;
+	int		n;
+	char		*log_file = 0;
+	char		*node = NULL;
+	char		*pathnames = 0;
+	FILE		*pfp = NULL;
+	char		pname[2*PATH_MAX + 1 + 1];	/* may be too short */
+	char		*arg;				/* if '\\' present  */
+	char		nodename[PATH_MAX + 1];
+	int		no_path_names = 1;
+	int		warn_violate = 0;
+	int		have_cmd_line_pathspec = 0;
+	int		rationalize_all = 0;
+
+#ifdef APPLE_HYB
+	char		*afpfile = "";	/* mapping file for TYPE/CREATOR */
+	int		hfs_ct = 0;
+	char		*root_info = 0;
+#endif	/* APPLE_HYB */
+
+
+#ifdef __EMX__
+	/* This gives wildcard expansion with Non-Posix shells with EMX */
+	_wildcard(&argc, &argv);
+#endif
+	save_args(argc, argv);
+
+	if (argc < 2) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD, "Missing pathspec.\n");
+#endif
+		susage(1);
+	}
+	/* Get the defaults from the .mkisoimagerc file */
+	read_rcfile(argv[0]);
+
+	outfile = NULL;
+
+	/*
+	 * Copy long option initialization from GNU-ld.
+	 */
+	/*
+	 * Starting the short option string with '-' is for programs that
+	 * expect options and other ARGV-elements in any order and that care
+	 * about the ordering of the two.  We describe each non-option
+	 * ARGV-element as if it were the argument of an option with
+	 * character code 1.
+	 */
+	{
+		int		i,
+				is,
+				il;
+
+		shortopts[0] = '-';
+		is = 1;
+		il = 0;
+		for (i = 0; i < (int)OPTION_COUNT; i++) {
+			if (ld_options[i].shortopt != '\0') {
+				shortopts[is] = ld_options[i].shortopt;
+				++is;
+				if (ld_options[i].opt.has_arg ==
+					required_argument ||
+					ld_options[i].opt.has_arg ==
+							optional_argument) {
+					shortopts[is] = ':';
+					++is;
+					if (ld_options[i].opt.has_arg ==
+							optional_argument) {
+						shortopts[is] = ':';
+						++is;
+					}
+				}
+			}
+			if (ld_options[i].opt.name != NULL) {
+				longopts[il] = ld_options[i].opt;
+				++il;
+			}
+		}
+		shortopts[is] = '\0';
+		longopts[il].name = NULL;
+	}
+
+	while ((c = getopt_long_only(argc, argv, shortopts,
+						longopts, &longind)) != EOF)
+		switch (c) {
+		case 1:
+			/* A filename that we take as input. */
+			optind--;
+			have_cmd_line_pathspec = 1;
+			goto parse_input_files;
+
+		case OPTION_USE_GRAFT:
+			use_graft_ptrs = 1;
+			break;
+		case 'C':
+			/*
+			 * This is a temporary hack until cdrecord gets the
+			 * proper hooks in it.
+			 */
+			cdrecord_data = optarg;
+			break;
+		case OPTION_GUI:
+			gui++;
+			break;
+		case 'i':
+#ifdef	USE_LIBSCHILY
+			comerrno(EX_BAD, "-i option no longer supported.\n");
+#else
+			fprintf(stderr, "-i option no longer supported.\n");
+			exit(1);
+#endif
+			break;
+		case OPTION_ISO_LEVEL:
+			iso9660_level = atoi(optarg);
+
+			switch (iso9660_level) {
+
+			case 1:
+				/*
+				 * Only on file section
+				 * 8.3 d or d1 characters for files
+				 * 8   d or d1 characters for directories
+				 */
+				break;
+			case 2:
+				/*
+				 * Only on file section
+				 */
+				break;
+			case 3:
+				/*
+				 * No restrictions
+				 */
+				break;
+			case 4:
+				/*
+				 * This is ISO-9660:1988 (ISO-9660 version 2)
+				 */
+				iso9660_namelen = MAX_ISONAME_V2; /* allow 207 chars */
+				full_iso9660_filenames++;	/* 31+ chars	*/
+				omit_version_number++;
+				RR_relocation_depth = 32767;
+
+				/*
+				 * From -U ...
+				 */
+				omit_period++;			/* trailing dot */
+				allow_leading_dots++;
+				relaxed_filenames++;		/* all chars	*/
+				allow_lowercase++;		/* even lowcase	*/
+				allow_multidot++;		/* > 1 dots	*/
+				break;
+
+			default:
+				comerrno(EX_BAD, "Illegal iso9660 Level %d, use 1..3 or 4.\n",
+							iso9660_level);
+			}
+			break;
+		case 'J':
+			use_Joliet++;
+			break;
+		case OPTION_JLONG:
+			use_Joliet++;
+			jlen = JLONGMAX;
+			break;
+		case OPTION_JCHARSET:
+			use_Joliet++;
+			/* FALLTHROUGH */
+		case OPTION_INPUT_CHARSET:
+			icharset = optarg;
+			break;
+		case OPTION_OUTPUT_CHARSET:
+			ocharset = optarg;
+			break;
+#ifdef JIGDO_TEMPLATE
+		case OPTION_JTT_OUTPUT:
+			jtemplate_out = optarg;
+			break;
+		case OPTION_JTJ_OUTPUT:
+			jjigdo_out = optarg;
+			break;
+		case OPTION_JT_MD5_LIST:
+			jmd5_list = optarg;
+			break;
+		case OPTION_JT_MIN_SIZE:
+			jte_min_size = atoi(optarg);
+			if (jte_min_size < MIN_JIGDO_FILE_SIZE) {
+				fprintf(stderr, "Jigdo min size %d too small; using default %d instead\n", jte_min_size, MIN_JIGDO_FILE_SIZE);
+				jte_min_size = MIN_JIGDO_FILE_SIZE;
+			}
+			break;
+		case OPTION_JT_INCLUDE:
+			if (jte_add_include(optarg)) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				         "Failed to build jigdo-include list\n");
+#else
+				fprintf(stderr,
+				        "Failed to build jigdo-include list\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_JT_EXCLUDE:
+			if (jte_add_exclude(optarg)) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				         "Failed to build jigdo-exclude list\n");
+#else
+				fprintf(stderr,
+				        "Failed to build jigdo-exclude list\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_JT_PATH_MAP:
+			if (jte_add_mapping(optarg)) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				         "Failed to build jigdo mapping list\n");
+#else
+				fprintf(stderr,
+				        "Failed to build jigdo mapping list\n");
+				exit(1);
+#endif
+			}
+			break;
+#endif /* JIGDO_TEMPLATE */
+		case OPTION_NOBAK:
+			all_files = 0;
+			break;
+		case 'b':
+			do_sort++;		/* We sort bootcat/botimage */
+			use_eltorito++;
+			boot_image = optarg;	/* pathname of the boot image */
+						/* on disk */
+			if (boot_image == NULL) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Required Eltorito boot image pathname missing\n");
+#else
+				fprintf(stderr,
+				"Required Eltorito boot image pathname missing\n");
+				exit(1);
+#endif
+			}
+			get_boot_entry();
+			current_boot_entry->boot_image = boot_image;
+			break;
+		case OPTION_ALT_BOOT:
+			/*
+			 * Start new boot entry parameter list.
+			 */
+			new_boot_entry();
+			break;
+		case OPTION_BOOTALPHA:
+			use_alphaboot++;
+			/* list of pathnames of boot images */
+			add_boot_alpha_filename(optarg);
+			break;
+		case OPTION_HPPA_CMDLINE:
+			use_hppaboot++;
+			add_boot_hppa_cmdline(optarg);
+			break;
+		case OPTION_HPPA_KERNEL_32:
+			use_hppaboot++;
+			add_boot_hppa_kernel_32(optarg);
+			break;
+		case OPTION_HPPA_KERNEL_64:
+			use_hppaboot++;
+			add_boot_hppa_kernel_64(optarg);
+			break;
+		case OPTION_HPPA_BOOTLOADER:
+			use_hppaboot++;
+			add_boot_hppa_bootloader(optarg);
+			break;
+		case OPTION_HPPA_RAMDISK:
+			use_hppaboot++;
+			/* list of pathnames of boot images */
+			add_boot_hppa_ramdisk(optarg);
+			break;
+		case OPTION_BOOTMIPS:
+			use_mipsboot++;
+			/* list of pathnames of boot images */
+			add_boot_mips_filename(optarg);
+			break;
+		case OPTION_BOOTMIPSEL:
+			use_mipselboot++;
+			add_boot_mipsel_filename(optarg);
+			break;
+		case 'B':
+			if (use_sunx86boot)
+				comerrno(EX_BAD,
+				"-sparc-boot and -sunx86-boot are mutual exclusive.\n");
+			use_sparcboot++;
+			/* list of pathnames of boot images */
+			scan_sparc_boot(optarg);
+			break;
+		case OPTION_SUNX86BOOT:
+			if (use_sparcboot)
+				comerrno(EX_BAD,
+				"-sparc-boot and -sunx86-boot are mutual exclusive.\n");
+			use_sunx86boot++;
+			/* list of pathnames of boot images */
+			scan_sunx86_boot(optarg);
+			break;
+		case 'G':
+			use_genboot++;
+			/* pathname of the boot image on disk */
+			genboot_image = optarg;
+			if (genboot_image == NULL) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Required generic boot image pathname missing\n");
+#else
+				fprintf(stderr,
+				"Required generic boot image pathname missing\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_SPARCLABEL:
+			/* Sun disk label string */
+			sparc_boot_label(optarg);
+			break;
+		case OPTION_SUNX86LABEL:
+			/* Sun disk label string */
+			sunx86_boot_label(optarg);
+			break;
+		case 'c':
+			use_eltorito++;
+			/* pathname of the boot image on cd */
+			boot_catalog = optarg;
+			if (boot_catalog == NULL) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Required boot catalog pathname missing\n");
+#else
+				fprintf(stderr,
+				"Required boot catalog pathname missing\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_ABSTRACT:
+			abstract = optarg;
+			if (strlen(abstract) > 37) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Abstract filename string too long\n");
+#else
+				fprintf(stderr,
+				"Abstract filename string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case 'A':
+			appid = optarg;
+			if (strlen(appid) > 128) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Application-id string too long\n");
+#else
+				fprintf(stderr,
+				"Application-id string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_BIBLIO:
+			biblio = optarg;
+			if (strlen(biblio) > 37) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Bibliographic filename string too long\n");
+#else
+				fprintf(stderr,
+				"Bibliographic filename string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_CACHE_INODES:
+			cache_inodes = 1;
+			break;
+		case OPTION_NOCACHE_INODES:
+			cache_inodes = 0;
+			break;
+		case OPTION_CHECK_OLDNAMES:
+			check_oldnames++;
+			break;
+		case OPTION_CHECK_SESSION:
+			check_session++;
+			check_oldnames++;
+			merge_image = optarg;
+			outfile = "/dev/null";
+			/*
+			 * cdrecord_data is handled specially in multi.c
+			 * as we cannot write to all strings.
+			 * If mkisoimage is called with -C xx,yy
+			 * our default is overwritten.
+			 */
+/*			cdrecord_data = "0,0";*/
+			break;
+		case OPTION_COPYRIGHT:
+			copyright = optarg;
+			if (strlen(copyright) > 37) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Copyright filename string too long\n");
+#else
+				fprintf(stderr,
+				"Copyright filename string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_DEBUG:
+			debug++;
+			break;
+		case 'd':
+			omit_period++;
+			warn_violate++;
+			break;
+		case 'D':
+			RR_relocation_depth = 32767;
+			break;
+		case 'f':
+			follow_links++;
+#ifdef	USE_LIBSCHILY
+			errmsgno(EX_BAD,
+			"Warning: -follow-links does not always work correctly; be careful.\n");
+#else
+			fprintf(stderr,
+			"Warning: -follow-links does not always work correctly; be careful.\n");
+#endif
+			break;
+		case 'l':
+			full_iso9660_filenames++;
+			break;
+		case OPTION_MAX_FILENAMES:
+			iso9660_namelen = MAX_ISONAME_V1; /* allow 37 chars */
+			full_iso9660_filenames++;
+			omit_version_number++;
+			warn_violate++;
+			break;
+		case 'L':
+			errmsgno(EX_BAD, "The option '-L' is reserved by POSIX.1-2001.\n");
+			errmsgno(EX_BAD, "The option '-L' means 'follow all symbolic links'.\n");
+			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-L'.\n");
+			errmsgno(EX_BAD, "Use -allow-leading-dots in future to get old mkisoimage behavior.\n");
+			/* FALLTHRU */
+		case OPTION_ALLOW_LEADING_DOTS:
+			/*
+			 * -L Reserved by POSIX.1-2001
+			 * Meaning: Follow all symbolic links
+			 */
+			allow_leading_dots++;
+			warn_violate++;
+			break;
+		case OPTION_LOG_FILE:
+			log_file = optarg;
+			break;
+		case 'M':
+			merge_image = optarg;
+			break;
+		case OPTION_RELOC_ROOT:
+			reloc_root = optarg;
+			break;
+		case OPTION_RELOC_OLD_ROOT:
+			reloc_old_root = optarg;
+			break;
+		case 'N':
+			omit_version_number++;
+			warn_violate++;
+			break;
+		case OPTION_FORCE_RR:
+			force_rr++;
+			break;
+		case OPTION_NO_RR:
+			no_rr++;
+			break;
+		case 'o':
+			outfile = optarg;
+			break;
+		case OPTION_PAD:
+			dopad++;
+			break;
+		case OPTION_NOPAD:
+			dopad = 0;
+			break;
+		case OPTION_P_LIST:
+			pathnames = optarg;
+			break;
+		case 'p':
+			preparer = optarg;
+			if (strlen(preparer) > 128) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Preparer string too long\n");
+#else
+				fprintf(stderr, "Preparer string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_PRINT_SIZE:
+			print_size++;
+			break;
+		case 'P':
+			errmsgno(EX_BAD, "The option '-P' is reserved by POSIX.1-2001.\n");
+			errmsgno(EX_BAD, "The option '-P' means 'do not follow symbolic links'.\n");
+			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-P'.\n");
+			errmsgno(EX_BAD, "Use -publisher in future to get old mkisoimage behavior.\n");
+			/* FALLTHRU */
+		case OPTION_PUBLISHER:
+			/*
+			 * -P Reserved by POSIX.1-2001
+			 * Meaning: Do not follow symbolic links
+			 */
+			publisher = optarg;
+			if (strlen(publisher) > 128) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+						"Publisher string too long\n");
+#else
+				fprintf(stderr, "Publisher string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_QUIET:
+			verbose = 0;
+			break;
+		case 'R':
+			use_RockRidge++;
+			break;
+		case 'r':
+			rationalize_all++;
+			use_RockRidge++;
+			break;
+		case OPTION_XA:
+			use_XA++;
+			break;
+		case OPTION_XA_RATIONALIZED:
+			rationalize_all++;
+			use_XA++;
+			break;
+
+		case 's':
+			if (strcmp(optarg, "data") == 0)
+				osecsize = 2048;
+			else if (strcmp(optarg, "xa1") == 0)
+				osecsize = 2056;
+			else if (strcmp(optarg, "raw") == 0) {
+				osecsize = 2352;
+				comerrno(EX_BAD,
+					"Unsupported sector type '%s'.\n",
+					optarg);
+			}
+			break;
+		case 'S':
+#ifdef	USE_LIBSCHILY
+			errmsgno(EX_BAD, "Option -%c is reserved for future use.\n", c);
+#else
+			fprintf(stderr, "Option -%c is reserved for future use.\n", c);
+#endif
+			susage(1);
+			/* NOTREACHED */
+
+		case OPTION_NEW_DIR_MODE:
+			rationalize++;
+		{
+			char	*end = 0;
+
+			new_dir_mode = strtol(optarg, &end, 8);
+			if (!end || *end != 0 ||
+			    new_dir_mode < 0 || new_dir_mode > 07777) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Bad mode for -new-dir-mode\n");
+#else
+				fprintf(stderr, "Bad mode for -new-dir-mode\n");
+				exit(1);
+#endif
+			}
+			break;
+		}
+
+		case OPTION_UID:
+			rationalize++;
+			use_RockRidge++;
+			rationalize_uid++;
+		{
+			char	*end = 0;
+
+			uid_to_use = strtol(optarg, &end, 0);
+			if (!end || *end != 0) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Bad value for -uid\n");
+#else
+				fprintf(stderr, "Bad value for -uid\n");
+				exit(1);
+#endif
+			}
+			break;
+		}
+
+		case OPTION_GID:
+			rationalize++;
+			use_RockRidge++;
+			rationalize_gid++;
+		{
+			char	*end = 0;
+
+			gid_to_use = strtol(optarg, &end, 0);
+			if (!end || *end != 0) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Bad value for -gid\n");
+#else
+				fprintf(stderr, "Bad value for -gid\n");
+				exit(1);
+#endif
+			}
+			break;
+		}
+
+		case OPTION_FILEMODE:
+			rationalize++;
+			use_RockRidge++;
+			rationalize_filemode++;
+		{
+			char	*end = 0;
+
+			filemode_to_use = strtol(optarg, &end, 8);
+			if (!end || *end != 0 ||
+			    filemode_to_use < 0 || filemode_to_use > 07777) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Bad mode for -file-mode\n");
+#else
+				fprintf(stderr, "Bad mode for -file-mode\n");
+				exit(1);
+#endif
+			}
+			break;
+		}
+
+		case OPTION_DIRMODE:
+			rationalize++;
+			use_RockRidge++;
+			rationalize_dirmode++;
+		{
+			char	*end = 0;
+
+			dirmode_to_use = strtol(optarg, &end, 8);
+			if (!end || *end != 0 ||
+			    dirmode_to_use < 0 || dirmode_to_use > 07777) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD, "Bad mode for -dir-mode\n");
+#else
+				fprintf(stderr, "Bad mode for -dir-mode\n");
+				exit(1);
+#endif
+			}
+			break;
+		}
+
+#ifdef SORTING
+		case OPTION_SORT:
+			do_sort++;
+			add_sort_list(optarg);
+			break;
+#endif /* SORTING */
+
+		case OPTION_SPLIT_OUTPUT:
+			split_output++;
+			break;
+
+		case OPTION_STREAM_FILE_NAME:
+			comerrno(EX_BAD, "-stream-file-name not yet implemented\n");
+			stream_filename = optarg;
+			break;
+
+		case OPTION_STREAM_CD_SIZE:
+			stream_media_size = atoi(optarg);
+			break;
+
+		case OPTION_SYSID:
+			system_id = optarg;
+			if (strlen(system_id) > 32) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+						"System ID string too long\n");
+#else
+				fprintf(stderr, "System ID string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_TRANS_TBL:
+			trans_tbl = optarg;
+			/* FALLTHRU */
+		case 'T':
+			generate_tables++;
+			break;
+		case OPTION_UCS_LEVEL:
+			ucs_level = atoi(optarg);
+			if (ucs_level < 1 || ucs_level > 3)
+				comerrno(EX_BAD, "Illegal UCS Level %d, use 1..3.\n",
+							ucs_level);
+			break;
+#ifdef UDF
+		case OPTION_UDF:
+			use_udf++;
+			break;
+#endif
+
+#ifdef DVD_VIDEO
+		case OPTION_DVD:
+			use_udf++;
+			dvd_video++;
+			break;
+#endif
+		case OPTION_USE_FILEVERSION:
+			use_fileversion++;
+			break;
+		case 'U':
+			/*
+			 * Minimal (only truncation of 31+ characters)
+			 * translation of filenames.
+			 *
+			 * Forces -l, -d, -N, -allow-leading-dots,
+			 * -relaxed-filenames,
+			 * -allow-lowercase, -allow-multidot
+			 *
+			 * This is for HP-UX, which does not recognize ANY
+			 * extentions (Rock Ridge, Joliet), causing pain when
+			 * loading software. pfs_mount can be used to read the
+			 * extensions, but the untranslated filenames can be
+			 * read by the "native" cdfs mounter. Completely
+			 * violates iso9660.
+			 */
+			full_iso9660_filenames++;	/* 31 chars	*/
+			omit_period++;			/* trailing dot */
+			allow_leading_dots++;
+			omit_version_number++;
+			relaxed_filenames++;		/* all chars	*/
+			allow_lowercase++;		/* even lowcase	*/
+			allow_multidot++;		/* > 1 dots	*/
+			warn_violate++;
+			break;
+
+		case OPTION_RELAXED_FILENAMES:
+			relaxed_filenames++;
+			warn_violate++;
+			break;
+		case OPTION_ALLOW_LOWERCASE:
+			allow_lowercase++;
+			warn_violate++;
+			break;
+		case OPTION_ALLOW_MULTIDOT:
+			allow_multidot++;
+			warn_violate++;
+			break;
+		case OPTION_ISO_TRANSLATE:
+			iso_translate = 0;
+			warn_violate++;
+			break;
+		case 'V':
+			volume_id = optarg;
+			if (strlen(volume_id) > 32) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+					"Volume ID string too long\n");
+#else
+				fprintf(stderr,
+					"Volume ID string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_VOLSET:
+			volset_id = optarg;
+			if (strlen(volset_id) > 128) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Volume set ID string too long\n");
+#else
+				fprintf(stderr,
+				"Volume set ID string too long\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_VOLSET_SIZE:
+			volume_set_size = atoi(optarg);
+			if (volume_set_size <= 0) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Illegal Volume Set Size %s\n", optarg);
+#else
+				fprintf(stderr,
+				"Illegal Volume Set Size %s\n", optarg);
+				exit(1);
+#endif
+			}
+			if (volume_set_size > 1) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Volume Set Size > 1 not yet supported\n");
+#else
+				fprintf(stderr,
+				"Volume Set Size > 1 not yet supported\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_VOLSET_SEQ_NUM:
+			volume_sequence_number = atoi(optarg);
+			if (volume_sequence_number > volume_set_size) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Volume set sequence number too big\n");
+#else
+				fprintf(stderr,
+				"Volume set sequence number too big\n");
+				exit(1);
+#endif
+			}
+			break;
+		case 'v':
+			verbose++;
+			break;
+		case 'z':
+#ifdef VMS
+#ifdef	USE_LIBSCHILY
+			comerrno(EX_BAD,
+			"Transparent compression not supported with VMS\n");
+#else
+			fprintf(stderr,
+			"Transparent compression not supported with VMS\n");
+			exit(1);
+#endif
+#else
+			transparent_compression++;
+#endif
+			break;
+		case 'x':
+		case 'm':
+			/*
+			 * Somehow two options to do basically the same thing
+			 * got added somewhere along the way.  The 'match'
+			 * code supports limited globbing, so this is the one
+			 * that got selected. Unfortunately the 'x' switch is
+			 * probably more intuitive.
+			 */
+			add_match(optarg);
+			break;
+		case OPTION_X_LIST:
+			add_list(optarg);
+			break;
+		case OPTION_I_HIDE:
+			i_add_match(optarg);
+			break;
+		case OPTION_I_LIST:
+			i_add_list(optarg);
+			break;
+		case OPTION_H_HIDE:
+			h_add_match(optarg);
+			break;
+		case OPTION_H_LIST:
+			h_add_list(optarg);
+			break;
+		case OPTION_J_HIDE:
+			j_add_match(optarg);
+			break;
+		case OPTION_J_LIST:
+			j_add_list(optarg);
+			break;
+		case OPTION_HIDE_TRANS_TBL:
+			jhide_trans_tbl++;
+			break;
+		case OPTION_HIDE_RR_MOVED:
+			hide_rr_moved++;
+			break;
+		case OPTION_HELP:
+			usage(0);
+			break;
+		case OPTION_PVERSION:
+			printf("%s (%s)\n", version_string, HOST_SYSTEM);
+#ifdef	OPTION_SILO_BOOT
+			printf("Warning: this is unofficial (modified) version of mkisoimage that incorporates\n");
+			printf("	support for a non Sparc compliant boot method called SILO.\n");
+			printf("	The official method to create Sparc boot CDs is to use -sparc-boot\n");
+			printf("	In case of problems first test with an official version of mkisoimage.\n");
+#endif
+			exit(0);
+			break;
+		case OPTION_NOSPLIT_SL_COMPONENT:
+			split_SL_component = 0;
+			break;
+		case OPTION_NOSPLIT_SL_FIELD:
+			split_SL_field = 0;
+			break;
+		case OPTION_HARD_DISK_BOOT:
+			use_eltorito++;
+			hard_disk_boot++;
+			get_boot_entry();
+			current_boot_entry->hard_disk_boot = 1;
+			break;
+		case OPTION_NO_EMUL_BOOT:
+			use_eltorito++;
+			no_emul_boot++;
+			get_boot_entry();
+			current_boot_entry->no_emul_boot = 1;
+			break;
+		case OPTION_NO_BOOT:
+			use_eltorito++;
+			not_bootable++;
+			get_boot_entry();
+			current_boot_entry->not_bootable = 1;
+			break;
+		case OPTION_BOOT_LOAD_ADDR:
+			use_eltorito++;
+			{
+				long	val;
+				char	*ptr;
+
+				val = strtol(optarg, &ptr, 0);
+				if (*ptr || val < 0 || val >= 0x10000) {
+#ifdef	USE_LIBSCHILY
+					comerrno(EX_BAD, "Boot image load address invalid.\n");
+#else
+					fprintf(stderr, "Boot image load address invalid.\n");
+					exit(1);
+#endif
+				}
+				load_addr = val;
+			}
+			get_boot_entry();
+			current_boot_entry->load_addr = load_addr;
+			break;
+		case OPTION_BOOT_LOAD_SIZE:
+			use_eltorito++;
+			{
+				long	val;
+				char	*ptr;
+
+				val = strtol(optarg, &ptr, 0);
+				if (*ptr || val < 0 || val >= 0x10000) {
+#ifdef	USE_LIBSCHILY
+					comerrno(EX_BAD,
+					"Boot image load size invalid.\n");
+#else
+					fprintf(stderr,
+					"Boot image load size invalid.\n");
+					exit(1);
+#endif
+				}
+				load_size = val;
+			}
+			get_boot_entry();
+			current_boot_entry->load_size = load_size;
+			break;
+		case OPTION_BOOT_INFO_TABLE:
+			use_eltorito++;
+			boot_info_table++;
+			get_boot_entry();
+			current_boot_entry->boot_info_table = 1;
+			break;
+#ifdef APPLE_HYB
+		case OPTION_HFS_TYPE:
+			deftype = optarg;
+			hfs_ct++;
+			if (strlen(deftype) != 4) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"HFS default TYPE string has illegal length.\n");
+#else
+				fprintf(stderr,
+				"HFS default TYPE string has illegal length.\n");
+				exit(1);
+#endif
+			}
+			break;
+		case OPTION_HFS_CREATOR:
+			defcreator = optarg;
+			hfs_ct++;
+			if (strlen(defcreator) != 4) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"HFS default CREATOR string has illegal length.\n");
+#else
+				fprintf(stderr,
+				"HFS default CREATOR string has illegal length.\n");
+				exit(1);
+#endif
+			}
+			break;
+		case 'H':
+			errmsgno(EX_BAD, "The option '-H' is reserved by POSIX.1-2001.\n");
+			errmsgno(EX_BAD, "The option '-H' means 'follow symbolic links on command line'.\n");
+			errmsgno(EX_BAD, "Mkisofs-2.02 will introduce POSIX semantics for '-H'.\n");
+			errmsgno(EX_BAD, "Use -map in future to get old mkisoimage behavior.\n");
+			/* FALLTHRU */
+		case OPTION_MAP_FILE:
+			/*
+			 * -H Reserved by POSIX.1-2001
+			 * Meaning: Follow symbolic links on command line
+			 * Symbolic links found by tree traversal are not
+			 * followed.
+			 */
+			afpfile = optarg;
+			hfs_last = MAP_LAST;
+			break;
+		case 'h':
+			apple_hyb = 1;
+			break;
+		case 'g':
+			apple_ext = 1;
+			break;
+		case OPTION_PROBE:
+			probe = 1;
+			break;
+		case OPTION_MACNAME:
+			use_mac_name = 1;
+			break;
+		case OPTION_NOMACFILES:
+#ifdef	USE_LIBSCHILY
+			errmsgno(EX_BAD,
+			"Warning: -no-mac-files no longer used ... ignoring\n");
+#else
+			fprintf(stderr,
+			"Warning: -no-mac-files no longer used ... ignoring\n");
+#endif
+			break;
+		case OPTION_BOOT_HFS_FILE:
+			hfs_boot_file = optarg;
+			/* FALLTHRU */
+		case OPTION_GEN_PT:
+			gen_pt = 1;
+			break;
+		case OPTION_MAGIC_FILE:
+#ifndef USE_MAGIC
+			fprintf(stderr, "This program has been compiled without magic library support.\n"
+				"Ignoring the -magic option.\n");
+#endif
+			magic_filename = optarg;
+			hfs_last = MAG_LAST;
+			break;
+		case OPTION_AUTOSTART:
+			autoname = optarg;
+			/* gen_pt = 1; */
+			break;
+		case OPTION_BSIZE:
+			afe_size = atoi(optarg);
+			hfs_select |= DO_FEU;
+			hfs_select |= DO_FEL;
+			break;
+		case OPTION_HFS_VOLID:
+			hfs_volume_id = optarg;
+			break;
+		case OPTION_ROOT_INFO:
+			root_info = optarg;
+			/* FALLTHRU */
+		case OPTION_ICON_POS:
+			icon_pos = 1;
+			break;
+		/* Mac/Unix types to include */
+		case OPTION_CAP:
+			hfs_select |= DO_CAP;
+			break;
+		case OPTION_NETA:
+			hfs_select |= DO_NETA;
+			break;
+		case OPTION_DBL:
+			hfs_select |= DO_DBL;
+			break;
+		case OPTION_ESH:
+		case OPTION_USH:
+			hfs_select |= DO_ESH;
+			break;
+		case OPTION_FE:
+			hfs_select |= DO_FEU;
+			hfs_select |= DO_FEL;
+			break;
+		case OPTION_SGI:
+		case OPTION_XIN:
+			hfs_select |= DO_SGI;
+			break;
+		case OPTION_MBIN:
+			hfs_select |= DO_MBIN;
+			break;
+		case OPTION_SGL:
+			hfs_select |= DO_SGL;
+			break;
+		case OPTION_DAVE:
+			hfs_select |= DO_DAVE;
+			break;
+		case OPTION_SFM:
+			hfs_select |= DO_SFM;
+			break;
+		case OPTION_XDBL:
+			hfs_select |= DO_XDBL;
+			break;
+		case OPTION_XHFS:
+#ifdef IS_MACOS_X
+			hfs_select |= DO_XHFS;
+#else /* IS_MACOS_X */
+#ifdef	USE_LIBSCHILY
+			errmsgno(EX_BAD,
+			"Warning: --osx-hfs only works on MacOS X ... ignoring\n");
+#else /* USE_LIBSCHILY */
+			fprintf(stderr,
+			"Warning: --osx-hfs only works on MacOS X ... ignoring\n");
+#endif /* USE_LIBSCHILY */
+#endif /* IS_MACOS_X */
+			break;
+		case OPTION_CREATE_DT:
+			create_dt = 0;
+			break;
+		case OPTION_HFS_HIDE:
+			hfs_add_match(optarg);
+			break;
+		case OPTION_HFS_LIST:
+			hfs_add_list(optarg);
+			break;
+		case OPTION_HFS_INPUT_CHARSET:
+			use_mac_name = 1;
+			hfs_icharset = optarg;
+			break;
+		case OPTION_HFS_OUTPUT_CHARSET:
+			hfs_ocharset = optarg;
+			break;
+		case OPTION_HFS_UNLOCK:
+			hfs_lock = 0;
+			break;
+		case OPTION_HFS_BLESS:
+			hfs_bless = optarg;
+			break;
+		case OPTION_HFS_PARMS:
+			hfs_parms = strdup(optarg);
+			break;
+#ifdef PREP_BOOT
+		case OPTION_PREP_BOOT:
+			use_prep_boot++;
+			if (use_prep_boot > 4 - use_chrp_boot) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
+#else
+				fprintf(stderr,
+				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
+#endif
+				exit(1);
+			}
+			/* pathname of the boot image on cd */
+			prep_boot_image[use_prep_boot - 1] = optarg;
+			if (prep_boot_image[use_prep_boot - 1] == NULL) {
+#ifdef	USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Required PReP boot image pathname missing\n");
+#else
+				fprintf(stderr,
+				"Required PReP boot image pathname missing\n");
+#endif
+				exit(1);
+			}
+			break;
+		case OPTION_CHRP_BOOT:
+			if (use_chrp_boot)
+				break;		/* silently allow duplicates */
+			use_chrp_boot = 1;
+			if (use_prep_boot > 3) {
+#ifdef USE_LIBSCHILY
+				comerrno(EX_BAD,
+				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
+#else
+				fprintf(stderr,
+				"Maximum of 4 PRep+CHRP partition entries are allowed\n");
+#endif
+				exit(1);
+			}
+			break;
+#endif	/* PREP_BOOT */
+#endif	/* APPLE_HYB */
+		default:
+			susage(1);
+		}
+	/*
+	 * "--" was found, the next argument is a pathspec
+	 */
+	if (argc != optind)
+		have_cmd_line_pathspec = 1;
+
+parse_input_files:
+	path_ind = optind;
+
+	/*
+	 * XXX This is a hack until we have a decent separate name handling
+	 * XXX for UDF filenames.
+	 */
+	if (dvd_video && use_Joliet) {
+		use_Joliet = 0;
+		fprintf(stderr, "Warning: Disabling Joliet support for DVD-Video.\n");
+	}
+	if (use_udf && !use_Joliet)
+		jlen = 255;
+
+	if (use_RockRidge && (iso9660_namelen > MAX_ISONAME_V2_RR))
+		iso9660_namelen = MAX_ISONAME_V2_RR;
+
+	if (warn_violate)
+		fprintf(stderr, "Warning: creating filesystem that does not conform to ISO-9660.\n");
+	if (iso9660_level > 3)
+		fprintf(stderr, "Warning: Creating ISO-9660:1999 (version 2) filesystem.\n");
+	if (iso9660_namelen > LEN_ISONAME)
+		fprintf(stderr, "Warning: ISO-9660 filenames longer than %d may cause buffer overflows in the OS.\n",
+			LEN_ISONAME);
+	if (use_Joliet && !use_RockRidge) {
+		fprintf(stderr, "Warning: creating filesystem with (nonstandard) Joliet extensions\n");
+		fprintf(stderr, "         but without (standard) Rock Ridge extensions.\n");
+		fprintf(stderr, "         It is highly recommended to add Rock Ridge\n");
+	}
+	if (transparent_compression) {
+		fprintf(stderr, "Warning: using transparent compression. This is a nonstandard Rock Ridge\n");
+		fprintf(stderr, "         extension. The resulting filesystem can only be transparently\n");
+		fprintf(stderr, "         read on Linux. On other operating systems you need to call\n");
+		fprintf(stderr, "         mkzftree by hand to decompress the files.\n");
+	}
+	if (transparent_compression && !use_RockRidge) {
+		fprintf(stderr, "Warning: transparent decompression is a Linux Rock Ridge extension, but\n");
+		fprintf(stderr, "         creating filesystem without Rock Ridge attributes; files\n");
+		fprintf(stderr, "         will not be transparently decompressed.\n");
+	}
+	init_unls();		/* Initialize UNICODE tables */
+
+	/* initialize code tables from a file - if they exists */
+	init_unls_file(icharset);
+	init_unls_file(ocharset);
+#ifdef APPLE_HYB
+	init_unls_file(hfs_icharset);
+	init_unls_file(hfs_ocharset);
+#endif /* APPLE_HYB */
+
+#ifdef USE_ICONV
+	iconv_possible = !(iso9660_level >= 4 || ((ocharset &&
+		strcmp(ocharset, icharset ? icharset : "")) &&
+		use_RockRidge) || apple_ext || apple_hyb);
+
+	setlocale(LC_CTYPE, "");
+	
+  	if (icharset == NULL && iconv_possible) {
+		char *charset = nl_langinfo(CODESET);
+		/* set to detected value but only if it is not pure US-ASCII */
+  	if(charset) { /* workaround for SunOS, iconv is case-sensitive */
+ 			char *t;
+ 			charset = strdup(charset);
+ 			for(t=charset;*t!='\0';t++)
+ 				*t=tolower(*t);
+ 		}
+
+		if(strcmp(charset, "ansi_x3.4-1968") != 0)
+			icharset = charset;
+
+		if(icharset && verbose > 0)
+			fprintf(stderr, "I: -input-charset not specified, using %s (detected in locale settings)\n",
+			icharset);
+	}
+
+	if(iconv_possible) {
+		/*
+		 * don't care if initialization fails
+		 */
+		init_nls_iconv(icharset);
+		init_nls_iconv(ocharset);
+	}
+#endif
+
+	if (icharset == NULL) {
+#if	(defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(__DJGPP__)) && !defined(IS_CYGWIN_1)
+		in_nls = load_unls("cp437");
+#else
+		in_nls = load_unls("iso8859-1");
+#endif
+	} else {
+		if (strcmp(icharset, "default") == 0)
+			in_nls = load_unls_default();
+		else
+			in_nls = load_unls(icharset);
+	}
+	/*
+	 * set the output charset to the same as the input or the given output
+	 * charset
+	 */
+	if (ocharset == NULL) {
+		out_nls = in_nls;
+	} else {
+		if (strcmp(ocharset, "default") == 0)
+			out_nls = load_unls_default();
+		else
+			out_nls = load_unls(ocharset);
+	}
+	if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
+		fprintf(stderr, "Unknown charset\nKnown charsets are:\n");
+		list_unls();	/* List all known charset names */
+#ifdef USE_ICONV
+        fprintf(stderr, "\nAdditional input charsets are available for Joliet through the iconv support."
+                "\nRun \"iconv -l\" to display them. Iconv charsets cannot be used with HFS, Apple"
+                "\nextension, ISO9660 version 2 or Rock Ridge.\n"
+                "\nIMPORTANT: never report problems with charset support directly"
+                "\nto Joerg Schilling! Report them to debburn-devel at lists.alioth.debian.org.\n");
+#endif
+		exit(1);
+	}
+
+
+#ifdef APPLE_HYB
+	if (hfs_icharset == NULL || strcmp(hfs_icharset, "mac-roman")) {
+		hfs_inls = load_unls("cp10000");
+	} else {
+		if (strcmp(hfs_icharset, "default") == 0)
+			hfs_inls = load_unls_default();
+		else
+			hfs_inls = load_unls(hfs_icharset);
+	}
+	if (hfs_ocharset == NULL) {
+		hfs_onls = hfs_inls;
+	} else {
+		if (strcmp(hfs_ocharset, "default") == 0)
+			hfs_onls = load_unls_default();
+		else if (strcmp(hfs_ocharset, "mac-roman") == 0)
+			hfs_onls = load_unls("cp10000");
+		else
+			hfs_onls = load_unls(hfs_ocharset);
+	}
+
+	if (hfs_inls == NULL || hfs_onls == NULL) {
+		fprintf(stderr, "Unknown HFS charset\nKnown charsets are:\n");
+		list_unls();
+		exit(1);
+	}
+#endif /* APPLE_HYB */
+
+	if (merge_image != NULL) {
+		if (open_merge_image(merge_image) < 0) {
+			/* Complain and die. */
+#ifdef	USE_LIBSCHILY
+			comerr("Unable to open previous session image '%s'.\n",
+				merge_image);
+#else
+			fprintf(stderr,
+				"Unable to open previous session image '%s'.\n",
+				merge_image);
+			exit(1);
+#endif
+		}
+	}
+	/* We don't need root privilleges anymore. */
+#ifdef	HAVE_SETREUID
+	if (setreuid(-1, getuid()) < 0)
+#else
+#ifdef	HAVE_SETEUID
+	if (seteuid(getuid()) < 0)
+#else
+	if (setuid(getuid()) < 0)
+#endif
+#endif
+#ifdef	USE_LIBSCHILY
+		comerr("Panic cannot set back effective uid.\n");
+#else
+	{
+		perror("Panic cannot set back effective uid.");
+		exit(1);
+	}
+#endif
+
+
+#ifdef	no_more_needed
+#ifdef __NetBSD__
+	{
+		int		resource;
+		struct rlimit	rlp;
+
+		if (getrlimit(RLIMIT_DATA, &rlp) == -1)
+			perror("Warning: getrlimit");
+		else {
+			rlp.rlim_cur = 33554432;
+			if (setrlimit(RLIMIT_DATA, &rlp) == -1)
+				perror("Warning: setrlimit");
+		}
+	}
+#endif
+#endif	/* no_more_needed */
+#ifdef HAVE_SBRK
+	mem_start = (unsigned long) sbrk(0);
+#endif
+
+	/*
+	 * if the -hide-joliet option has been given, set the Joliet option
+	 */
+	if (!use_Joliet && j_ishidden())
+		use_Joliet++;
+
+#ifdef APPLE_HYB
+	if (apple_hyb && apple_ext) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have both -apple and -hfs options");
+#else
+		fprintf(stderr, "Can't have both -apple and -hfs options");
+		exit(1);
+#endif
+	}
+	/*
+	 * if -probe, -macname, any hfs selection and/or mapping file is given,
+	 * but no HFS option, then select apple_hyb
+	 */
+	if (!apple_hyb && !apple_ext) {
+		if (*afpfile || probe || use_mac_name || hfs_select ||
+				hfs_boot_file || magic_filename ||
+				hfs_ishidden() || gen_pt || autoname ||
+				afe_size || icon_pos || hfs_ct ||
+				hfs_icharset || hfs_ocharset) {
+			apple_hyb = 1;
+		}
+	}
+	if (apple_ext && hfs_boot_file) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have -hfs-boot-file with -apple\n");
+#else
+		fprintf(stderr, "Can't have -hfs-boot-file with -apple\n");
+		exit(1);
+#endif
+	}
+	if (apple_ext && autoname) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have -auto with -apple\n");
+#else
+		fprintf(stderr, "Can't have -auto with -apple\n");
+		exit(1);
+#endif
+	}
+	if (apple_hyb && (use_sparcboot || use_sunx86boot)) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have -hfs with -sparc-boot/-sunx86-boot\n");
+#else
+		fprintf(stderr, "Can't have -hfs with -sparc-boot/-sunx86-boot\n");
+		exit(1);
+#endif
+	}
+	if (apple_hyb && use_genboot) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have -hfs with -generic-boot\n");
+#else
+		fprintf(stderr, "Can't have -hfs with -generic-boot\n");
+		exit(1);
+#endif
+	}
+#ifdef PREP_BOOT
+	if (apple_ext && use_prep_boot) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Can't have -prep-boot with -apple\n");
+#else
+		fprintf(stderr, "Can't have -prep-boot with -apple\n");
+		exit(1);
+#endif
+	}
+#endif	/* PREP_BOOT */
+
+	if (apple_hyb || apple_ext)
+		apple_both = 1;
+
+	if (probe)
+		/* we need to search for all types of Apple/Unix files */
+		hfs_select = ~0;
+
+	if (apple_both && verbose && !(hfs_select || *afpfile || magic_filename)) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD,
+		"Warning: no Apple/Unix files will be decoded/mapped\n");
+#else
+		fprintf(stderr,
+		"Warning: no Apple/Unix files will be decoded/mapped\n");
+#endif
+	}
+	if (apple_both && verbose && !afe_size &&
+					(hfs_select & (DO_FEU | DO_FEL))) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD,
+		"Warning: assuming PC Exchange cluster size of 512 bytes\n");
+#else
+		fprintf(stderr,
+		"Warning: assuming PC Exchange cluster size of 512 bytes\n");
+#endif
+		afe_size = 512;
+	}
+	if (apple_both) {
+		/* set up the TYPE/CREATOR mappings */
+		hfs_init(afpfile, 0, hfs_select);
+	}
+	if (apple_ext && !use_RockRidge) {
+#ifdef	nonono
+		/* use RockRidge to set the SystemUse field ... */
+		use_RockRidge++;
+		rationalize_all++;
+#else
+		/* EMPTY */
+#endif
+	}
+	if (apple_ext && !(use_XA || use_RockRidge)) {
+		comerrno(EX_BAD, "Need either -XA/-xa or -R/-r for -apple to become active.\n");
+	}
+
+#endif	/* APPLE_HYB */
+
+	if (rationalize_all) {
+		rationalize++;
+		rationalize_uid++;
+		rationalize_gid++;
+		rationalize_filemode++;
+		rationalize_dirmode++;
+	}
+
+	if (verbose > 1) {
+		fprintf(stderr, "%s (%s)\n", version_string, HOST_SYSTEM);
+	}
+	if (cdrecord_data == NULL && !check_session && merge_image != NULL) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD,
+		"Multisession usage bug: Must specify -C if -M is used.\n");
+#else
+		fprintf(stderr,
+		"Multisession usage bug: Must specify -C if -M is used.\n");
+		exit(1);
+#endif
+	}
+	if (cdrecord_data != NULL && merge_image == NULL) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD,
+		"Warning: -C specified without -M: old session data will not be merged.\n");
+#else
+		fprintf(stderr,
+		"Warning: -C specified without -M: old session data will not be merged.\n");
+#endif
+	}
+#ifdef APPLE_HYB
+	if (merge_image != NULL && apple_hyb) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD,
+		"Warning: files from previous sessions will not be included in the HFS volume.\n");
+#else
+		fprintf(stderr,
+		"Warning: files from previous sessions will not be included in the HFS volume.\n");
+#endif
+	}
+#endif	/* APPLE_HYB */
+
+	/*
+	 * see if we have a list of pathnames to process
+	 */
+	if (pathnames) {
+		/* "-" means take list from the standard input */
+		if (strcmp(pathnames, "-")) {
+			if ((pfp = fopen(pathnames, "r")) == NULL) {
+#ifdef	USE_LIBSCHILY
+				comerr("Unable to open pathname list %s.\n",
+								pathnames);
+#else
+				fprintf(stderr,
+					"Unable to open pathname list %s.\n",
+								pathnames);
+				exit(1);
+#endif
+			}
+		} else
+			pfp = stdin;
+	}
+
+	/* The first step is to scan the directory tree, and take some notes */
+
+	if ((arg = get_pnames(argc, argv, optind, pname,
+					sizeof (pname), pfp)) == NULL) {
+		if (check_session == 0 && !stream_media_size) {
+#ifdef	USE_LIBSCHILY
+			errmsgno(EX_BAD, "Missing pathspec.\n");
+#endif
+			susage(1);
+		}
+	}
+
+	/*
+	 * if we don't have a pathspec, then save the pathspec found
+	 * in the pathnames file (stored in pname) - we don't want
+	 * to skip this pathspec when we read the pathnames file again
+	 */
+	if (!have_cmd_line_pathspec && !stream_media_size) {
+		save_pname = 1;
+	}
+	if (stream_media_size) {
+		if (use_XA || use_RockRidge || use_udf || use_Joliet)
+			comerrno(EX_BAD,
+			"Cannot use XA, Rock Ridge, UDF or Joliet with -stream-media-size\n");
+		if (merge_image)
+			comerrno(EX_BAD,
+			"Cannot use multi session with -stream-media-size\n");
+		if (use_eltorito || use_sparcboot || use_sunx86boot ||
+		    use_genboot || use_prep_boot || hfs_boot_file)
+			comerrno(EX_BAD,
+			"Cannot use boot options with -stream-media-size\n");
+		if (apple_hyb)
+			comerrno(EX_BAD,
+			"Cannot use Apple hybrid options with -stream-media-size\n");
+	}
+
+	if (use_RockRidge) {
+		/* BEGIN CSTYLED */
+#if 1
+		extension_record = generate_rr_extension_record("RRIP_1991A",
+			"THE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
+			"PLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE.  SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.",
+			&extension_record_size);
+#else
+		extension_record = generate_rr_extension_record("IEEE_P1282",
+			"THE IEEE P1282 PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
+			"PLEASE CONTACT THE IEEE STANDARDS DEPARTMENT, PISCATAWAY, NJ, USA FOR THE P1282 SPECIFICATION.",
+			&extension_record_size);
+#endif
+		/* END CSTYLED */
+	}
+	if (log_file) {
+		FILE		*lfp;
+		int		i;
+
+		/* open log file - test that we can open OK */
+		if ((lfp = fopen(log_file, "w")) == NULL) {
+#ifdef	USE_LIBSCHILY
+			comerr("Can't open logfile: '%s'.\n", log_file);
+#else
+			fprintf(stderr, "Can't open logfile: '%s'.\n", log_file);
+			exit(1);
+#endif
+		}
+		fclose(lfp);
+
+		/* redirect all stderr message to log_file */
+		fprintf(stderr, "re-directing all messages to %s\n", log_file);
+		fflush(stderr);
+
+		/* associate stderr with the log file */
+		if (freopen(log_file, "w", stderr) == NULL) {
+#ifdef	USE_LIBSCHILY
+			comerr("Can't open logfile: '%s'.\n", log_file);
+#else
+			fprintf(stderr, "Can't open logfile: '%s'.\n", log_file);
+			exit(1);
+#endif
+		}
+		if (verbose > 1) {
+			for (i = 0; i < argc; i++)
+				fprintf(stderr, "%s ", argv[i]);
+
+			fprintf(stderr, "\n%s (%s)\n",
+				version_string, HOST_SYSTEM);
+		}
+	}
+	/* Find name of root directory. */
+	if (arg != NULL)
+		node = findgequal(arg);
+	if (!use_graft_ptrs)
+		node = NULL;
+	if (node == NULL) {
+		if (use_graft_ptrs && arg != NULL)
+			node = escstrcpy(nodename, arg);
+		else
+			node = arg;
+	} else {
+		/*
+		 * Remove '\\' escape chars which are located
+		 * before '\\' and '=' chars
+		 */
+		node = escstrcpy(nodename, ++node);
+	}
+
+	/*
+	 * See if boot catalog file exists in root directory, if not we will
+	 * create it.
+	 */
+	if (use_eltorito)
+		init_boot_catalog(node);
+
+	/*
+	 * Find the device and inode number of the root directory. Record this
+	 * in the hash table so we don't scan it more than once.
+	 */
+	stat_filter(node, &statbuf);
+	add_directory_hash(statbuf.st_dev, STAT_INODE(statbuf));
+
+	memset(&de, 0, sizeof (de));
+
+	/*
+	 * PO:
+	 * Isn't root NULL at this time anyway?
+	 * I think it is created by the first call to
+	 * find_or_create_directory() below.
+	 */
+	de.filedir = root;	/* We need this to bootstrap */
+
+	if (cdrecord_data != NULL && merge_image == NULL) {
+		/*
+		 * in case we want to add a new session, but don't want to
+		 * merge old one
+		 */
+		get_session_start(NULL);
+	}
+	if (merge_image != NULL) {
+		char	sector[SECTOR_SIZE];
+
+		errno = 0;
+		mrootp = merge_isofs(merge_image);
+		if (mrootp == NULL) {
+			/* Complain and die. */
+#ifdef	USE_LIBSCHILY
+			if (errno == 0)
+				errno = -1;
+			comerr("Unable to find previous session PVD '%s'.\n",
+				merge_image);
+#else
+			fprintf(stderr,
+				"Unable to find previous session PVD '%s'.\n",
+				merge_image);
+			exit(1);
+#endif
+		}
+		memcpy(de.isorec.extent, mrootp->extent, 8);
+
+		/*
+		 * Look for RR Attributes in '.' entry of root dir.
+		 * This is the first ISO directory entry in the root dir.
+		 */
+		c = isonum_733((unsigned char *)mrootp->extent);
+#ifdef  USE_SCG
+		readsecs(c, sector, 1);
+#else
+    lseek(fileno(in_image), c*2048, SEEK_SET);
+    read(fileno(in_image), sector, sizeof (sector));
+#endif
+		c = rr_flags((struct iso_directory_record *)sector);
+		if (c & RR_FLAG_XA)
+			fprintf(stderr, "XA signatures found\n");
+		if (c & RR_FLAG_AA)
+			fprintf(stderr, "AA signatures found\n");
+		if (c & ~(RR_FLAG_XA|RR_FLAG_AA)) {
+			if (c & RR_FLAG_SP) {
+				fprintf(stderr, "Rock Ridge signatures found\n");
+			} else {
+				fprintf(stderr, "Bad Rock Ridge signatures found (SU record missing)\n");
+				if (!force_rr)
+					no_rr++;
+			}
+		} else {
+			fprintf(stderr, "NO Rock Ridge present\n");
+			if ((c & (RR_FLAG_XA|RR_FLAG_AA)) == 0) {
+				if (!force_rr)
+					no_rr++;
+			}
+		}
+		if (no_rr)
+			fprintf(stderr, "Disabling Rock Ridge / XA / AA\n");
+	}
+	/*
+	 * Create an empty root directory. If we ever scan it for real,
+	 * we will fill in the contents.
+	 */
+	find_or_create_directory(NULL, "", &de, TRUE);
+
+#ifdef APPLE_HYB
+	/* may need to set window layout of the volume */
+	if (root_info)
+		set_root_info(root_info);
+#endif /* APPLE_HYB */
+
+	/*
+	 * Scan the actual directory (and any we find below it) for files to
+	 * write out to the output image.  Note - we take multiple source
+	 * directories and keep merging them onto the image.
+	 */
+if (check_session == 0)
+	while ((arg = get_pnames(argc, argv, optind, pname,
+					sizeof (pname), pfp)) != NULL) {
+		struct directory *graft_dir;
+		struct stat	st;
+		char		*short_name;
+		int		status;
+		char		graft_point[PATH_MAX + 1];
+
+		/*
+		 * We would like a syntax like:
+		 *
+		 *	/tmp=/usr/tmp/xxx
+		 *
+		 * where the user can specify a place to graft each component
+		 * of the tree.  To do this, we may have to create directories
+		 * along the way, of course. Secondly, I would like to allow
+		 * the user to do something like:
+		 *
+		 *	/home/baz/RMAIL=/u3/users/baz/RMAIL
+		 *
+		 * so that normal files could also be injected into the tree
+		 * at an arbitrary point.
+		 *
+		 * The idea is that the last component of whatever is being
+		 * entered would take the name from the last component of
+		 * whatever the user specifies.
+		 *
+		 * The default will be that the file is injected at the root of
+		 * the image tree.
+		 */
+		node = findgequal(arg);
+		if (!use_graft_ptrs)
+			node = NULL;
+		/*
+		 * Remove '\\' escape chars which are located
+		 * before '\\' and '=' chars ---> below in escstrcpy()
+		 */
+
+		short_name = NULL;
+
+		if (node != NULL || reloc_root) {
+			char		*pnt;
+			char		*xpnt;
+			size_t		len;
+
+			/* insert -root prefix */
+			if (reloc_root != NULL) {
+				strcpy(graft_point, reloc_root);
+				len = strlen(graft_point);
+				if (graft_point[len] != '/')
+					graft_point[len++] = '/';
+			} else {
+				len = 0;
+			}
+
+			if (node) {
+				*node = '\0';
+				escstrcpy(&graft_point[len], arg);
+				*node = '=';
+			}
+
+			/*
+			 * Remove unwanted "./" & "/" sequences from start...
+			 */
+			do {
+				xpnt = graft_point;
+				while (xpnt[0] == '.' && xpnt[1] == '/')
+					xpnt += 2;
+				while (*xpnt == PATH_SEPARATOR) {
+					xpnt++;
+				}
+				strcpy(graft_point, xpnt);
+			} while (xpnt > graft_point);
+
+			if (node) {
+				node = escstrcpy(nodename, ++node);
+			} else {
+				node = arg;
+			}
+
+			graft_dir = root;
+			xpnt = graft_point;
+
+			/*
+			 * If "node" points to a directory, then graft_point
+			 * needs to point to a directory too.
+			 */
+			if (follow_links)
+				status = stat_filter(node, &st);
+			else
+				status = lstat_filter(node, &st);
+			if (status == 0 && S_ISDIR(st.st_mode)) {
+				len = strlen(graft_point);
+
+				if ((len <= (sizeof (graft_point) -1)) &&
+				    graft_point[len-1] != '/') {
+					graft_point[len++] = '/';
+					graft_point[len] = '\0';
+				}
+			}
+			if (debug)
+				fprintf(stderr, "GRAFT:'%s'\n", xpnt);
+			/*
+			 * Loop down deeper and deeper until we find the
+			 * correct insertion spot.
+			 * Canonicalize the filename while parsing it.
+			 */
+			for (;;) {
+				do {
+					while (xpnt[0] == '.' && xpnt[1] == '/')
+						xpnt += 2;
+					while (xpnt[0] == '/')
+						xpnt += 1;
+					if (xpnt[0] == '.' && xpnt[1] == '.' && xpnt[2] == '/') {
+						if (graft_dir && graft_dir != root) {
+							graft_dir = graft_dir->parent;
+							xpnt += 2;
+						}
+					}
+				} while ((xpnt[0] == '/') || (xpnt[0] == '.' && xpnt[1] == '/'));
+				pnt = strchr(xpnt, PATH_SEPARATOR);
+				if (pnt == NULL) {
+					if (*xpnt != '\0') {
+						short_name = xpnt;
+					}
+					break;
+				}
+				*pnt = '\0';
+				if (debug) {
+					fprintf(stderr, "GRAFT Point:'%s' in '%s : %s' (%s)\n",
+						xpnt,
+						graft_dir->whole_name,
+						graft_dir->de_name,
+						graft_point);
+				}
+				graft_dir = find_or_create_directory(graft_dir,
+					graft_point,
+					NULL, TRUE);
+				*pnt = PATH_SEPARATOR;
+				xpnt = pnt + 1;
+			}
+		} else {
+			graft_dir = root;
+			if (use_graft_ptrs)
+				node = escstrcpy(nodename, arg);
+			else
+				node = arg;
+		}
+
+		/*
+		 * Now see whether the user wants to add a regular file, or a
+		 * directory at this point.
+		 */
+		if (follow_links)
+			status = stat_filter(node, &st);
+		else
+			status = lstat_filter(node, &st);
+		if (status != 0) {
+			/*
+			 * This is a fatal error - the user won't be getting
+			 * what they want if we were to proceed.
+			 */
+#ifdef	USE_LIBSCHILY
+			comerr("Invalid node - '%s'.\n", node);
+#else
+			fprintf(stderr, "Invalid node - '%s'.\n", node);
+			exit(1);
+#endif
+		} else {
+			if (S_ISDIR(st.st_mode)) {
+				if (debug) {
+					fprintf(stderr, "graft_dir: '%s : %s', node: '%s', (scan)\n",
+						graft_dir->whole_name,
+						graft_dir->de_name, node);
+				}
+				if (!scan_directory_tree(graft_dir,
+								node, &de)) {
+					exit(1);
+				}
+				if (debug) {
+					fprintf(stderr, "scan done\n");
+				}
+			} else {
+				if (short_name == NULL) {
+					short_name = strrchr(node,
+							PATH_SEPARATOR);
+					if (short_name == NULL ||
+							short_name < node) {
+						short_name = node;
+					} else {
+						short_name++;
+					}
+				}
+				if (debug) {
+					fprintf(stderr, "graft_dir: '%s : %s', node: '%s', short_name: '%s'\n",
+						graft_dir->whole_name,
+						graft_dir->de_name, node,
+						short_name);
+				}
+#ifdef APPLE_HYB
+				if (!insert_file_entry(graft_dir, node,
+								short_name, 0))
+#else
+				if (!insert_file_entry(graft_dir, node,
+								short_name))
+#endif	/* APPLE_HYB */
+				{
+					/*
+					 * Should we ignore this?
+					 */
+/*					exit(1);*/
+					/* EMPTY */
+				}
+			}
+		}
+
+		optind++;
+		no_path_names = 0;
+	}
+
+	if (pfp && pfp != stdin)
+		fclose(pfp);
+
+	/*
+	 * exit if we don't have any pathnames to process
+	 * - not going to happen at the moment as we have to have at least one
+	 * path on the command line
+	 */
+	if (no_path_names && !check_session && !stream_media_size) {
+#ifdef	USE_LIBSCHILY
+		errmsgno(EX_BAD, "No pathnames found.\n");
+#endif
+		susage(1);
+	}
+	/*
+	 * Now merge in any previous sessions.  This is driven on the source
+	 * side, since we may need to create some additional directories.
+	 */
+	if (merge_image != NULL) {
+		if (merge_previous_session(root, mrootp,
+					reloc_root, reloc_old_root) < 0) {
+#ifdef	USE_LIBSCHILY
+			comerrno(EX_BAD, "Cannot merge previous session.\n");
+#else
+			fprintf(stderr, "Cannot merge previous session.\n");
+			exit(1);
+#endif
+		}
+		close_merge_image();
+
+		/*
+		 * set up parent_dir and filedir in relocated entries which
+		 * were read from previous session so that
+		 * finish_cl_pl_entries can do its job
+		 */
+		match_cl_re_entries();
+	}
+#ifdef APPLE_HYB
+	/* free up any HFS filename mapping memory */
+	if (apple_both)
+		clean_hfs();
+#endif	/* APPLE_HYB */
+
+	/* hide "./rr_moved" if all its contents have been hidden */
+	if (reloc_dir && i_ishidden())
+		hide_reloc_dir();
+
+	/* insert the boot catalog if required */
+	if (use_eltorito)
+		insert_boot_cat();
+
+	/*
+	 * Free up any matching memory
+	 */
+	for (n = 0; n < MAX_MAT; n++)
+		gen_del_match(n);
+
+#ifdef SORTING
+	del_sort();
+#endif /* SORTING */
+
+	/*
+	 * Sort the directories in the required order (by ISO9660).  Also,
+	 * choose the names for the 8.3 filesystem if required, and do any
+	 * other post-scan work.
+	 */
+	goof += sort_tree(root);
+
+	if (goof) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "ISO9660/Rock Ridge tree sort failed.\n");
+#else
+		fprintf(stderr, "ISO9660/Rock Ridge tree sort failed.\n");
+		exit(1);
+#endif
+	}
+#ifdef UDF
+	if (use_Joliet || use_udf) {
+#else
+	if (use_Joliet) {
+#endif
+		goof += joliet_sort_tree(root);
+	}
+	if (goof) {
+#ifdef	USE_LIBSCHILY
+		comerrno(EX_BAD, "Joliet tree sort failed. The -joliet-long switch may help you.\n");
+#else
+		fprintf(stderr, "Joliet tree sort failed. The -joliet-long switch may help you.\n");
+		exit(1);
+#endif
+	}
+	/*
+	 * Fix a couple of things in the root directory so that everything is
+	 * self consistent. Fix this up so that the path tables get done right.
+	 */
+	root->self = root->contents;
+
+	/* OK, ready to write the file.  Open it up, and generate the thing. */
+	if (print_size) {
+		discimage = fopen("/dev/null", "wb");
+		if (!discimage) {
+#ifdef	USE_LIBSCHILY
+			comerr("Unable to open /dev/null\n");
+#else
+			fprintf(stderr, "Unable to open /dev/null\n");
+			exit(1);
+#endif
+		}
+	} else if (outfile) {
+		discimage = fopen(outfile, "wb");
+		if (!discimage) {
+#ifdef	USE_LIBSCHILY
+			comerr("Unable to open disc image file '%s'.\n", outfile);
+#else
+			fprintf(stderr, "Unable to open disc image file '%s'.\n", outfile);
+			exit(1);
+#endif
+		}
+		if (jtemplate_out || jjigdo_out) {
+			if (!jtemplate_out || !jjigdo_out || !jmd5_list) {
+#ifdef USE_LIBSCHILY
+				comerr("Bad options - need to specify output names for jigdo and template file, and also the md5-list input file!\n");
+#else
+				fprintf(stderr, "Bad options - need to specify output names for jigdo and template file, and also the md5-list input file!\n");
+				exit(1);
+#endif
+			}
+			jtjigdo = fopen(jjigdo_out, "wb");
+			jttemplate = fopen(jtemplate_out, "wb");
+			if (!jtjigdo || !jttemplate) {
+#ifdef USE_LIBSCHILY
+				comerr("Unable to open jigdo template image file\n");
+#else
+				fprintf(stderr, "Unable to open jigdo template image file\n");
+				exit(1);
+#endif
+			}
+			write_jt_header(jttemplate, jtjigdo);
+		}
+	} else {
+		discimage = stdout;
+
+#ifdef	NEED_O_BINARY
+		setmode(fileno(stdout), O_BINARY);
+#endif
+	}
+
+	/* Now assign addresses on the disc for the path table. */
+
+	path_blocks = ISO_BLOCKS(path_table_size);
+	if (path_blocks & 1)
+		path_blocks++;
+
+	jpath_blocks = ISO_BLOCKS(jpath_table_size);
+	if (jpath_blocks & 1)
+		jpath_blocks++;
+
+	/*
+	 * Start to set up the linked list that we use to track the contents
+	 * of the disc.
+	 */
+#ifdef APPLE_HYB
+#ifdef PREP_BOOT
+	if (apple_hyb || use_prep_boot || use_chrp_boot)
+#else	/* PREP_BOOT */
+	if (apple_hyb)
+#endif	/* PREP_BOOT */
+		outputlist_insert(&hfs_desc);
+#endif	/* APPLE_HYB */
+	if (use_sparcboot || use_sunx86boot)
+		outputlist_insert(&sunlabel_desc);
+	if (use_alphaboot)
+		outputlist_insert(&alphaboot_desc);
+	if (use_hppaboot)
+		outputlist_insert(&hppaboot_desc);
+	if (use_mipsboot)
+		outputlist_insert(&mipsboot_desc);
+	if (use_mipselboot)
+		outputlist_insert(&mipselboot_desc);
+	if (use_genboot)
+		outputlist_insert(&genboot_desc);
+	outputlist_insert(&startpad_desc);
+
+	/* PVD for disc. */
+	outputlist_insert(&voldesc_desc);
+
+	/* SVD for El Torito. MUST be immediately after the PVD! */
+	if (use_eltorito) {
+		outputlist_insert(&torito_desc);
+	}
+	/* Enhanced PVD for disc. neded if we write ISO-9660:1999 */
+	if (iso9660_level > 3)
+		outputlist_insert(&xvoldesc_desc);
+
+	/* SVD for Joliet. */
+	if (use_Joliet) {
+		outputlist_insert(&joliet_desc);
+	}
+	/* Finally the last volume descriptor. */
+	outputlist_insert(&end_vol);
+
+#ifdef UDF
+	if (use_udf) {
+		outputlist_insert(&udf_vol_recognition_area_frag);
+	}
+#endif
+
+	/* Insert the version descriptor. */
+	outputlist_insert(&version_desc);
+
+#ifdef UDF
+	if (use_udf) {
+		/*
+		 * Most of the space before sector 256 is wasted when
+		 * UDF is turned on. The waste could be reduced by
+		 * putting the ISO9660/Joliet structures before the
+		 * pad_to_sector_256; the problem is that they might
+		 * overshoot sector 256, so there would have to be some
+		 * ugly logic to detect this case and rearrange things
+		 * appropriately. I don't know if it's worth it.
+		 */
+		outputlist_insert(&udf_pad_to_sector_32_frag);
+		outputlist_insert(&udf_main_seq_frag);
+		outputlist_insert(&udf_main_seq_copy_frag);
+		outputlist_insert(&udf_integ_seq_frag);
+		outputlist_insert(&udf_pad_to_sector_256_frag);
+		outputlist_insert(&udf_anchor_vol_desc_frag);
+		outputlist_insert(&udf_file_set_desc_frag);
+		outputlist_insert(&udf_dirtree_frag);
+		outputlist_insert(&udf_file_entries_frag);
+	}
+#endif
+
+	/* Now start with path tables and directory tree info. */
+	if (!stream_media_size)
+		outputlist_insert(&pathtable_desc);
+	else
+		outputlist_insert(&strpath_desc);
+
+	if (use_Joliet) {
+		outputlist_insert(&jpathtable_desc);
+	}
+
+	if (!stream_media_size)
+		outputlist_insert(&dirtree_desc);
+
+	if (use_Joliet) {
+		outputlist_insert(&jdirtree_desc);
+	}
+	outputlist_insert(&dirtree_clean);
+
+	if (extension_record) {
+		outputlist_insert(&extension_desc);
+	}
+
+	if (!stream_media_size) {
+		outputlist_insert(&files_desc);
+	} else {
+		outputlist_insert(&strfile_desc);
+		outputlist_insert(&strdir_desc);
+	}
+
+	/*
+	 * Allow room for the various headers we will be writing.
+	 * There will always be a primary and an end volume descriptor.
+	 */
+	last_extent = session_start;
+
+	/*
+	 * Calculate the size of all of the components of the disc, and assign
+	 * extent numbers.
+	 */
+	for (opnt = out_list; opnt; opnt = opnt->of_next) {
+		opnt->of_start_extent = last_extent;
+		if (opnt->of_size != NULL) {
+			(*opnt->of_size) (last_extent);
+		}
+	}
+
+	/*
+	 * Generate the contents of any of the sections that we want to
+	 * generate. Not all of the fragments will do anything here
+	 * - most will generate the data on the fly when we get to the write
+	 * pass.
+	 */
+	for (opnt = out_list; opnt; opnt = opnt->of_next) {
+		if (opnt->of_generate != NULL) {
+			(*opnt->of_generate) ();
+		}
+	}
+
+	/*
+	 * Padding just after the ISO-9660 filesystem.
+	 *
+	 * files_desc does not have an of_size function. For this
+	 * reason, we must insert us after the files content has been
+	 * generated.
+	 */
+#ifdef UDF
+	if (use_udf) {
+		/* Single anchor volume descriptor pointer at end */
+		outputlist_insert(&udf_end_anchor_vol_desc_frag);
+		if (udf_end_anchor_vol_desc_frag.of_size != NULL) {
+			(*udf_end_anchor_vol_desc_frag.of_size) (last_extent);
+		}
+		if (dopad) {
+			/*
+			 * Pad with anchor volume descriptor pointer
+			 * blocks instead of zeroes.
+			 */
+			outputlist_insert(&udf_padend_avdp_frag);
+			if (udf_padend_avdp_frag.of_size != NULL) {
+				(*udf_padend_avdp_frag.of_size) (last_extent);
+			}
+		}
+	} else
+#endif
+	if (dopad && !(use_sparcboot || use_sunx86boot)) {
+		outputlist_insert(&endpad_desc);
+		if (endpad_desc.of_size != NULL) {
+			(*endpad_desc.of_size) (last_extent);
+		}
+	}
+	c = 0;
+	if (use_sparcboot) {
+		if (dopad) {
+			/* Padding before the boot partitions. */
+			outputlist_insert(&interpad_desc);
+			if (interpad_desc.of_size != NULL) {
+				(*interpad_desc.of_size) (last_extent);
+			}
+		}
+		c = make_sun_label();
+		last_extent += c;
+		outputlist_insert(&sunboot_desc);
+		if (dopad) {
+			outputlist_insert(&endpad_desc);
+			if (endpad_desc.of_size != NULL) {
+				(*endpad_desc.of_size) (last_extent);
+			}
+		}
+	} else if (use_sunx86boot) {
+		if (dopad) {
+			/* Padding before the boot partitions. */
+			outputlist_insert(&interpad_desc);
+			if (interpad_desc.of_size != NULL) {
+				(*interpad_desc.of_size) (last_extent);
+			}
+		}
+		c = make_sunx86_label();
+		last_extent += c;
+		outputlist_insert(&sunboot_desc);
+		if (dopad) {
+			outputlist_insert(&endpad_desc);
+			if (endpad_desc.of_size != NULL) {
+				(*endpad_desc.of_size) (last_extent);
+			}
+		}
+	}
+	if (print_size > 0) {
+		if (verbose > 0)
+			fprintf(stderr,
+			"Total extents scheduled to be written = %d\n",
+			(last_extent - session_start));
+		printf("%d\n", (last_extent - session_start));
+		exit(0);
+	}
+	/*
+	 * Now go through the list of fragments and write the data that
+	 * corresponds to each one.
+	 */
+	for (opnt = out_list; opnt; opnt = opnt->of_next) {
+		Uint	oext;
+
+		oext = last_extent_written;
+		if (opnt->of_start_extent != 0 &&
+		    opnt->of_start_extent != last_extent_written) {
+			/*
+			 * Consistency check.
+			 * XXX Should make sure that all entries have
+			 * XXXX of_start_extent set up correctly.
+			 */
+			comerrno(EX_BAD,
+			"Implementation botch: %s should start at %u but starts at %u.\n",
+			opnt->of_name, opnt->of_start_extent, last_extent_written);
+		}
+		if (opnt->of_write != NULL) {
+			if (verbose > 1)
+				fprintf(stderr, "Writing:   %-40sStart Block %u\n",
+					opnt->of_name, last_extent_written);
+			(*opnt->of_write) (discimage);
+			if (verbose > 1)
+				fprintf(stderr, "Done with: %-40sBlock(s)    %d\n",
+					opnt->of_name, last_extent_written-oext);
+		}
+	}
+	if (last_extent != last_extent_written) {
+		comerrno(EX_BAD,
+		"Implementation botch: FS should end at %u but ends at %u.\n",
+				last_extent, last_extent_written);
+	}
+
+	if (jttemplate) {
+		write_jt_footer();
+		fclose(jttemplate);
+	}
+	if (jtjigdo)
+		fclose(jtjigdo);
+
+	if (verbose > 0) {
+#ifdef HAVE_SBRK
+		fprintf(stderr, "Max brk space used %x\n",
+			(unsigned int)(((unsigned long) sbrk(0)) - mem_start));
+#endif
+		fprintf(stderr, "%d extents written (%d MB)\n",
+			last_extent, last_extent >> 9);
+	}
+#ifdef VMS
+	return (1);
+#else
+	return (0);
+#endif
+}
+
+/*
+ * Find unescaped equal sign in graft pointer string.
+ */
+char *
+findgequal(char *s)
+{
+	char	*p = s;
+
+	while ((p = strchr(p, '=')) != NULL) {
+		if (p > s && p[-1] != '\\')
+			return (p);
+		p++;
+	}
+	return (NULL);
+}
+
+/*
+ * Find unescaped equal sign in string.
+ */
+static char *
+escstrcpy(char *to, char *from)
+{
+	char	*p = to;
+
+	if (debug)
+		fprintf(stderr, "FROM: '%s'\n", from);
+
+	while ((*p = *from++) != '\0') {
+		if (*p == '\\') {
+			if ((*p = *from++) == '\0')
+				break;
+			if (*p != '\\' && *p != '=') {
+				p[1] = p[0];
+				*p++ = '\\';
+			}
+		}
+		p++;
+	}
+	if (debug)
+		fprintf(stderr, "ESC:  '%s'\n", to);
+	return (to);
+}
+
+void *
+e_malloc(size_t size)
+{
+	void		*pt = 0;
+
+	if ((size > 0) && ((pt = malloc(size)) == NULL)) {
+#ifdef	USE_LIBSCHILY
+		comerr("Not enough memory\n");
+#else
+		fprintf(stderr, "Not enough memory\n");
+		exit(1);
+#endif
+	}
+	/*
+	 * Not all code is clean yet.
+	 * Filling all allocated data with zeroes will help
+	 * to avoid core dumps.
+	 */
+	memset(pt, 0, size);
+	return (pt);
+}

Copied: cdrkit/trunk/mkisoimage/mkisoimage.h (from rev 449, cdrkit/trunk/mkisoimage/mkisofs.h)
===================================================================
--- cdrkit/trunk/mkisoimage/mkisofs.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/mkisoimage.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -0,0 +1,800 @@
+/*
+ * 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.
+ *
+ */
+
+/* @(#)mkisoimage.h	1.95 05/05/01 joerg */
+/*
+ * Header file mkisoimage.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 at ge.ucl.ac.uk 23/2/2000 */
+
+#define APPID_DEFAULT "MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"
+
+
+#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
+
+#ifndef __SVR4
+extern int	optind;
+extern char	*optarg;
+
+/* extern int getopt (int __argc, char **__argv, char *__optstring); */
+#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
+};
+
+struct file_hash {
+	struct file_hash *next;
+	ino_t		inode;		/* Used in the hash table */
+	dev_t		dev;		/* Used in the hash table */
+	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 mkisoimage 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 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/mkisoimage 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);
+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);
+>>>>>>> .merge-rechts.r368
+#   endif
+extern	int	joliet_strlen		__PR((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

Modified: cdrkit/trunk/mkisoimage/multi.c
===================================================================
--- cdrkit/trunk/mkisoimage/multi.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/multi.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -38,7 +38,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <timedefs.h>
 #include <errno.h>
 #include <utypes.h>
@@ -146,7 +146,7 @@
 
 #ifndef	USE_SCG
 /*
- * Don't define readsecs if mkisofs is linked with
+ * Don't define readsecs if mkisoimage is linked with
  * the SCSI library.
  * readsecs() will be implemented as SCSI command in this case.
  *
@@ -1850,7 +1850,7 @@
 		if (re->de != NULL) {
 			/*
 			 * here we have hypothetical case when previous session
-			 * was not created by mkisofs and contains relocations
+			 * was not created by mkisoimage and contains relocations
 			 */
 			struct directory_entry *s_entry = re->de;
 			struct directory_entry *s_entry1;

Modified: cdrkit/trunk/mkisoimage/name.c
===================================================================
--- cdrkit/trunk/mkisoimage/name.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/name.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -43,7 +43,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <standard.h>
 #include <schily.h>
 #include <ctype.h>

Modified: cdrkit/trunk/mkisoimage/rock.c
===================================================================
--- cdrkit/trunk/mkisoimage/rock.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/rock.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -39,7 +39,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <device.h>
 #include <schily.h>
 
@@ -729,7 +729,7 @@
 	 * be an issue since if you're using -z odds are most of your
 	 * files are already compressed.
 	 *
-	 * In the future it would be nice if mkisofs actually did the
+	 * In the future it would be nice if mkisoimage actually did the
 	 * compression.
 	 */
 	if (transparent_compression && S_ISREG(lstatbuf->st_mode)) {

Modified: cdrkit/trunk/mkisoimage/rsync.c
===================================================================
--- cdrkit/trunk/mkisoimage/rsync.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/rsync.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -10,7 +10,7 @@
  *
  */
 
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include "utypes.h"
 #include <ctype.h>
 #include <mconfig.h>

Modified: cdrkit/trunk/mkisoimage/scsi.c
===================================================================
--- cdrkit/trunk/mkisoimage/scsi.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/scsi.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -42,7 +42,7 @@
 #include <unixstd.h>
 #include <schily.h>
 
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <usal/scsireg.h>
 #include <usal/scsitransp.h>
 

Modified: cdrkit/trunk/mkisoimage/stream.c
===================================================================
--- cdrkit/trunk/mkisoimage/stream.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/stream.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -16,7 +16,7 @@
 	"@(#)stream.c	1.3 04/03/04 Copyright 2002-2003 J. Schilling";
 #endif
 /*
- *	ISO-9660 stream (pipe) file module for mkisofs
+ *	ISO-9660 stream (pipe) file module for mkisoimage
  *
  *	Copyright (c) 2002-2003 J. Schilling
  *	Implemented after an idea from M.H. Voase
@@ -37,7 +37,7 @@
  */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include "iso9660.h"
 
 static int	size_str_file(int starting_extent);

Modified: cdrkit/trunk/mkisoimage/sunlabel.h
===================================================================
--- cdrkit/trunk/mkisoimage/sunlabel.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/sunlabel.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -44,8 +44,8 @@
 #define	DKL_MAGIC_0	0xDA		/* magic number high byte */
 #define	DKL_MAGIC_1	0xBE		/* magic number low byte  */
 
-#define	CD_DEFLABEL	"CD-ROM Disc with Sun sparc boot created by mkisofs"
-#define	CD_X86LABEL	"CD-ROM Disc with Sun x86 boot created by mkisofs"
+#define	CD_DEFLABEL	"CD-ROM Disc with Sun sparc boot created by mkisoimage"
+#define	CD_X86LABEL	"CD-ROM Disc with Sun x86 boot created by mkisoimage"
 
 /*
  * Define a virtual geometry for the CD disk label.

Modified: cdrkit/trunk/mkisoimage/tree.c
===================================================================
--- cdrkit/trunk/mkisoimage/tree.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/tree.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -43,7 +43,7 @@
 /* APPLE_HYB James Pearson j.pearson at ge.ucl.ac.uk 23/2/2000 */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include "match.h"
 #include "exclude.h"
 #include <timedefs.h>
@@ -1496,7 +1496,7 @@
 					lstatbuf = statbuf;
 					/*
 					 * XXX when this line was active,
-					 * XXX mkisofs did not include all
+					 * XXX mkisoimage did not include all
 					 * XXX files if it was called with '-f'
 					 * XXX (follow symlinks).
 					 * XXX Now scan_directory_tree()
@@ -2361,7 +2361,7 @@
 		 * Now add a . and .. entry in the directory itself. This is a
 		 * little tricky - if the real directory exists, we need to
 		 * stat it first. Otherwise, we use the fictitious fstatbuf
-		 * which points to the time at which mkisofs was started.
+		 * which points to the time at which mkisoimage was started.
 		 */
 		if (parent == NULL || parent->whole_name[0] == '\0')
 			sts = -1;

Modified: cdrkit/trunk/mkisoimage/udf.c
===================================================================
--- cdrkit/trunk/mkisoimage/udf.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/udf.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -16,7 +16,7 @@
 	"@(#)udf.c	1.14 04/04/15 Copyright 2001 J. Schilling";
 #endif
 /*
- * udf.c - UDF support for mkisofs
+ * udf.c - UDF support for mkisoimage
  *
  * Written by Ben Rudiak-Gould (2001).
  *
@@ -90,7 +90,7 @@
 #ifdef UDF
 
 #include "config.h"
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <timedefs.h>
 #include <schily.h>
 
@@ -402,7 +402,7 @@
 static void
 set_impl_ident(udf_EntityID *ent)
 {
-	strcpy((char *)ent->ident, "*mkisofs");
+	strcpy((char *)ent->ident, "*mkisoimage");
 }
 
 static void

Modified: cdrkit/trunk/mkisoimage/udf.h
===================================================================
--- cdrkit/trunk/mkisoimage/udf.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/udf.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -12,7 +12,7 @@
 
 /* @(#)udf.h	1.2 04/03/01 Copyright 2001-2004 J. Schilling */
 /*
- *	UDF external definitions for mkisofs
+ *	UDF external definitions for mkisoimage
  *
  *	Copyright (c) 2001-2004 J. Schilling
  */

Modified: cdrkit/trunk/mkisoimage/udf_fs.h
===================================================================
--- cdrkit/trunk/mkisoimage/udf_fs.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/udf_fs.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -12,7 +12,7 @@
 
 /* @(#)udf_fs.h	1.2 04/03/01 Copyright 2001-2004 J. Schilling */
 /*
- * udf_fs.h - UDF structure definitions for mkisofs
+ * udf_fs.h - UDF structure definitions for mkisoimage
  *
  * Written by Ben Rudiak-Gould (2001).
  *

Modified: cdrkit/trunk/mkisoimage/vms.c
===================================================================
--- cdrkit/trunk/mkisoimage/vms.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/vms.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -26,7 +26,7 @@
 #include <mconfig.h>
 #ifdef VMS
 #define	opendir	fake_opendir
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #undef opendir
 #include <rms.h>
 #include <descrip.h>

Modified: cdrkit/trunk/mkisoimage/vms.h
===================================================================
--- cdrkit/trunk/mkisoimage/vms.h	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/vms.h	2006-11-23 21:37:32 UTC (rev 450)
@@ -12,7 +12,7 @@
 
 /* @(#)vms.h	1.3 04/03/01 eric */
 /*
- * Header file mkisofs.h - assorted structure definitions and typecasts.
+ * Header file mkisoimage.h - assorted structure definitions and typecasts.
  *
  *   Written by Eric Youngdale (1993).
  */

Modified: cdrkit/trunk/mkisoimage/volume.c
===================================================================
--- cdrkit/trunk/mkisoimage/volume.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/volume.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -49,7 +49,7 @@
 #ifdef APPLE_HYB
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <errno.h>
 
 #define	HFS_MIN_SIZE	1600	/* 800k == 1600 HFS blocks */

Modified: cdrkit/trunk/mkisoimage/write.c
===================================================================
--- cdrkit/trunk/mkisoimage/write.c	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/mkisoimage/write.c	2006-11-23 21:37:32 UTC (rev 450)
@@ -41,7 +41,7 @@
 /* APPLE_HYB James Pearson j.pearson at ge.ucl.ac.uk 23/2/2000 */
 
 #include <mconfig.h>
-#include "mkisofs.h"
+#include "mkisoimage.h"
 #include <timedefs.h>
 #include <fctldefs.h>
 #ifdef SORTING
@@ -477,7 +477,7 @@
 		amt = fread(buffer, 1, use, infile);
 		if (amt < use && amt != remain) {
 			/*
-			 * Note that mkisofs is not star and no 100% archiver.
+			 * Note that mkisoimage is not star and no 100% archiver.
 			 * We only detect file growth if the new size does not
 			 * match 'use' at the last read.
 			 */
@@ -1217,7 +1217,7 @@
 						"Implementation botch. Video pad for file %s is %d\n",
 						s_entry->name, pad),
 						comerrno(EX_BAD,
-						"Either the *.IFO file is bad or you found a mkisofs bug.\n");
+						"Either the *.IFO file is bad or you found a mkisoimage bug.\n");
 					}
 					dwpnt->pad = pad;
 					if (verbose > 0 && pad != 0) {
@@ -2457,7 +2457,7 @@
 	int	last_extent_save = last_extent;
 	char	*p;
 
-	/* allocate memory for the libhfs/mkisofs extra info */
+	/* allocate memory for the libhfs/mkisoimage extra info */
 	hce = (hce_mem *) e_malloc(sizeof (hce_mem));
 
 	hce->error = (char *) e_malloc(1024);

Deleted: cdrkit/trunk/readom/Makefile.man
===================================================================
--- cdrkit/trunk/readom/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/readom/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,19 +0,0 @@
-#ident %W% %E% %Q%
-###########################################################################
-# Sample makefile for installing manual pages
-###########################################################################
-SRCROOT=	..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-#INSMODE=	0644
-MANDIR=		man
-TARGETMAN=	readcd
-MANSECT=	$(MANSECT_CMD)
-MANSUFFIX=	$(MANSUFF_CMD)
-MANFILE=	readcd.1
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################

Deleted: cdrkit/trunk/wodim/Makefile.man
===================================================================
--- cdrkit/trunk/wodim/Makefile.man	2006-11-23 21:26:50 UTC (rev 449)
+++ cdrkit/trunk/wodim/Makefile.man	2006-11-23 21:37:32 UTC (rev 450)
@@ -1,18 +0,0 @@
-#ident %W% %E% %Q%
-###########################################################################
-# Sample makefile for installing manual pages
-###########################################################################
-SRCROOT=	..
-RULESDIR=	RULES
-include		$(SRCROOT)/$(RULESDIR)/rules.top
-###########################################################################
-
-MANDIR=		man
-TARGETMAN=	cdrecord
-MANSECT=	$(MANSECT_CMD)
-MANSUFFIX=	$(MANSUFF_CMD)
-MANFILE=	cdrecord.1
-
-###########################################################################
-include		$(SRCROOT)/$(RULESDIR)/rules.man
-###########################################################################




More information about the Debburn-changes mailing list