summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Weiler <pylon@gentoo.org>2006-10-28 10:59:51 +0000
committerLars Weiler <pylon@gentoo.org>2006-10-28 10:59:51 +0000
commitdd6170c428a43803c9ba1a45ca4f4106b95368da (patch)
tree0e6e8914163e5b244d1a2483ec8eacfa5727b9f6 /app-cdr
parentx86 stable wrt bug #151290 (diff)
downloadgentoo-2-dd6170c428a43803c9ba1a45ca4f4106b95368da.tar.gz
gentoo-2-dd6170c428a43803c9ba1a45ca4f4106b95368da.tar.bz2
gentoo-2-dd6170c428a43803c9ba1a45ca4f4106b95368da.zip
Version bump.
(Portage version: 2.1.2_rc1)
Diffstat (limited to 'app-cdr')
-rw-r--r--app-cdr/cdrtools/ChangeLog9
-rw-r--r--app-cdr/cdrtools/cdrtools-2.01.01_alpha18.ebuild122
-rw-r--r--app-cdr/cdrtools/files/cdrtools-2.01.01a18-rezero.patch12
-rw-r--r--app-cdr/cdrtools/files/digest-cdrtools-2.01.01_alpha183
-rw-r--r--app-cdr/cdrtools/files/mkisofs-iconv-18.patch526
5 files changed, 671 insertions, 1 deletions
diff --git a/app-cdr/cdrtools/ChangeLog b/app-cdr/cdrtools/ChangeLog
index a479a736e429..e0db18b6ae14 100644
--- a/app-cdr/cdrtools/ChangeLog
+++ b/app-cdr/cdrtools/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for app-cdr/cdrtools
# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-cdr/cdrtools/ChangeLog,v 1.157 2006/10/28 09:02:57 pylon Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-cdr/cdrtools/ChangeLog,v 1.158 2006/10/28 10:59:51 pylon Exp $
+
+*cdrtools-2.01.01_alpha18 (28 Oct 2006)
+
+ 28 Oct 2006; Lars Weiler <pylon@gentoo.org>
+ +files/cdrtools-2.01.01a18-rezero.patch, +files/mkisofs-iconv-18.patch,
+ +cdrtools-2.01.01_alpha18.ebuild:
+ Version bump.
28 Oct 2006; Lars Weiler <pylon@gentoo.org>
-cdrtools-2.01.01_alpha07.ebuild, -cdrtools-2.01.01_alpha08.ebuild:
diff --git a/app-cdr/cdrtools/cdrtools-2.01.01_alpha18.ebuild b/app-cdr/cdrtools/cdrtools-2.01.01_alpha18.ebuild
new file mode 100644
index 000000000000..0a24ee0f4fe6
--- /dev/null
+++ b/app-cdr/cdrtools/cdrtools-2.01.01_alpha18.ebuild
@@ -0,0 +1,122 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-cdr/cdrtools/cdrtools-2.01.01_alpha18.ebuild,v 1.1 2006/10/28 10:59:51 pylon Exp $
+
+inherit eutils gnuconfig toolchain-funcs flag-o-matic
+
+DESCRIPTION="A set of tools for CD/DVD reading and recording, including cdrecord"
+HOMEPAGE="http://cdrecord.berlios.de/"
+SRC_URI="ftp://ftp.berlios.de/pub/cdrecord/alpha/${P/_alpha/a}.tar.bz2"
+
+LICENSE="GPL-2 LGPL-2.1 CDDL-Schily"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc-macos ~ppc64 ~s390 ~sh ~sparc ~x86"
+IUSE="unicode"
+
+DEPEND="virtual/libc
+ !app-cdr/dvdrtools
+ !app-cdr/cdrkit"
+
+PROVIDE="virtual/cdrtools"
+
+S=${WORKDIR}/${PN}-2.01.01
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ # CAN-2004-0806 - Bug 63187
+ epatch "${FILESDIR}"/${PN}-2.01-scsi-remote.patch
+ epatch "${FILESDIR}"/${PN}-2.01a27-writemode.patch
+ epatch "${FILESDIR}"/${PN}-2.01.01a03-warnings.patch
+ epatch "${FILESDIR}"/${PN}-2.01.01a01-scanbus.patch
+ epatch "${FILESDIR}"/${PN}-2.01.01a18-rezero.patch
+
+ use unicode && epatch "${FILESDIR}"/mkisofs-iconv-18.patch
+
+ # ppc-macos support
+ cd "${S}"/DEFAULTS
+ use ppc-macos && MYARCH="mac-os10" || MYARCH="linux"
+
+ sed -i "s:/opt/schily:/usr:g" Defaults.${MYARCH}
+ sed -i "s:/usr/src/linux/include::g" Defaults.${MYARCH}
+
+ cd "${S}"/librscg
+ sed -i "s:/opt/schily:/usr:g" scsi-remote.c
+
+ cd "${S}"/RULES
+ ln -sf i386-linux-cc.rul x86_64-linux-cc.rul
+ ln -sf i386-linux-gcc.rul x86_64-linux-gcc.rul
+ ln -sf ppc-linux-cc.rul ppc64-linux-cc.rul
+ ln -sf mips-linux-cc.rul mips64-linux-cc.rul
+ ln -sf i586-linux-cc.rul sh4-linux-cc.rul
+}
+
+src_compile() {
+ gnuconfig_update
+
+ if use unicode; then
+ local flags="$(test-flags -finput-charset=ISO-8859-1 -fexec-charset=UTF-8)"
+ if [[ -n ${flags} ]]; then
+ append-flags ${flags}
+ else
+ ewarn "Your compiler does not support the options required to build"
+ ewarn "cdrtools with unicode in USE. unicode flag will be ignored."
+ fi
+ fi
+ emake CC="$(tc-getCC) -D__attribute_const__=const" COPTX="${CFLAGS}" CPPOPTX="${CPPFLAGS}" LDOPTX="${LDFLAGS}" || die
+}
+
+src_install() {
+ dobin cdda2wav/OBJ/*-*-cc/cdda2wav || die "cdda2wav"
+ dobin cdrecord/OBJ/*-*-cc/cdrecord || die "cdrecord"
+ dobin mkisofs/OBJ/*-*-cc/mkisofs || die "mkisofs"
+ dobin readcd/OBJ/*-*-cc/readcd || die "readcd"
+ dosbin rscsi/OBJ/*-*-cc/rscsi || die "rscsi"
+
+ insinto /usr/include
+ doins incs/*-*-cc/align.h incs/*-*-cc/avoffset.h incs/*-*-cc/xconfig.h || die "include"
+
+ cd mkisofs/diag/OBJ/*-*-cc
+ dobin devdump isodump isoinfo isovfy || die "dobin"
+
+ cd "${S}"
+ insinto /etc/default
+ doins rscsi/rscsi.dfl
+ doins cdrecord/cdrecord.dfl
+
+ cd "${S}"/libs/*-*-cc
+ dolib.a *.a || die "dolib failed"
+
+ cd "${S}"
+ insinto /usr/include/scsilib
+ doins include/*.h
+ insinto /usr/include/scsilib/scg
+ doins include/scg/*.h
+
+ cd "${S}"
+ dodoc ABOUT Changelog README README.{ATAPI,audio,cdplus,cdrw,cdtext,clone,copy,DiskT@2,linux-shm,multi,parallel,raw,rscsi,sony,verify} START READMEs/README.linux
+ doman */*.1
+ doman */*.8
+
+ cd "${S}"/doc
+ docinto print
+ dodoc *.ps
+}
+
+pkg_postinst() {
+ if use ppc-macos ; then
+ einfo
+ einfo "Darwin/OS X use the following device names:"
+ einfo
+ einfo "CD burners: (probably) ./cdrecord dev=IOCompactDiscServices"
+ einfo
+ einfo "DVD burners: (probably) ./cdrecord dev=IODVDServices"
+ einfo
+ else
+ echo
+ einfo "The command line option 'dev=/dev/hdX' (X is the name of your drive)"
+ einfo "should be used for IDE CD writers. And make sure that the permissions"
+ einfo "on this device are set properly and your user is in the correct group."
+ fi
+}
diff --git a/app-cdr/cdrtools/files/cdrtools-2.01.01a18-rezero.patch b/app-cdr/cdrtools/files/cdrtools-2.01.01a18-rezero.patch
new file mode 100644
index 000000000000..9dcbb17aedcd
--- /dev/null
+++ b/app-cdr/cdrtools/files/cdrtools-2.01.01a18-rezero.patch
@@ -0,0 +1,12 @@
+--- cdrtools-2.01.01/cdrecord/cdrecord.c 2006-10-28 11:11:33.000000000 +0200
++++ cdrtools-2.01.01/cdrecord/cdrecord.c.rezero 2006-10-28 11:10:43.000000000 +0200
+@@ -4042,7 +4042,8 @@
+ scsi_start_stop_unit(scgp, 1, 0, immed);
+ wait_unit_ready(scgp, 120);
+ scgp->silent++;
+- rezero_unit(scgp); /* Is this needed? Not supported by some drives */
++ /* kernel >= 2.6.12 does not like that as user
++ rezero_unit(scgp); Is this needed? Not supported by some drives */
+ scgp->silent--;
+ test_unit_ready(scgp);
+ scsi_start_stop_unit(scgp, 1, 0, immed);
diff --git a/app-cdr/cdrtools/files/digest-cdrtools-2.01.01_alpha18 b/app-cdr/cdrtools/files/digest-cdrtools-2.01.01_alpha18
new file mode 100644
index 000000000000..9b822cfd0dc6
--- /dev/null
+++ b/app-cdr/cdrtools/files/digest-cdrtools-2.01.01_alpha18
@@ -0,0 +1,3 @@
+MD5 a75e0a90fe19cb22f33e092b5c95ea61 cdrtools-2.01.01a18.tar.bz2 1528037
+RMD160 0ed191ed879a9333c116acabef6974f72633b870 cdrtools-2.01.01a18.tar.bz2 1528037
+SHA256 8a600d9806a0a9a852ce3f36231411dd61f34a8f59fe9d4d32b5297ef8210926 cdrtools-2.01.01a18.tar.bz2 1528037
diff --git a/app-cdr/cdrtools/files/mkisofs-iconv-18.patch b/app-cdr/cdrtools/files/mkisofs-iconv-18.patch
new file mode 100644
index 000000000000..020da8f69db2
--- /dev/null
+++ b/app-cdr/cdrtools/files/mkisofs-iconv-18.patch
@@ -0,0 +1,526 @@
+diff -urp cdrtools-2.01.01.orig/include/schily/unls.h cdrtools-2.01.01/include/schily/unls.h
+--- cdrtools-2.01.01.orig/include/schily/unls.h 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/include/schily/unls.h 2006-10-28 11:24:22.000000000 +0200
+@@ -23,6 +23,10 @@
+ #include <schily/mconfig.h>
+ #endif
+
++#ifdef USE_ICONV
++#include <iconv.h>
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -37,6 +41,9 @@ struct unls_table {
+ unsigned char **unls_uni2cs; /* Unicode -> Charset */
+ struct unls_unicode *unls_cs2uni; /* Charset -> Unicode */
+ struct unls_table *unls_next; /* Next table */
++#ifdef USE_ICONV
++ iconv_t iconv_d;
++#endif
+ };
+
+ extern int init_unls __PR((void));
+@@ -48,6 +55,9 @@ extern struct unls_table *load_unls __P
+ extern void unload_unls __PR((struct unls_table *));
+ extern struct unls_table *load_unls_default __PR((void));
+ extern int init_unls_file __PR((char * name));
++#ifdef USE_ICONV
++extern int init_unls_iconv __PR((char * name));
++#endif
+
+ #ifdef __cplusplus
+ }
+Only in cdrtools-2.01.01/include/schily: unls.h.orig
+diff -urp cdrtools-2.01.01.orig/libunls/Targets cdrtools-2.01.01/libunls/Targets
+--- cdrtools-2.01.01.orig/libunls/Targets 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/libunls/Targets 2006-10-28 11:24:22.000000000 +0200
+@@ -39,4 +39,5 @@ CFILES= nls_base.c \
+ nls_cp10029.c \
+ nls_cp10079.c \
+ nls_cp10081.c \
+- nls_file.c
++ nls_file.c \
++ nls_iconv.c
+diff -urp cdrtools-2.01.01.orig/libunls/libunls.mk cdrtools-2.01.01/libunls/libunls.mk
+--- cdrtools-2.01.01.orig/libunls/libunls.mk 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/libunls/libunls.mk 2006-10-28 11:24:22.000000000 +0200
+@@ -8,6 +8,7 @@ include $(SRCROOT)/$(RULESDIR)/rules.to
+ INSDIR= lib
+ TARGETLIB= unls
+ #CPPOPTS += -Istdio
++CPPOPTS += -DUSE_ICONV
+ include Targets
+ LIBS=
+
+diff -urp cdrtools-2.01.01.orig/libunls/nls.h cdrtools-2.01.01/libunls/nls.h
+--- cdrtools-2.01.01.orig/libunls/nls.h 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/libunls/nls.h 2006-10-28 11:24:22.000000000 +0200
+@@ -110,5 +110,8 @@ extern int init_unls_cp10029 __PR((void)
+ extern int init_unls_cp10079 __PR((void));
+ extern int init_unls_cp10081 __PR((void));
+ extern int init_unls_file __PR((char * name));
++#ifdef USE_ICONV
++extern int init_unls_iconv __PR((char * name));
++#endif
+
+ #endif /* _NLS_H */
+Only in cdrtools-2.01.01/libunls: nls_iconv.c
+diff -urp cdrtools-2.01.01.orig/mkisofs/Makefile cdrtools-2.01.01/mkisofs/Makefile
+--- cdrtools-2.01.01.orig/mkisofs/Makefile 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/mkisofs/Makefile 2006-10-28 11:24:22.000000000 +0200
+@@ -33,6 +33,7 @@ CPPOPTS += -DAPPLE_HYB
+ CPPOPTS += -DUDF
+ CPPOPTS += -DDVD_VIDEO
+ CPPOPTS += -DSORTING
++CPPOPTS += -DUSE_ICONV
+ CPPOPTS += -I../libhfs_iso/
+ CPPOPTS += -DUSE_SCG \
+ '-DAPPID_DEFAULT="MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"' \
+Only in cdrtools-2.01.01/mkisofs: Makefile.orig
+diff -urp cdrtools-2.01.01.orig/mkisofs/joliet.c cdrtools-2.01.01/mkisofs/joliet.c
+--- cdrtools-2.01.01.orig/mkisofs/joliet.c 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/mkisofs/joliet.c 2006-10-28 11:24:22.000000000 +0200
+@@ -90,6 +90,11 @@ static char sccsid[] =
+ #include <schily/unls.h> /* For UNICODE translation */
+ #include <schily/schily.h>
+
++#ifdef USE_ICONV
++#include <iconv.h>
++#include <errno.h>
++#endif
++
+ static Uint jpath_table_index;
+ static struct directory **jpathlist;
+ static int next_jpath_index = 1;
+@@ -103,13 +108,23 @@ static char ucs_codes[] = {
+ };
+
+ #ifdef UDF
+- void convert_to_unicode __PR((unsigned char *buffer,
++# ifdef USE_ICONV
++ size_t
++# else
++ void
++# endif
++ convert_to_unicode __PR((unsigned char *buffer,
+ int size, char *source, struct unls_table *inls));
+- int joliet_strlen __PR((const char *string));
++ int joliet_strlen __PR((const char *string, struct unls_table *inls));
+ #else
+-static void convert_to_unicode __PR((unsigned char *buffer,
++# ifdef USE_ICONV
++ static size_t
++# else
++ static void
++#endif
++ convert_to_unicode __PR((unsigned char *buffer,
+ int size, char *source, struct unls_table *inls));
+-static int joliet_strlen __PR((const char *string));
++static int joliet_strlen __PR((const char *string, struct unls_table *inls));
+ #endif
+ static void get_joliet_vol_desc __PR((struct iso_primary_descriptor *jvol_desc));
+ static void assign_joliet_directory_addresses __PR((struct directory *node));
+@@ -161,6 +176,20 @@ conv_charset(c, inls, onls)
+ if (inls == onls)
+ return (c);
+
++#ifdef USE_ICONV
++ if(inls->unls_cs2uni == NULL || onls->unls_uni2cs == NULL) {
++ /*
++ * This shouldn't be reached
++ */
++ static BOOL iconv_warned = FALSE;
++ if(!iconv_warned) {
++ error("Warning: Iconv conversion not supported in conv_charset.\n");
++ iconv_warned = TRUE;
++ }
++ return (c);
++ }
++#endif
++
+ /* get high and low UNICODE bytes */
+ uh = inls->unls_cs2uni[c].unls_high;
+ ul = inls->unls_cs2uni[c].unls_low;
+@@ -186,10 +215,18 @@ conv_charset(c, inls, onls)
+ *
+ * Notes:
+ */
+-#ifdef UDF
+-void
++#ifdef USE_ICONV
++# if UDF
++size_t
++# else
++static size_t
++# endif
+ #else
++# if UDF
++void
++# else
+ static void
++# endif
+ #endif
+ convert_to_unicode(buffer, size, source, inls)
+ unsigned char *buffer;
+@@ -216,6 +253,51 @@ convert_to_unicode(buffer, size, source,
+ tmpbuf = (Uchar *) source;
+ }
+
++#ifdef USE_ICONV
++ if (inls->iconv_d && inls->unls_cs2uni==NULL &&
++ inls->unls_uni2cs==NULL) {
++ char *inptr = tmpbuf;
++ char *outptr = buffer;
++ size_t inleft = strlen(tmpbuf);
++ size_t inlen = inleft;
++ size_t outleft = size;
++
++ iconv(inls->iconv_d, NULL, NULL, NULL, NULL);
++ if(iconv(inls->iconv_d, &inptr, &inleft, &outptr, &outleft) ==
++ (size_t)-1 && errno == EILSEQ) {
++ fprintf(stderr, "Incorrectly encoded string (%s) "
++ "encountered.\nPossibly creating an invalid "
++ "Joliet extension. Aborting.\n", source);
++ exit(1);
++ }
++
++ for (i = 0; (i + 1) < size - outleft; i += 2) { /* Size may be odd!!!*/
++ if (buffer[i]=='\0') {
++ switch (buffer[i+1]) { /* Invalid characters for Joliet */
++ case '*':
++ case '/':
++ case ':':
++ case ';':
++ case '?':
++ case '\\':
++ buffer[i+1]='_';
++ default:
++ if (buffer[i+1] == 0x7f ||
++ buffer[i+1] < 0x20)
++ buffer[i+1]='_';
++ }
++ }
++ }
++ if (size & 1) { /* beautification */
++ buffer[size - 1] = 0;
++ }
++ if (source == NULL) {
++ free(tmpbuf);
++ }
++ return (inlen - inleft);
++ }
++#endif
++
+ /*
+ * Now start copying characters. If the size was specified to be 0,
+ * then assume the input was 0 terminated.
+@@ -271,6 +353,9 @@ convert_to_unicode(buffer, size, source,
+ if (source == NULL) {
+ free(tmpbuf);
+ }
++#ifdef USE_ICONV
++ return j;
++#endif
+ }
+
+ /*
+@@ -287,12 +372,50 @@ int
+ #else
+ static int
+ #endif
+-joliet_strlen(string)
++joliet_strlen(string, inls)
+ const char *string;
++ struct unls_table *inls;
+ {
+ int rtn;
+
++#ifdef USE_ICONV
++ if (inls->iconv_d && inls->unls_cs2uni==NULL &&
++ inls->unls_uni2cs==NULL) {
++ /*
++ * we const-cast since we're sure iconv won't change
++ * the string itself
++ */
++ char *string_ptr = (char *)string;
++ size_t string_len = strlen(string);
++
++ /*
++ * iconv has no way of finding out the required size
++ * in the target
++ */
++
++ char *tmp, *tmp_ptr;
++ /* we assume that the maximum length is 2 * jlen */
++ size_t tmp_len = (size_t)jlen * 2 + 1;
++ tmp = e_malloc(tmp_len);
++ tmp_ptr = tmp;
++
++ iconv(inls->iconv_d, NULL, NULL, NULL, NULL);
++ iconv(inls->iconv_d, &string_ptr, &string_len, &tmp_ptr,
++ &tmp_len);
++
++ /*
++ * iconv advanced the tmp pointer with as many chars
++ * as it has written to it, so we add up the delta
++ */
++ rtn = (tmp_ptr - tmp);
++
++ free(tmp);
++ } else {
++ rtn = strlen(string) << 1;
++ }
++#else
+ rtn = strlen(string) << 1;
++#endif
+
+ /*
+ * We do clamp the maximum length of a Joliet string to be the
+@@ -481,16 +604,33 @@ joliet_compare_paths(r, l)
+ /* compare the Unicode names */
+
+ while (*rpnt && *lpnt) {
++#ifdef USE_ICONV
++ size_t ri, li;
++
++ ri = convert_to_unicode(rtmp, 2, rpnt, rinls);
++ li = convert_to_unicode(ltmp, 2, lpnt, linls);
++ rpnt += ri;
++ lpnt += li;
++ if(!ri && !li)
++ return (0);
++ else if(ri && !li)
++ return (1);
++ else if(!ri && li)
++ return (-1);
++#else
+ convert_to_unicode(rtmp, 2, rpnt, rinls);
+ convert_to_unicode(ltmp, 2, lpnt, linls);
++#endif
+
+ if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
+ return (-1);
+ if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
+ return (1);
+
++#ifndef USE_ICONV
+ rpnt++;
+ lpnt++;
++#endif
+ }
+
+ if (*rpnt)
+@@ -564,10 +704,10 @@ generate_joliet_path_tables()
+ }
+ #ifdef APPLE_HYB
+ if (USE_MAC_NAME(de))
+- namelen = joliet_strlen(de->hfs_ent->name);
++ namelen = joliet_strlen(de->hfs_ent->name, hfs_inls);
+ else
+ #endif /* APPLE_HYB */
+- namelen = joliet_strlen(de->name);
++ namelen = joliet_strlen(de->name, in_nls);
+
+ if (dpnt == root) {
+ jpath_table_l[jpath_table_index] = 1;
+@@ -712,10 +852,10 @@ generate_one_joliet_directory(dpnt, outf
+ #ifdef APPLE_HYB
+ /* Use the HFS name if it exists */
+ if (USE_MAC_NAME(s_entry1))
+- cvt_len = joliet_strlen(s_entry1->hfs_ent->name);
++ cvt_len = joliet_strlen(s_entry1->hfs_ent->name, hfs_inls);
+ else
+ #endif /* APPLE_HYB */
+- cvt_len = joliet_strlen(s_entry1->name);
++ cvt_len = joliet_strlen(s_entry1->name, in_nls);
+
+ /*
+ * Fix the record length
+@@ -849,12 +989,12 @@ joliet_sort_n_finish(this_dir)
+ if (USE_MAC_NAME(s_entry))
+ /* Use the HFS name if it exists */
+ jpath_table_size +=
+- joliet_strlen(s_entry->hfs_ent->name) +
++ joliet_strlen(s_entry->hfs_ent->name, hfs_inls) +
+ offsetof(struct iso_path_table, name[0]);
+ else
+ #endif /* APPLE_HYB */
+ jpath_table_size +=
+- joliet_strlen(s_entry->name) +
++ joliet_strlen(s_entry->name, in_nls) +
+ offsetof(struct iso_path_table, name[0]);
+ if (jpath_table_size & 1) {
+ jpath_table_size++;
+@@ -876,13 +1016,13 @@ joliet_sort_n_finish(this_dir)
+ /* Use the HFS name if it exists */
+ s_entry->jreclen =
+ offsetof(struct iso_directory_record, name[0])
+- + joliet_strlen(s_entry->hfs_ent->name)
++ + joliet_strlen(s_entry->hfs_ent->name, hfs_inls)
+ + 1;
+ else
+ #endif /* APPLE_HYB */
+ s_entry->jreclen =
+ offsetof(struct iso_directory_record, name[0])
+- + joliet_strlen(s_entry->name)
++ + joliet_strlen(s_entry->name, in_nls)
+ + 1;
+ } else {
+ /*
+@@ -1024,6 +1164,9 @@ joliet_compare_dirs(rr, ll)
+ #endif
+
+ while (*rpnt && *lpnt) {
++#ifdef USE_ICONV
++ size_t ri, li;
++#endif
+ if (*rpnt == ';' && *lpnt != ';')
+ return (-1);
+ if (*rpnt != ';' && *lpnt == ';')
+@@ -1044,16 +1187,32 @@ joliet_compare_dirs(rr, ll)
+ return (1);
+ #endif
+
++#ifdef USE_ICONV
++
++ ri = convert_to_unicode(rtmp, 2, rpnt, rinls);
++ li = convert_to_unicode(ltmp, 2, lpnt, linls);
++ rpnt += ri;
++ lpnt += li;
++ if(!ri && !li)
++ return (0);
++ else if(ri && !li)
++ return (1);
++ else if(!ri && li)
++ return (-1);
++#else
+ convert_to_unicode(rtmp, 2, rpnt, rinls);
+ convert_to_unicode(ltmp, 2, lpnt, linls);
++#endif
+
+ if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
+ return (-1);
+ if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
+ return (1);
+
++#ifndef USE_ICONV
+ rpnt++;
+ lpnt++;
++#endif
+ }
+ if (*rpnt)
+ return (1);
+Only in cdrtools-2.01.01/mkisofs: joliet.c.orig
+diff -urp cdrtools-2.01.01.orig/mkisofs/mkisofs.c cdrtools-2.01.01/mkisofs/mkisofs.c
+--- cdrtools-2.01.01.orig/mkisofs/mkisofs.c 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/mkisofs/mkisofs.c 2006-10-28 11:24:22.000000000 +0200
+@@ -64,6 +64,11 @@ static char sccsid[] =
+ #endif
+ #endif /* no_more_needed */
+
++#ifdef USE_ICONV
++#include <locale.h>
++#include <langinfo.h>
++#endif
++
+ struct directory *root = NULL;
+ int path_ind;
+
+@@ -297,6 +302,10 @@ UInt32_t null_inodes = NULL_INO_MAX;
+ BOOL correct_inodes = TRUE; /* TRUE: add a "correct inodes" fingerprint */
+ BOOL rrip112 = TRUE; /* TRUE: create Rock Ridge V 1.12 */
+
++#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
+@@ -1969,6 +1978,37 @@ args_ok:
+ 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(strcmp(charset, "ANSI_X3.4-1968") != 0)
++ icharset = charset;
++
++ if(icharset && verbose > 0)
++ fprintf(stderr, "INFO:\t"
++ "%s character encoding detected by locale settings."
++ "\n\tAssuming %s encoded filenames on source "
++ "filesystem,\n"
++ "\tuse -input-charset to override.\n",
++ icharset, icharset);
++ }
++
++ if(iconv_possible) {
++ /*
++ * don't care if initialization fails
++ */
++ init_unls_iconv(icharset);
++ init_unls_iconv(ocharset);
++ }
++#endif
++
+ if (icharset == NULL) {
+ #if (defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(__DJGPP__)) && !defined(IS_CYGWIN_1)
+ in_nls = load_unls("cp437");
+@@ -1996,6 +2036,12 @@ args_ok:
+ 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
++ if(!iconv_possible)
++ fprintf(stderr, "Iconv charsets cannot be used with "
++ "Apple extension, HFS, ISO9660 version 2 or\n"
++ "Rock Ridge.\n");
++#endif
+ exit(1);
+ }
+
+Only in cdrtools-2.01.01/mkisofs: mkisofs.c.orig
+diff -urp cdrtools-2.01.01.orig/mkisofs/mkisofs.h cdrtools-2.01.01/mkisofs/mkisofs.h
+--- cdrtools-2.01.01.orig/mkisofs/mkisofs.h 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/mkisofs/mkisofs.h 2006-10-28 11:24:22.000000000 +0200
+@@ -513,9 +513,14 @@ extern int get_session_start __PR((int *
+
+ /* joliet.c */
+ #ifdef UDF
++# ifdef USE_ICONV
++extern size_t convert_to_unicode __PR((unsigned char *buffer,
++ int size, char *source, struct unls_table *inls));
++# else
+ extern void convert_to_unicode __PR((unsigned char *buffer,
+ int size, char *source, struct unls_table *inls));
+-extern int joliet_strlen __PR((const char *string));
++# endif
++extern int joliet_strlen __PR((const char *string, struct unls_table *inls));
+ #endif
+ extern unsigned char conv_charset __PR((unsigned char, struct unls_table *,
+ struct unls_table *));
+Only in cdrtools-2.01.01/mkisofs: mkisofs.h.orig
+diff -urp cdrtools-2.01.01.orig/mkisofs/udf.c cdrtools-2.01.01/mkisofs/udf.c
+--- cdrtools-2.01.01.orig/mkisofs/udf.c 2006-10-28 11:24:03.000000000 +0200
++++ cdrtools-2.01.01/mkisofs/udf.c 2006-10-28 11:24:22.000000000 +0200
+@@ -439,7 +439,7 @@ set_ostaunicode(dst, dst_size, src)
+ int i;
+ int expanded_length;
+
+- expanded_length = joliet_strlen(src);
++ expanded_length = joliet_strlen(src, in_nls);
+ if (expanded_length > 1024)
+ expanded_length = 1024;
+ if (expanded_length > (dst_size-1)*2)
+Only in cdrtools-2.01.01/mkisofs: udf.c.orig