View | Details | Raw Unified
Collapse All | Expand All

(-) cdrtools-2.01/include/unls.h (+10 lines)
 Lines 30-35    Link Here 
#include <prototyp.h>
#include <prototyp.h>
#endif
#endif
#ifdef USE_ICONV
#include <iconv.h>
#endif
#ifdef	__cplusplus
#ifdef	__cplusplus
extern "C" {
extern "C" {
#endif
#endif
 Lines 43-48    Link Here 
	char *charset;
	char *charset;
	unsigned char **page_uni2charset;
	unsigned char **page_uni2charset;
	struct nls_unicode *charset2uni;
	struct nls_unicode *charset2uni;
#ifdef USE_ICONV
	iconv_t iconv_d;
#endif
	void (*inc_use_count) 	__PR((void));
	void (*inc_use_count) 	__PR((void));
	void (*dec_use_count) 	__PR((void));
	void (*dec_use_count) 	__PR((void));
 Lines 58-63    Link Here 
extern void 		unload_nls		__PR((struct nls_table *));
extern void 		unload_nls		__PR((struct nls_table *));
extern struct nls_table *load_nls_default	__PR((void));
extern struct nls_table *load_nls_default	__PR((void));
extern int		init_nls_file		__PR((char * name));
extern int		init_nls_file		__PR((char * name));
#ifdef USE_ICONV
extern int		init_nls_iconv		__PR((char * name));
#endif
#ifdef	__cplusplus
#ifdef	__cplusplus
}
}
(-) cdrtools-2.01/libunls/libunls.mk (+1 lines)
 Lines 8-13    Link Here 
INSDIR=		lib
INSDIR=		lib
TARGETLIB=	unls
TARGETLIB=	unls
#CPPOPTS +=	-Istdio
#CPPOPTS +=	-Istdio
CPPOPTS +=	-DUSE_ICONV
include		Targets
include		Targets
LIBS=		
LIBS=		
(-) cdrtools-2.01/libunls/nls.h (+3 lines)
 Lines 111-115    Link Here 
extern int init_nls_cp10079	__PR((void));
extern int init_nls_cp10079	__PR((void));
extern int init_nls_cp10081	__PR((void));
extern int init_nls_cp10081	__PR((void));
extern int init_nls_file	__PR((char * name));
extern int init_nls_file	__PR((char * name));
#ifdef USE_ICONV
extern int init_nls_iconv	__PR((char * name));
#endif
#endif	/* _NLS_H */
#endif	/* _NLS_H */
(-) cdrtools-2.01/libunls/nls_iconv.c (+96 lines)
Line 0    Link Here 
/* @(#)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 nls_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_nls(charset) != NULL)
		return -1;
	if ((iconv_d = iconv_open("UCS-2BE", charset)) == (iconv_t) -1)
		return -1;
	/* set up the table */
	if ((table = (struct nls_table *)malloc(sizeof (struct nls_table)))
							== NULL) {
		return -1;
	}
	/* give the table the file name, so we can find it again if needed */
	table->charset = strdup(charset);
	table->iconv_d = iconv_d;
	table->page_uni2charset = NULL;
	table->charset2uni = NULL;
	table->inc_use_count = inc_use_count;
	table->dec_use_count = dec_use_count;
	table->next = NULL;
	/* register the table */
	return register_nls(table);
}
#endif
(-) cdrtools-2.01/libunls/Targets (-1 / +2 lines)
 Lines 39-42    Link Here 
	nls_cp10029.c \
	nls_cp10029.c \
	nls_cp10079.c \
	nls_cp10079.c \
	nls_cp10081.c \
	nls_cp10081.c \
	nls_file.c
	nls_file.c \
	nls_iconv.c
(-) cdrtools-2.01/mkisofs/joliet.c (-15 / +174 lines)
 Lines 90-95    Link Here 
