[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", ©right},
- {"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", ©right},
+ {"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