diff options
Diffstat (limited to 'app-cdr/cdrtools/files/mkisofs-iconv-25.patch')
-rw-r--r-- | app-cdr/cdrtools/files/mkisofs-iconv-25.patch | 624 |
1 files changed, 0 insertions, 624 deletions
diff --git a/app-cdr/cdrtools/files/mkisofs-iconv-25.patch b/app-cdr/cdrtools/files/mkisofs-iconv-25.patch deleted file mode 100644 index 3c8133919722..000000000000 --- a/app-cdr/cdrtools/files/mkisofs-iconv-25.patch +++ /dev/null @@ -1,624 +0,0 @@ -diff -urN cdrtools-2.01.01/include/schily/unls.h cdrtools-2.01.01_1/include/schily/unls.h ---- cdrtools-2.01.01/include/schily/unls.h 2006-10-10 12:24:15.000000000 +0400 -+++ cdrtools-2.01.01_1/include/schily/unls.h 2007-05-17 14:03:01.000000000 +0400 -@@ -23,6 +23,10 @@ - #include <schily/mconfig.h> - #endif - -+#ifdef USE_ICONV -+#include <iconv.h> -+#endif -+ - #ifdef __cplusplus - extern "C" { - #endif -@@ -37,6 +41,10 @@ - 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)); -@@ -49,6 +57,10 @@ - extern struct unls_table *load_unls_default __PR((void)); - extern int init_unls_file __PR((char * name)); - -+#ifdef USE_ICONV -+extern int init_nls_iconv __PR((char * name)); -+#endif -+ - #ifdef __cplusplus - } - #endif -diff -urN cdrtools-2.01.01/libunls/libunls.mk cdrtools-2.01.01_1/libunls/libunls.mk ---- cdrtools-2.01.01/libunls/libunls.mk 2007-02-04 03:56:54.000000000 +0300 -+++ cdrtools-2.01.01_1/libunls/libunls.mk 2007-05-17 12:56:34.000000000 +0400 -@@ -8,7 +8,7 @@ - INSDIR= lib - TARGETLIB= unls - #CPPOPTS += -Istdio --CPPOPTS += -DSCHILY_PRINT -+CPPOPTS += -DSCHILY_PRINT -DUSE_ICONV - - include Targets - LIBS= -diff -urN cdrtools-2.01.01/libunls/nls.h cdrtools-2.01.01_1/libunls/nls.h ---- cdrtools-2.01.01/libunls/nls.h 2006-09-13 19:09:14.000000000 +0400 -+++ cdrtools-2.01.01_1/libunls/nls.h 2007-05-17 12:55:43.000000000 +0400 -@@ -111,4 +111,8 @@ - extern int init_unls_cp10081 __PR((void)); - extern int init_unls_file __PR((char * name)); - -+#ifdef USE_ICONV -+extern int init_nls_iconv __PR((char * name)); -+#endif -+ - #endif /* _NLS_H */ -diff -urN cdrtools-2.01.01/libunls/nls_iconv.c cdrtools-2.01.01_1/libunls/nls_iconv.c ---- cdrtools-2.01.01/libunls/nls_iconv.c 1970-01-01 03:00:00.000000000 +0300 -+++ cdrtools-2.01.01_1/libunls/nls_iconv.c 2007-05-17 14:07:04.000000000 +0400 -@@ -0,0 +1,97 @@ -+/* @(#)nls_iconv.c 1.0 02/04/20 2002 J. Schilling */ -+#ifndef lint -+static char sccsid[] = -+ "@(#)nls_iconv.c 1.0 02/01/20 2002 J. Schilling"; -+#endif -+/* -+ * 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. -+ */ -+/* -+ * Modifications to make the code portable Copyright (c) 2000 J. Schilling -+ * -+ * nls_iconv: create a pseudo-charset table to use iconv() provided by C -+ * library or libiconv by Bruno Haible -+ * The Unicode to charset table has only exact mappings. -+ * -+ * -+ * Jungshik Shin (jshin@mailaps.org) 04-Feb-2002 -+ */ -+ -+#ifdef USE_ICONV -+//#include <mconfig.h> -+#include <stdio.h> -+//#include <stdxlib.h> -+//#include <strdefs.h> -+#include "nls.h" -+#include <iconv.h> -+ -+static void inc_use_count __PR((void)); -+static void dec_use_count __PR((void)); -+ -+ -+static void -+inc_use_count() -+{ -+ MOD_INC_USE_COUNT; -+} -+ -+static void -+dec_use_count() -+{ -+ MOD_DEC_USE_COUNT; -+} -+ -+int -+init_nls_iconv(charset) -+ char *charset; -+{ -+ iconv_t iconv_d; /* iconv conversion descriptor */ -+ struct unls_table *table; -+ -+ /* give up if no charset is given */ -+ if (charset == NULL) -+ return -1; -+ -+ /* see if we already have a table with this name - built in tables -+ have precedence over iconv() - i.e. can't have the name of an -+ existing table. Also, we may have already registered this file -+ table */ -+ if (find_unls(charset) != NULL) -+ return -1; -+ -+ if ((iconv_d = iconv_open("UCS-2BE", charset)) == (iconv_t) -1) -+ return -1; -+ -+ -+ /* set up the table */ -+ if ((table = (struct unls_table *)malloc(sizeof (struct unls_table))) -+ == NULL) { -+ return -1; -+ } -+ -+ /* give the table the file name, so we can find it again if needed */ -+ table->unls_name = strdup(charset); -+ table->iconv_d = iconv_d; -+ table->unls_cs2uni = NULL; -+ table->unls_uni2cs = NULL; -+// table->inc_use_count = inc_use_count; -+// table->dec_use_count = dec_use_count; -+ table->unls_next = NULL; -+ -+ /* register the table */ -+ return register_unls(table); -+} -+#endif -+ -diff -urN cdrtools-2.01.01/libunls/Targets cdrtools-2.01.01_1/libunls/Targets ---- cdrtools-2.01.01/libunls/Targets 2002-12-03 03:34:27.000000000 +0300 -+++ cdrtools-2.01.01_1/libunls/Targets 2007-05-17 12:51:22.000000000 +0400 -@@ -39,4 +39,5 @@ - nls_cp10029.c \ - nls_cp10079.c \ - nls_cp10081.c \ -- nls_file.c -+ nls_file.c \ -+ nls_iconv.c -diff -urN cdrtools-2.01.01/mkisofs/joliet.c cdrtools-2.01.01_1/mkisofs/joliet.c ---- cdrtools-2.01.01/mkisofs/joliet.c 2006-10-08 17:48:36.000000000 +0400 -+++ cdrtools-2.01.01_1/mkisofs/joliet.c 2007-05-17 13:53:36.000000000 +0400 -@@ -90,6 +90,11 @@ - #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 @@ - }; - - #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 @@ - 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 @@ - * - * 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 @@ - 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 @@ - if (source == NULL) { - free(tmpbuf); - } -+#ifdef USE_ICONV -+ return j; -+#endif - } - - /* -@@ -287,12 +372,50 @@ - #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 @@ - /* 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 @@ - } - #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 @@ - #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 @@ - 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 @@ - /* 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 @@ - #endif - - while (*rpnt && *lpnt) { -+#ifdef USE_ICONV -+ size_t ri, li; -+#endif - if (*rpnt == ';' && *lpnt != ';') - return (-1); - if (*rpnt != ';' && *lpnt == ';') -@@ -1044,16 +1187,32 @@ - 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); -diff -urN cdrtools-2.01.01/mkisofs/Makefile cdrtools-2.01.01_1/mkisofs/Makefile ---- cdrtools-2.01.01/mkisofs/Makefile 2007-02-05 02:19:08.000000000 +0300 -+++ cdrtools-2.01.01_1/mkisofs/Makefile 2007-05-17 12:51:54.000000000 +0400 -@@ -33,6 +33,7 @@ - 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"' \ -diff -urN cdrtools-2.01.01/mkisofs/mkisofs.c cdrtools-2.01.01_1/mkisofs/mkisofs.c ---- cdrtools-2.01.01/mkisofs/mkisofs.c 2007-04-04 14:19:49.000000000 +0400 -+++ cdrtools-2.01.01_1/mkisofs/mkisofs.c 2007-05-17 13:00:27.000000000 +0400 -@@ -63,6 +63,11 @@ - #endif - #endif /* no_more_needed */ - -+#ifdef USE_ICONV -+#include <locale.h> -+#include <langinfo.h> -+#endif -+ - struct directory *root = NULL; - int path_ind; - -@@ -290,6 +295,10 @@ - int do_sort = 0; /* sort file data */ - #endif /* SORTING */ - -+#ifdef USE_ICONV -+int iconv_possible; -+#endif -+ - /* - * inode numbers for zero sized files start from this number and count - * backwards. This is done to allow unique inode numbers even on multi-session -@@ -2060,6 +2069,37 @@ - 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_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"); -@@ -2087,7 +2127,13 @@ - 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"); - exit(1); -+#endif - } - - -diff -urN cdrtools-2.01.01/mkisofs/mkisofs.h cdrtools-2.01.01_1/mkisofs/mkisofs.h ---- cdrtools-2.01.01/mkisofs/mkisofs.h 2006-11-25 18:44:46.000000000 +0300 -+++ cdrtools-2.01.01_1/mkisofs/mkisofs.h 2007-05-17 13:49:04.000000000 +0400 -@@ -514,9 +514,14 @@ - - /* 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 *)); -diff -urN cdrtools-2.01.01/mkisofs/udf.c cdrtools-2.01.01_1/mkisofs/udf.c ---- cdrtools-2.01.01/mkisofs/udf.c 2006-10-26 20:04:26.000000000 +0400 -+++ cdrtools-2.01.01_1/mkisofs/udf.c 2007-05-17 12:52:33.000000000 +0400 -@@ -436,7 +436,7 @@ - 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) |