18165754 Upgrade cdrtools to 3.01a22
authorVladimir Marek <Vladimir.Marek@oracle.com>
Fri, 31 Jan 2014 12:14:34 +0100
changeset 1695 983495f058ad
parent 1694 a9247976d914
child 1696 62660898c6d6
18165754 Upgrade cdrtools to 3.01a22 15813303 SUNBT7195261 mkisofs picks wrong charset file definition
components/cdrtools/Makefile
components/cdrtools/cdrtools.p5m
components/cdrtools/patches/Defaults.sunos5.patch
components/cdrtools/patches/eltorito.c.patch
components/cdrtools/patches/iso9660.h.patch
components/cdrtools/patches/mkisofs.8.patch
components/cdrtools/patches/mkisofs.c.patch
components/cdrtools/patches/mkisofs.h.patch
components/cdrtools/patches/write.c.patch
--- a/components/cdrtools/Makefile	Thu Feb 06 05:51:06 2014 -0800
+++ b/components/cdrtools/Makefile	Fri Jan 31 12:14:34 2014 +0100
@@ -18,19 +18,21 @@
 #
 # 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.
 #
 
 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
--- a/components/cdrtools/cdrtools.p5m	Thu Feb 06 05:51:06 2014 -0800
+++ b/components/cdrtools/cdrtools.p5m	Fri Jan 31 12:14:34 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/[email protected]$(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 \
--- a/components/cdrtools/patches/Defaults.sunos5.patch	Thu Feb 06 05:51:06 2014 -0800
+++ b/components/cdrtools/patches/Defaults.sunos5.patch	Fri Jan 31 12:14:34 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
[email protected]@ -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
[email protected]@ -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 @@
  
  ###########################################################################
  #
[email protected]@ -38,7 +38,7 @@
  # Installation config stuff
  #
  ###########################################################################
--- a/components/cdrtools/patches/eltorito.c.patch	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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));
[email protected]@ -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");
[email protected]@ -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;
[email protected]@ -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,
[email protected]@ -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;
[email protected]@ -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	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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
[email protected]@ -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
[email protected]@ -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
[email protected]@ -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	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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;
[email protected]@ -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:
-  *
[email protected]@ -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   */
[email protected]@ -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;
- {
[email protected]@ -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 },
[email protected]@ -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	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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;
[email protected]@ -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	Thu Feb 06 05:51:06 2014 -0800
+++ /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
[email protected]@ -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
[email protected]@ -1978,6 +1994,7 @@
- 	int		i;
- 	int		s;
- 	Uchar		*cp;
-+	extern		char *modification_date;
- 
- 
- 	time(&begun);
[email protected]@ -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);
-