#include <unls.h>	/* For UNICODE translation */
#include <unls.h>	/* For UNICODE translation */
#include <schily.h>
#include <schily.h>
#ifdef USE_ICONV
#include <iconv.h>
#include <errno.h>
#endif
static Uint	jpath_table_index;
static Uint	jpath_table_index;
static struct directory **jpathlist;
static struct directory **jpathlist;
static int	next_jpath_index = 1;
static int	next_jpath_index = 1;
 Lines 103-115    Link Here 
};
};
#ifdef	UDF
#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 nls_table *inls));
		int size, char *source, struct nls_table *inls));
	int	joliet_strlen		__PR((const char *string));
	int	joliet_strlen		__PR((const char *string, struct nls_table *inls));
#else
#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 nls_table *inls));
		int size, char *source, struct nls_table *inls));
static int	joliet_strlen		__PR((const char *string));
static int	joliet_strlen		__PR((const char *string, struct nls_table *inls));
#endif
#endif
static void	get_joliet_vol_desc	__PR((struct iso_primary_descriptor *jvol_desc));
static void	get_joliet_vol_desc	__PR((struct iso_primary_descriptor *jvol_desc));
static void	assign_joliet_directory_addresses __PR((struct directory *node));
static void	assign_joliet_directory_addresses __PR((struct directory *node));
 Lines 161-166    Link Here 
	if (inls == onls)
	if (inls == onls)
		return (c);
		return (c);
#ifdef USE_ICONV
	if(inls->charset2uni == NULL || onls->page_uni2charset == 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 */
	/* get high and low UNICODE bytes */
	uh = inls->charset2uni[c].uni2;
	uh = inls->charset2uni[c].uni2;
	ul = inls->charset2uni[c].uni1;
	ul = inls->charset2uni[c].uni1;
 Lines 186-195    Link Here 
 *
 *
 * Notes:
 * Notes:
 */
 */
#ifdef	UDF
#ifdef USE_ICONV
void
#	if	UDF
size_t
#	else
static size_t
#	endif
#else
#else
#	if	UDF
void
#	else
static void
static void
#	endif
#endif
#endif
convert_to_unicode(buffer, size, source, inls)
convert_to_unicode(buffer, size, source, inls)
	unsigned char	*buffer;
	unsigned char	*buffer;
 Lines 216-221    Link Here 
		tmpbuf = (Uchar *) source;
		tmpbuf = (Uchar *) source;
	}
	}
#ifdef USE_ICONV
	if (inls->iconv_d && inls->charset2uni==NULL &&
			inls->page_uni2charset==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,
	 * Now start copying characters.  If the size was specified to be 0,
	 * then assume the input was 0 terminated.
	 * then assume the input was 0 terminated.
 Lines 271-276    Link Here 
	if (source == NULL) {
	if (source == NULL) {
		free(tmpbuf);
		free(tmpbuf);
	}
	}
#ifdef USE_ICONV
	return j;
#endif
}
}
/*
/*
 Lines 287-298    Link Here 
#else
#else
static int
static int
#endif
#endif
joliet_strlen(string)
joliet_strlen(string, inls)
	const char	*string;
	const char	*string;
	struct nls_table *inls;
{
{
	int		rtn;
	int		rtn;
#ifdef USE_ICONV
	if (inls->iconv_d && inls->charset2uni==NULL &&
			inls->page_uni2charset==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;
	rtn = strlen(string) << 1;
#endif
	/*
	/*
	 * We do clamp the maximum length of a Joliet string to be the
	 * We do clamp the maximum length of a Joliet string to be the
 Lines 480-495    Link Here 
	/* compare the Unicode names */
	/* compare the Unicode names */
	while (*rpnt && *lpnt) {
	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(rtmp, 2, rpnt, rinls);
		convert_to_unicode(ltmp, 2, lpnt, linls);
		convert_to_unicode(ltmp, 2, lpnt, linls);
#endif
		if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
		if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
			return (-1);
			return (-1);
		if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
		if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
			return (1);
			return (1);
#ifndef USE_ICONV
		rpnt++;
		rpnt++;
		lpnt++;
		lpnt++;
#endif
	}
	}
	if (*rpnt)
	if (*rpnt)
 Lines 574-583    Link Here 
		}
		}
