18165754 Upgrade cdrtools to 3.01a22
15813303 SUNBT7195261 mkisofs picks wrong charset file definition
--- a/components/cdrtools/Makefile Wed Mar 12 10:08:26 2014 -0700
+++ b/components/cdrtools/Makefile Mon Mar 10 15:44:51 2014 +0100
@@ -18,20 +18,27 @@
#
# CDDL HEADER END
#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
#
+
include ../../make-rules/shared-macros.mk
COMPONENT_NAME= cdrtools
-COMPONENT_VERSION= 3.00
+COMPONENT_VERSION= 3.01
+IPS_COMPONENT_VERSION= 3.1 # Zero not allowed in front of number
+COMPONENT_SUBVERSION= a22
COMPONENT_SRC= $(COMPONENT_NAME)-$(COMPONENT_VERSION)
COMPONENT_PROJECT_URL= http://cdrecord.berlios.de/private/cdrecord.html
-COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE= $(COMPONENT_SRC)$(COMPONENT_SUBVERSION).tar.gz
COMPONENT_ARCHIVE_HASH= \
- sha256:6326762da8b8281c9a910c66fe698cd4d1bc5f33c37b59e8f1c83343c25f3e98
-COMPONENT_ARCHIVE_URL= ftp://ftp.berlios.de/pub/cdrecord/$(COMPONENT_ARCHIVE)
+ sha256:facd40dc66f1499dfe936e647b694bee7a12cd63afd901a35bec855d9e3600a5
+COMPONENT_ARCHIVE_URL= ftp://ftp.berlios.de/pub/cdrecord/alpha/$(COMPONENT_ARCHIVE)
+COMPONENT_BUGDB= utility/cdrtools
+
PATH= $(SPRO_VROOT)/bin:/usr/bin:/usr/gnu/bin
-COMPONENT_BUGDB= utility/cdrtools
+ifeq ($(strip $(PARFAIT_BUILD)),yes)
+PATH=$(PARFAIT_TOOLS):$(SPRO_VROOT)/bin:/usr/bin
+endif
include ../../make-rules/prep.mk
include ../../make-rules/justmake.mk
@@ -39,6 +46,11 @@
COMPONENT_INSTALL_ARGS += GMAKE_NOWARN=true
COMPONENT_BUILD_ARGS += GMAKE_NOWARN=true
+ifeq ($(strip $(PARFAIT_BUILD)),yes)
+COMPONENT_BUILD_ENV += "ac_cv_exeext=no"
+COMPONENT_BUILD_ENV += "ac_cv_objext=o"
+endif
+
build: $(BUILD_32)
--- a/components/cdrtools/cdrtools.p5m Wed Mar 12 10:08:26 2014 -0700
+++ b/components/cdrtools/cdrtools.p5m Mon Mar 10 15:44:51 2014 +0100
@@ -18,13 +18,14 @@
#
# CDDL HEADER END
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
#
<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
set name=pkg.fmri value=pkg:/media/cdrtools@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
set name=pkg.summary value="CD/DVD/BluRay command line recording software"
set name=com.oracle.info.description value="the cdrtools CD/DVD/BluRay recording software"
+set name=com.oracle.info.tpno value=6305
set name=info.classification value="org.opensolaris.category.2008:System/Media"
set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
set name=org.opensolaris.arc-caseid \
@@ -34,16 +35,6 @@
license cdrtools.license license="CDDLv1.0, GPLv2, LGPLv2.1, BSD 2 clause"
-dir path=etc
-dir path=etc/security
-dir path=etc/security/exec_attr.d
-dir path=usr
-dir path=usr/bin
-dir path=usr/share
-dir path=usr/share/man
-dir path=usr/share/man/man1
-dir path=usr/share/man/man8
-dir path=usr/lib/siconv
file Solaris/cdrtools path=etc/security/exec_attr.d/cdrtools
file Solaris/cdda2wav path=usr/bin/cdda2wav
--- a/components/cdrtools/patches/Defaults.sunos5.patch Wed Mar 12 10:08:26 2014 -0700
+++ b/components/cdrtools/patches/Defaults.sunos5.patch Mon Mar 10 15:44:51 2014 +0100
@@ -1,9 +1,9 @@
---- cdrtools-3.00/DEFAULTS/Defaults.sunos5.orig Mon Apr 2 12:22:58 2012
-+++ cdrtools-3.00/DEFAULTS/Defaults.sunos5 Mon Apr 2 12:23:37 2012
-@@ -29,9 +29,9 @@
- CWARNOPTS=
+--- cdrtools-3.01/DEFAULTS/Defaults.sunos5 2014-01-31 05:22:11.622002827 +0100
++++ cdrtools-3.01/DEFAULTS/Defaults.sunos5 2014-01-31 05:21:20.893210286 +0100
+@@ -30,16 +30,16 @@
DEFINCDIRS= $(SRCROOT)/include
+ DEFOSINCDIRS=
-LDPATH= -L/opt/schily/lib
+LDPATH=
#RUNPATH= -R$(INS_BASE)/lib -R/opt/schily/lib -R$(OLIBSDIR)
@@ -12,7 +12,6 @@
###########################################################################
#
-@@ -38,7 +38,7 @@
# Installation config stuff
#
###########################################################################
--- a/components/cdrtools/patches/eltorito.c.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
---- cdrtools-3.00/mkisofs/eltorito.c.orig Tue Jun 28 15:30:41 2011
-+++ cdrtools-3.00/mkisofs/eltorito.c Tue Jun 28 15:32:46 2011
-@@ -46,6 +46,9 @@
- LOCAL void get_torito_desc __PR((struct eltorito_boot_descriptor *boot_desc));
- LOCAL void fill_boot_desc __PR((struct eltorito_defaultboot_entry *boot_desc_entry,
- struct eltorito_boot_entry_info *boot_entry));
-+LOCAL void fill_boot_shdr __PR((struct eltorito_sectionheader_entry *boot_shdr_entry,
-+ struct eltorito_boot_entry_info *boot_entry));
-+
- EXPORT void get_boot_entry __PR((void));
- EXPORT int new_boot_entry __PR((void));
- EXPORT void ex_boot_enoent __PR((char *msg, char *pname));
-@@ -72,6 +75,8 @@
- cbe != NULL;
- cbe = cbe->next) {
- char *p;
-+ if (cbe->type == ELTORITO_SECTION_HEADER)
-+ continue;
-
- if (cbe->boot_image == NULL)
- comerrno(EX_BAD, "Missing boot image name, use -eltorito-boot option.\n");
-@@ -256,7 +261,12 @@
- struct directory_entry *de2; /* Boot catalog */
- int i;
- int offset;
-+ int nentries = 0;
- struct eltorito_defaultboot_entry boot_desc_record;
-+ struct eltorito_sectionheader_entry boot_shdr_record;
-+ struct eltorito_section_entry boot_section_record;
-+ struct eltorito_sectionheader_entry *last_section_header = 0;
-+ extern int def_platid;
-
- memset(boot_desc, 0, sizeof (*boot_desc));
- boot_desc->type[0] = 0;
-@@ -285,7 +295,7 @@
- */
- memset(&valid_desc, 0, sizeof (valid_desc));
- valid_desc.headerid[0] = 1;
-- valid_desc.arch[0] = EL_TORITO_ARCH_x86;
-+ valid_desc.arch[0] = def_platid;
-
- /*
- * we'll shove start of publisher id into id field,
-@@ -324,13 +334,65 @@
- comerrno(EX_BAD,
- "Too many El Torito boot entries\n");
- }
-- fill_boot_desc(&boot_desc_record, current_boot_entry);
-- memcpy(de2->table + offset, &boot_desc_record,
-- sizeof (boot_desc_record));
-+ if (current_boot_entry->type != ELTORITO_SECTION_HEADER) {
-+
-+ fill_boot_desc(&boot_desc_record, current_boot_entry);
-+ memcpy(de2->table + offset, &boot_desc_record,
-+ sizeof (boot_desc_record));
-+ }
-+ if (current_boot_entry->type == ELTORITO_SECTION_HEADER) {
-+ if (last_section_header) {
-+ /* XXX - If no entries, that's an error */
-+ set_721(&last_section_header->entry_count, nentries);
-+ }
-+ nentries = 0;
-+ last_section_header = (struct eltorito_sectionheader_entry *)(de2->table + offset);
-+ fill_boot_shdr(&boot_shdr_record, current_boot_entry);
-+ memcpy(de2->table + offset, &boot_shdr_record,
-+ sizeof (boot_shdr_record));
-+ } else {
-+ /*
-+ * if there was a section header processed, add this
-+ * as a section entry
-+ */
-+ if (last_section_header) {
-+ nentries++;
-+ /*
-+ * This works because a section entry has the same essential
-+ * layout as a default entry (and we do not populate the
-+ * selection criteria fields).
-+ */
-+ fill_boot_desc((struct eltorito_defaultboot_entry *)&boot_section_record,
-+ current_boot_entry);
-+ memcpy(de2->table + offset, &boot_section_record,
-+ sizeof (boot_section_record));
-+ } else {
-+ fill_boot_desc(&boot_desc_record, current_boot_entry);
-+ memcpy(de2->table + offset, &boot_desc_record,
-+ sizeof (boot_desc_record));
-+ }
-+ }
- }
-+
-+ if (last_section_header) {
-+ /* XXX - If no entries, that's an error */
-+ set_721(&last_section_header->entry_count, nentries);
-+ last_section_header->flags[0] = ELTORITO_SHDR_FLAG_LAST_SHDR;
-+ }
-+
- } /* get_torito_desc(... */
-
- LOCAL void
-+fill_boot_shdr(boot_shdr_entry, boot_entry)
-+ struct eltorito_sectionheader_entry *boot_shdr_entry;
-+ struct eltorito_boot_entry_info *boot_entry;
-+{
-+ memset(boot_shdr_entry, 0, sizeof(struct eltorito_sectionheader_entry));
-+ boot_shdr_entry->flags[0] = ELTORITO_SHDR_FLAG_SHDR;
-+ boot_shdr_entry->platform_id[0] = boot_entry->boot_platid;
-+}
-+
-+LOCAL void
- fill_boot_desc(boot_desc_entry, boot_entry)
- struct eltorito_defaultboot_entry *boot_desc_entry;
- struct eltorito_boot_entry_info *boot_entry;
-@@ -341,7 +403,7 @@
- int nsectors;
- int geosec;
-
-- if (!boot_desc_entry || !boot_entry)
-+ if (!boot_desc_entry || !boot_entry || !boot_entry->boot_image)
- return;
-
- /* now adjust boot catalog lets find boot image first */
--- a/components/cdrtools/patches/iso9660.h.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
---- cdrtools-3.00/mkisofs/iso9660.h.orig Tue Jun 28 15:30:50 2011
-+++ cdrtools-3.00/mkisofs/iso9660.h Tue Jun 28 15:32:46 2011
-@@ -169,6 +169,29 @@
- char pad2 [ISODCL(13, 32)];
- };
-
-+/* El Torito section header entry in boot catalog */
-+struct eltorito_sectionheader_entry {
-+ char flags [ISODCL(1, 1)]; /* 711 */
-+#define ELTORITO_SHDR_FLAG_SHDR 0x90
-+#define ELTORITO_SHDR_FLAG_LAST_SHDR 0x91
-+ char platform_id [ISODCL(2, 2)];
-+ char entry_count [ISODCL(3, 4)]; /* 711 */
-+ char id [ISODCL(5, 32)];
-+};
-+
-+/* El Torito initial/default entry in boot catalog */
-+struct eltorito_section_entry {
-+ char boot_id [ISODCL(1, 1)]; /* 711 */
-+ char boot_media [ISODCL(2, 2)];
-+ char loadseg [ISODCL(3, 4)]; /* 711 */
-+ char sys_type [ISODCL(5, 5)];
-+ char pad1 [ISODCL(6, 6)];
-+ char nsect [ISODCL(7, 8)];
-+ char bootoff [ISODCL(9, 12)];
-+ char sel_criteria [ISODCL(13, 13)];
-+ char vendor_sel_criteria [ISODCL(14, 32)];
-+};
-+
- /*
- * XXX JS: The next two structures have odd lengths!
- * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length.
--- a/components/cdrtools/patches/mkisofs.8.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
---- cdrtools-3.00/mkisofs/mkisofs.8.orig Tue Jun 28 15:30:57 2011
-+++ cdrtools-3.00/mkisofs/mkisofs.8 Tue Jun 28 15:32:46 2011
-@@ -328,6 +328,10 @@
- for zero sized files.
- .TP
- .BI \-b " eltorito_boot_image
-+.sp
-+or
-+.TP
-+.BI \-eltorito\-boot " 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
-@@ -347,6 +351,13 @@
- If the system should not boot off the emulated disk, use
- .BR \-no\-boot .
- .sp
-+More than one boot entry may be specified, see
-+.B \-eltorito\-platform
-+and
-+.B \-eltorito\-alt\-boot
-+on how to specify more boot entries. The first boot entry is the default boot
-+entry. Additional boot entries are members for a multi boot configuration.
-+.sp
- If the
- .B \-sort
- option has not been specified, the boot images are sorted
-@@ -357,8 +368,62 @@
- 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.
--
-+.sp
-+The
-+.B \-eltorito\-alt\-boot
-+option starts a new boot entry with the same platform id but no new boot
-+section except when it appears past the first boot entry which is the default
-+boot entry.
- .TP
-+.BI \-eltorito\-platform " id
-+Set the "El Torito" platform id for a boot record or a section of
-+boot records. The
-+.I id
-+parameter may be either:
-+.RS
-+.TP
-+.B x86
-+This is the default platform id value and specifies entries for the
-+PC platform. If no
-+.B \-eltorito\-platform
-+option appears before the first
-+.B \-eltorito\-boot
-+option, the default boot entry becomes an entry for the x86 PC platform.
-+.TP
-+.B PPC
-+Boot entries for the Power PC platform.
-+.TP
-+.B Mac
-+Boot entries for the Apple Mac platform.
-+.TP
-+.B efi
-+Boot entries for EFI based PCs.
-+.TP
-+# A numeric value specifying any platform id.
-+.LP
-+If the option
-+.B \-eltorito\-platform
-+appears before the first
-+.B \-eltorito\-boot option,
-+it sets the platform
-+.I id
-+for the default boot entry.
-+.LP
-+If the option
-+.B \-eltorito\-platform
-+appears after an
-+.B \-eltorito\-boot
-+option and sets the platform
-+.I id
-+to a value different from the previous value, it starts a new set of boot
-+entries.
-+.LP
-+The second boot entry and any new platform
-+.I id
-+create a new section header and reduces the number of boot entries per CD by
-+one.
-+.RE
-+.TP
- .BI errctl= " name
- .TP
- .BI errctl= " error control spec
-@@ -1211,6 +1276,69 @@
- least 37 characters, disks created with this option may cause a buffer
- overflow in the reading operating system. Use with extreme care.
- .TP
-+.BI \-modification\-date " date-spec
-+Set the
-+.B modification date
-+in the primary volume descriptor (PVD) to a value different from the current
-+time. This allows, for example, to set up an intentional UUID for GRUB.
-+.sp
-+.ne 3
-+The format of
-+.I date-spec
-+is:
-+.sp
-+.nf
-+ \fIyyyy\fR[\fImm\fR[\fIdd\fR[\fIhh\fR[\fImm\fR[\fIss\fR]\|]\|]\|]\|][.\fIhh\fR][+-\fIghgm\fR]
-+.fi
-+.sp
-+The fields are
-+.BR year ,
-+.BR month ,
-+.BR "day of month" ,
-+.BR hour ,
-+.BR minute ,
-+.BR second ,
-+.BR "hundreds of a second" ,
-+.BR "GMT offset in hours and minutes" .
-+The time is interpreted as local time.
-+.sp
-+Year and the GMT offset are four digit fields, all other fields take two digits.
-+The GMT offset may be between -12 and +13 hours in 15 minute steps. Locations
-+east to Greenwich have positive values. The value is the sum of the time zone
-+offset and the effects from daylight saving time. Omitted values are replaced
-+by the minimal possible values. If the GMT offset is omitted, it is computed
-+from the local time value that has been supplied.
-+.sp
-+Between
-+.BR year
-+and
-+.BR month
-+as well as between
-+.BR month
-+and
-+.BR "day of month" ,
-+a separator chosen from '/' and '-' may appear. In this case, the year may
-+be a two digit number with values 69..99 representing 1969..1999 and
-+values 00..68 representing 2000..2068. Between date and time spec, an
-+optional space is permitted. Between
-+.BR hour
-+and
-+.BR minute
-+as well as between
-+.BR minute
-+and
-+.BR second ,
-+an optional ':' separator is permitted. This allows mkisofs
-+to parse the popular POSIX date format created by:
-+.sp
-+.nf
-+ \fBdate "+%Y-%m-%d %H:%M:%S %z"\fR
-+.fi
-+.sp
-+Note that the possible range for
-+.B date-spec
-+for 32 bit programs is limited to values up to 2038 Jan 19 04:14:07 GMT.
-+.TP
- .BI \-M " path
- or
- .TP
--- a/components/cdrtools/patches/mkisofs.c.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,422 +0,0 @@
---- cdrtools-3.00/mkisofs/mkisofs.c.orig Tue Jun 28 15:31:06 2011
-+++ cdrtools-3.00/mkisofs/mkisofs.c Tue Jun 28 15:32:46 2011
-@@ -66,7 +66,7 @@
- struct directory *root = NULL;
- int path_ind;
-
--char version_string[] = VERSION;
-+char version_string[] = VERSION "+eltorito-platform";
-
- char *outfile;
- FILE *discimage;
-@@ -110,6 +110,8 @@
- int osecsize = 0; /* Output-sector size, 0 means default secsize 2048 */
- int use_Joliet = 0;
- int jlen = JMAX; /* maximum Joliet file name length */
-+
-+int def_platid = EL_TORITO_ARCH_x86;
- /*
- * Verbose levels currently used:
- *
-@@ -182,6 +184,7 @@
- int help; /* CLI Parameter for -help option */
- int joliet_long; /* CLI Parameter for -joliet-long option */
- char *jcharset; /* CLI Parameter for -jcharset option */
-+char *modification_date; /* CLI Parameter for -modification-date */
- int max_filenames; /* CLI Parameter for -max-iso9660-filenames option */
- char *log_file; /* CLI Parameter for -log-file option */
- char *dir_mode_str; /* CLI Parameter for -new-dir-mode option */
-@@ -446,7 +449,374 @@
- return (1);
- }
-
-+#define IS_SEPARATOR1(c) (c == '/' || c == '-')
-+
-+LOCAL boolean_t
-+isalldigits(char *p, int n)
-+{
-+ int i;
-+ if (p == NULL)
-+ return (B_FALSE);
-+ for (i = 0; i < n; i++) {
-+ if (p[i] == 0)
-+ return (B_FALSE);
-+ if ((p[i] < '0') || (p[i] > '9'))
-+ return (B_FALSE);
-+ }
-+ return (B_TRUE);
-+}
-+
-+LOCAL char *
-+findnextsep(char *p, char *matches)
-+{
-+ char *mp;
-+ while (*p) {
-+ if (matches == NULL) {
-+ if ((*p < '0') || (*p > '9'))
-+ return (p);
-+ } else {
-+ mp = matches;
-+ while (*mp) {
-+ if (*mp == *p)
-+ return (p);
-+ mp++;
-+ }
-+ }
-+ p++;
-+ }
-+ if (*p == NULL)
-+ return (NULL);
-+ return (p);
-+}
-+
-+LOCAL boolean_t
-+check_n_get_val(char *s, int n, long *val, int checklower, long lower,
-+int checkupper, long upper)
-+{
-+ char c;
-+ long l;
-+
-+ if (isalldigits(s, n) != B_TRUE)
-+ return (B_FALSE);
-+
-+ if (n > 20)
-+ return (B_FALSE);
-+
-+ c = *(s+n);
-+ *(s + n) = 0;
-+
-+ errno = 0;
-+ l = strtol(s, NULL, 10);
-+
-+ *(s+n) = c;
-+
-+ if (errno)
-+ return (B_FALSE);
-+
-+ if (val != NULL)
-+ *val = l;
-+
-+ if (checklower)
-+ if (l < lower)
-+ return (B_FALSE);
-+ if (checkupper)
-+ if (l > upper)
-+ return (B_FALSE);
-+
-+ return (B_TRUE);
-+}
-+
- LOCAL int
-+get_gmt()
-+{
-+ time_t now;
-+ struct tm gmt, *gmp, *localp, localt;
-+ time_t gmtoffsetsec = 0;
-+
-+ now = time(NULL);
-+ if (now == -1)
-+ comerrno(EX_BAD, "time failed internal error\n");
-+
-+ localp = localtime(&now);
-+ if (localp == NULL)
-+ comerrno(EX_BAD, "localtime failed internal error\n");
-+
-+ localt = *localp;
-+
-+ gmp = gmtime(&now);
-+ if (gmp == NULL)
-+ comerrno(EX_BAD, "gmtime failed internal error\n");
-+
-+ gmt = *gmp;
-+
-+ gmtoffsetsec = mktime(&localt) - mktime(&gmt);
-+
-+ return ((int)(gmtoffsetsec /(60 * 15)));
-+}
-+
-+
-+
-+char modbuf[18];
-+LOCAL int
-+get_modification_date(opt_arg)
-+ char *opt_arg;
-+{
-+ int len;
-+ char *optp = opt_arg;
-+ char *dotp = NULL;
-+ char *signp = NULL;
-+ char *bufp = modbuf;
-+ char *tmpp = NULL;
-+ char *default_mod = "00010101000000000";
-+ char tmpstr[5];
-+ int gmtset = 0;
-+
-+ strncpy(modbuf, default_mod, 17);
-+ modbuf[17] = 0;
-+
-+
-+ len = strlen(opt_arg);
-+
-+ /* first find the gmt */
-+ tmpp = strrchr(optp, '+');
-+
-+ if (tmpp != NULL || ((tmpp = strrchr(optp, '-')) != NULL)) {
-+ /* it has to be the last 4 digits */
-+ if ((tmpp - optp) != (len - 5)) {
-+ if (*tmpp == '+')
-+ comerrno(EX_BAD, "Bad modification date\n");
-+ /* if '-' take it as a separator */
-+ } else {
-+ long gh, gm, val;
-+ if (check_n_get_val(tmpp + 1, 2, &gh, 0, 0, 0, 0)
-+ != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:gh\n");
-+
-+ if (check_n_get_val(tmpp + 3, 2, &gm, 0, 0, 0, 0)
-+ != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:gm\n");
-+
-+ val = (((gh * 60) + gm) / 15) *
-+ ((*tmpp == '-') ? -1 : 1);
-+
-+
-+ if (val < -48 || val > 52)
-+ comerrno(EX_BAD, "Bad modification date:"
-+ " gmt offset\n");
-+ modbuf[16] = val;
-+ gmtset = 1;
-+
-+ /* get rid of gmt in input str, we are done with it */
-+ *tmpp = 0;
-+ }
-+ }
-+ if (gmtset == 0) {
-+ modbuf[16] = get_gmt();
-+ }
-+
-+ len = strlen(optp);
-+
-+ if ((tmpp = strrchr(optp, '.')) != NULL) {
-+
-+ if ((tmpp - optp) != (len - 3)) {
-+ comerrno(EX_BAD, "Bad modification date:hundredth "
-+ "of sec\n");
-+ }
-+
-+ if (check_n_get_val(tmpp + 1, 2, NULL, 0, 0, 0, 0) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:hundredth of"
-+ " second length\n");
-+
-+ /* since all digits, can not be > 99 */
-+ modbuf[14] = *(tmpp + 1);
-+ modbuf[15] = *(tmpp + 2);
-+
-+ /* get rid of hh in input str, we are done with it */
-+ *tmpp = 0;
-+ }
-+
-+ tmpp = findnextsep(optp, "/-");
-+
-+ if (tmpp) {
-+ if (tmpp - optp == 2) {
-+ long year;
-+ /* 2 digit year YY- */
-+ if (check_n_get_val(optp, 2, &year, 0, 0, 0, 0)
-+ != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:year"
-+ "length \n");
-+ /* 69-99 1969-1999, 00-68 2000 to 2068 */
-+ if (year > 68)
-+ strncpy(bufp, "19", 2);
-+ else
-+ strncpy(bufp, "20", 2);
-+ bufp += 2;
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp = tmpp + 1;
-+
-+ } else if (tmpp - optp == 4) {
-+ long year;
-+
-+ /* 4 digit year YYYY- */
-+ if (check_n_get_val(optp, 4, &year, 1, 1, 0, 0)
-+ != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:"
-+ "year\n");
-+ strncpy(bufp, optp, 4);
-+ bufp += 4;
-+ optp = tmpp + 1;
-+
-+ } else if (tmpp - optp == 6) {
-+ /* YYYYMM- */
-+ long year;
-+ if (isalldigits(optp, 6) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: "
-+ "year\n");
-+
-+ if (check_n_get_val(optp, 4, &year, 1, 1, 0, 0)
-+ != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: year "
-+ "length\n");
-+
-+ strncpy(bufp, optp, 4);
-+ optp = optp + 4;
-+ bufp += 4;
-+ } else
-+ comerrno(EX_BAD, "Bad modification date\n");
-+
-+ } else /* tmpp == NULL */ {
-+ /* YYYY[MM[DD.... */
-+ long year;
-+
-+ if (check_n_get_val(optp, 4, &year, 1, 1, 0, 0) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date year:length\n");
-+
-+ strncpy(bufp, optp, 4);
-+ bufp += 4;
-+ optp += 4;
-+ }
-+
-+ if (*optp) {
-+ long month;
-+ /* optp should point to MM */
-+ if (check_n_get_val(optp, 2, &month, 1, 1, 1, 12) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date:month\n");
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp += 2;
-+ }
-+ if ((*optp) && (IS_SEPARATOR1(*optp)))
-+ optp++;
-+
-+ if (*optp) {
-+ long day;
-+
-+ if (check_n_get_val(optp, 2, &day, 1, 1, 1, 31) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: day\n");
-+ /* DD */
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp += 2;
-+ }
-+
-+ if (*optp == ' ')
-+ optp++;
-+
-+ if (*optp) {
-+ long hour;
-+ if (check_n_get_val(optp, 2, &hour, 0, 0, 1, 23) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: hour\n");
-+
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp += 2;
-+ }
-+
-+ if (*optp == ':')
-+ optp++;
-+
-+ if (*optp) {
-+ long min;
-+ if (check_n_get_val(optp, 2, &min, 0, 0, 1, 59) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: minute\n");
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp += 2;
-+ }
-+
-+ if (*optp == ':')
-+ optp++;
-+
-+ if (*optp) {
-+ long sec;
-+ if (check_n_get_val(optp, 2, &sec, 0, 0, 1, 59) != B_TRUE)
-+ comerrno(EX_BAD, "Bad modification date: second\n");
-+ strncpy(bufp, optp, 2);
-+ bufp += 2;
-+ optp += 2;
-+ }
-+
-+ if (*optp == ' ')
-+ /* optional space */
-+ optp++;
-+
-+ if (*optp != 0) {
-+ comerrno(EX_BAD, "Bad modification date: extra \n");
-+ }
-+
-+ modification_date = modbuf;
-+ return (1);
-+
-+}
-+
-+
-+LOCAL int
-+get_boot_platid(opt_arg)
-+ char *opt_arg;
-+{
-+ long val;
-+ char *ptr;
-+
-+ use_eltorito++;
-+
-+ if (strcmp(opt_arg, "x86") == 0)
-+ val = 0;
-+ else if (strcmp(opt_arg, "PPC") == 0)
-+ val = 1;
-+ else if (strcmp(opt_arg, "Mac") == 0)
-+ val = 2;
-+ else if (strcmp(opt_arg, "efi") == 0)
-+ val = 0xEF;
-+ else {
-+ val = strtol(opt_arg, &ptr, 0);
-+ if (*ptr || val < 0 || val >= 0x100) {
-+ comerrno(EX_BAD, "Bad boot system ID.\n");
-+ }
-+ }
-+
-+ if (boot_image == NULL) {
-+ /* called before -eltorito-boot option */
-+ def_platid = val;
-+ return (1);
-+
-+ }
-+
-+ if (val != def_platid) {
-+ new_boot_entry();
-+ get_boot_entry();
-+ }
-+
-+ if (current_boot_entry == NULL)
-+ comerrno(EX_BAD, "No current boot entry.\n");
-+
-+ current_boot_entry->type = ELTORITO_SECTION_HEADER;
-+ current_boot_entry->boot_platid = val;
-+
-+ return (1);
-+}
-+
-+LOCAL int
- get_boot_size(opt_arg)
- char *opt_arg;
- {
-@@ -840,7 +1210,8 @@
- "Allow full 31 character filenames for ISO9660 names"},
- {{"max-iso9660-filenames", &max_filenames },
- "Allow 37 character filenames for ISO9660 names (violates ISO9660)"},
--
-+ {{"modification-date&", NULL, (getpargfun)get_modification_date},
-+ "\1[string]\1Set the modification date in the primary volume descriptor"},
- {{"allow-leading-dots", &allow_leading_dots },
- "Allow ISO9660 filenames to start with '.' (violates ISO9660)"},
- {{"ldots", &allow_leading_dots },
-@@ -968,6 +1339,8 @@
- "Boot image is 'no emulation' image"},
- {{"no-boot~", NULL, (getpargfun)get_no_boot },
- "Boot image is not bootable"},
-+ {{"eltorito-platform&", NULL, (getpargfun)get_boot_platid },
-+ "\1#\1Set eltorito platform id"},
- {{"boot-load-seg&", NULL, (getpargfun)get_boot_addr },
- "\1#\1Set load segment for boot image"},
- {{"boot-load-size&", NULL, (getpargfun)get_boot_size },
--- a/components/cdrtools/patches/mkisofs.h.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
---- cdrtools-3.00/mkisofs/mkisofs.h.orig Tue Jun 28 15:31:14 2011
-+++ cdrtools-3.00/mkisofs/mkisofs.h Tue Jun 28 15:32:46 2011
-@@ -287,6 +287,10 @@
-
- struct eltorito_boot_entry_info {
- struct eltorito_boot_entry_info *next;
-+ int type;
-+#define ELTORITO_DEFAULT_ENTRY 0
-+#define ELTORITO_SECTION_HEADER 1
-+
- char *boot_image;
- int not_bootable;
- int no_emul_boot;
-@@ -294,6 +298,10 @@
- int boot_info_table;
- int load_size;
- int load_addr;
-+
-+/* When type == ELTORITO_SECTION_HEADER */
-+ int boot_platid;
-+
- };
-
- extern int goof;
--- a/components/cdrtools/patches/write.c.patch Wed Mar 12 10:08:26 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-# This patch is made from a diff of versions 3.00 and 3.01a01.
-
---- cdrtools-3.00/mkisofs/write.c.orig 2012-11-01 01:25:32.964412979 -0700
-+++ cdrtools-3.00/mkisofs/write.c 2012-11-01 01:25:47.946345028 -0700
-@@ -1005,9 +1005,25 @@
- for (i = 0, dwpnt = dw_head; i < num; i++, dwpnt = dwpnt->next) {
- s_entry = dwpnt->s_entry;
- dwpnt->extent = s_entry->starting_block = start_extent;
-- set_733((char *)s_entry->isorec.extent, start_extent);
-
-- start_extent += ISO_BLOCKS(s_entry->size);
-+ if (s_entry->de_flags & MULTI_EXTENT) {
-+ struct directory_entry *s_e;
-+
-+ s_entry->mxroot->starting_block = start_extent;
-+ set_733((char *)s_entry->mxroot->isorec.extent,
-+ start_extent);
-+ for (s_e = s_entry;
-+ s_e && s_e->mxroot == s_entry->mxroot;
-+ s_e = s_e->next) {
-+ set_733((char *)s_e->isorec.extent,
-+ start_extent);
-+ s_entry->starting_block = start_extent;
-+ start_extent += ISO_BLOCKS(s_e->size);
-+ }
-+ } else {
-+ set_733((char *)s_entry->isorec.extent, start_extent);
-+ start_extent += ISO_BLOCKS(s_entry->size);
-+ }
- #ifdef DVD_VIDEO
- /*
- * Shouldn't this be done for every type of sort? Otherwise
-@@ -1978,6 +1994,7 @@
- int i;
- int s;
- Uchar *cp;
-+ extern char *modification_date;
-
-
- time(&begun);
-@@ -2079,7 +2096,11 @@
- FILL_SPACE(application_data);
-
- memcpy(vol_desc.creation_date, iso_time, 17);
-- memcpy(vol_desc.modification_date, iso_time, 17);
-+ if (modification_date == NULL) {
-+ memcpy(vol_desc.modification_date, iso_time, 17);
-+ } else {
-+ memcpy(vol_desc.modification_date, modification_date, 17);
-+ }
- memcpy(vol_desc.expiration_date, "0000000000000000", 17);
- memcpy(vol_desc.effective_date, iso_time, 17);
-