#ifdef APPLE_HYB
#ifdef APPLE_HYB
		if (USE_MAC_NAME(de))
		if (USE_MAC_NAME(de))
			namelen = joliet_strlen(de->hfs_ent->name);
			namelen = joliet_strlen(de->hfs_ent->name, hfs_inls);
		else
		else
#endif	/* APPLE_HYB */
#endif	/* APPLE_HYB */
			namelen = joliet_strlen(de->name);
			namelen = joliet_strlen(de->name, in_nls);
		if (dpnt == root) {
		if (dpnt == root) {
			jpath_table_l[jpath_table_index] = 1;
			jpath_table_l[jpath_table_index] = 1;
 Lines 742-751    Link Here 
#ifdef APPLE_HYB
#ifdef APPLE_HYB
		/* Use the HFS name if it exists */
		/* Use the HFS name if it exists */
		if (USE_MAC_NAME(s_entry1))
		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
		else
#endif	/* APPLE_HYB */
#endif	/* APPLE_HYB */
			cvt_len = joliet_strlen(s_entry1->name);
			cvt_len = joliet_strlen(s_entry1->name, in_nls);
		/*
		/*
		 * Fix the record length
		 * Fix the record length
 Lines 891-902    Link Here 
				if (USE_MAC_NAME(s_entry))
				if (USE_MAC_NAME(s_entry))
					/* Use the HFS name if it exists */
					/* Use the HFS name if it exists */
					jpath_table_size +=
					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]);
						offsetof(struct iso_path_table, name[0]);
				else
				else
#endif	/* APPLE_HYB */
#endif	/* APPLE_HYB */
					jpath_table_size +=
					jpath_table_size +=
						joliet_strlen(s_entry->name) +
						joliet_strlen(s_entry->name, in_nls) +
						offsetof(struct iso_path_table, name[0]);
						offsetof(struct iso_path_table, name[0]);
				if (jpath_table_size & 1) {
				if (jpath_table_size & 1) {
					jpath_table_size++;
					jpath_table_size++;
 Lines 918-930    Link Here 
				/* Use the HFS name if it exists */
				/* Use the HFS name if it exists */
				s_entry->jreclen =
				s_entry->jreclen =
				offsetof(struct iso_directory_record, name[0])
				offsetof(struct iso_directory_record, name[0])
					+ joliet_strlen(s_entry->hfs_ent->name)
					+ joliet_strlen(s_entry->hfs_ent->name, hfs_inls)
					+ 1;
					+ 1;
			else
			else
#endif	/* APPLE_HYB */
#endif	/* APPLE_HYB */
				s_entry->jreclen =
				s_entry->jreclen =
				offsetof(struct iso_directory_record, name[0])
				offsetof(struct iso_directory_record, name[0])
					+ joliet_strlen(s_entry->name)
					+ joliet_strlen(s_entry->name, in_nls)
					+ 1;
					+ 1;
		} else {
		} else {
			/*
			/*
 Lines 1072-1077    Link Here 
#endif
#endif
	while (*rpnt && *lpnt) {
	while (*rpnt && *lpnt) {
#ifdef USE_ICONV
		size_t ri, li;
#endif
		if (*rpnt == ';' && *lpnt != ';')
		if (*rpnt == ';' && *lpnt != ';')
			return (-1);
			return (-1);
		if (*rpnt != ';' && *lpnt == ';')
		if (*rpnt != ';' && *lpnt == ';')
 Lines 1092-1107    Link Here 
			return (1);
			return (1);
#endif
#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(rtmp, 2, rpnt, rinls);
		convert_to_unicode(ltmp, 2, lpnt, linls);
		convert_to_unicode(ltmp, 2, lpnt, linls);
#endif
		if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
		if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
			return (-1);
			return (-1);
		if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
		if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
			return (1);
			return (1);
#ifndef USE_ICONV
		rpnt++;
		rpnt++;
		lpnt++;
		lpnt++;
#endif
	}
	}
	if (*rpnt)
	if (*rpnt)
		return (1);
		return (1);
(-) cdrtools-2.01/mkisofs/Makefile (+1 lines)
 Lines 32-37    Link Here 
CPPOPTS +=	-DUDF
CPPOPTS +=	-DUDF
CPPOPTS +=	-DDVD_VIDEO
CPPOPTS +=	-DDVD_VIDEO
CPPOPTS +=	-DSORTING
CPPOPTS +=	-DSORTING
CPPOPTS +=	-DUSE_ICONV
CPPOPTS +=	-I../libhfs_iso/
CPPOPTS +=	-I../libhfs_iso/
CPPOPTS	+=	-DHAVE_CONFIG_H -DUSE_LIBSCHILY -DUSE_SCG \
CPPOPTS	+=	-DHAVE_CONFIG_H -DUSE_LIBSCHILY -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"' \
		'-DAPPID_DEFAULT="MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"' \
(-) cdrtools-2.01/mkisofs/mkisofs.c (+46 lines)
 Lines 59-64    Link Here 
#endif
#endif
#endif	/* no_more_needed */
#endif	/* no_more_needed */
#ifdef USE_ICONV
#include <locale.h>
#include <langinfo.h>
#endif
struct directory *root = NULL;
struct directory *root = NULL;
int		path_ind;
int		path_ind;
 Lines 223-228    Link Here 
int	do_sort = 0;		/* sort file data */
int	do_sort = 0;		/* sort file data */
#endif /* SORTING */
#endif /* SORTING */
#ifdef USE_ICONV
int	iconv_possible;
#endif
struct nls_table *in_nls = NULL;  /* input UNICODE conversion table */
struct nls_table *in_nls = NULL;  /* input UNICODE conversion table */
struct nls_table *out_nls = NULL; /* output UNICODE conversion table */
struct nls_table *out_nls = NULL; /* output UNICODE conversion table */
#ifdef APPLE_HYB
#ifdef APPLE_HYB
 Lines 2235-2240    Link Here 
	init_nls_file(hfs_ocharset);
	init_nls_file(hfs_ocharset);
#endif /* APPLE_HYB */
#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 (icharset == NULL) {
#if	(defined(__CYGWIN32__) || defined(__CYGWIN__)) && !defined(IS_CYGWIN_1)
#if	(defined(__CYGWIN32__) || defined(__CYGWIN__)) && !defined(IS_CYGWIN_1)
		in_nls = load_nls("cp437");
		in_nls = load_nls("cp437");
 Lines 2262-2267    Link Here 
	if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
	if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
		fprintf(stderr, "Unknown charset\nKnown charsets are:\n");
		fprintf(stderr, "Unknown charset\nKnown charsets are:\n");
		list_nls();	/* List all known charset names */
		list_nls();	/* 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);
		exit(1);
	}
	}
(-) cdrtools-2.01/mkisofs/mkisofs.h (-1 / +6 lines)
 Lines 501-509    Link Here 
/* joliet.c */
/* joliet.c */
#ifdef	UDF
#ifdef	UDF
#	ifdef USE_ICONV
extern	size_t	convert_to_unicode	__PR((unsigned char *buffer,
			int size, char *source, struct nls_table *inls));
#	else
extern	void	convert_to_unicode	__PR((unsigned char *buffer,
extern	void	convert_to_unicode	__PR((unsigned char *buffer,
			int size, char *source, struct nls_table *inls));
			int size, char *source, struct nls_table *inls));
extern	int	joliet_strlen		__PR((const char *string));
#	endif
extern	int	joliet_strlen		__PR((const char *string, struct nls_table *inls));
#endif
#endif
extern unsigned char conv_charset __PR((unsigned char, struct nls_table *,
extern unsigned char conv_charset __PR((unsigned char, struct nls_table *,
				struct nls_table *));
				struct nls_table *));
(-) cdrtools-2.01/mkisofs/udf.c (-1 / +1 lines)
 Lines 442-448    Link Here 
	int i;
	int i;
	int expanded_length;
	int expanded_length;
	expanded_length = joliet_strlen(src);
	expanded_length = joliet_strlen(src, in_nls);
	if (expanded_length > 1024)
	if (expanded_length > 1024)
		expanded_length = 1024;
		expanded_length = 1024;
	if (expanded_length > (dst_size-1)*2)
	if (expanded_length > (dst_size-1)*2)