summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/cacao/cacao-cldc.inc64
-rw-r--r--packages/cacao/cacao-cldc_0.98.bb42
-rw-r--r--packages/cacao/cacao.inc52
-rw-r--r--packages/cacao/cacao_0.98+hg20071001.bb16
-rw-r--r--packages/cacao/cacaoh-cldc-native_0.98.bb25
-rw-r--r--packages/cacao/cacaoh-native.inc28
-rw-r--r--packages/cacao/cacaoh-native_0.98+hg20071001.bb5
-rw-r--r--packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch50
-rw-r--r--packages/cacao/files/cacao-0.98+hg-attachthread.patch12
-rw-r--r--packages/cacao/files/cacao-0.98+svn-classpath_var.patch56
-rw-r--r--packages/cacao/files/cacao-0.98+svn-libdir.diff30
-rw-r--r--packages/classpath/classpath-minimal_0.96.1.bb17
-rw-r--r--packages/classpath/classpath.inc60
-rw-r--r--packages/classpath/classpath_0.95.bb20
-rw-r--r--packages/classpath/classpath_0.96.1.bb20
-rw-r--r--packages/ecj/ecj-native_3.2.2.bb17
-rw-r--r--packages/ecj/ecj-native_3.3.bb17
-rw-r--r--packages/ecj/files/ecj.sh3
-rw-r--r--packages/gpsdrive/gpsdrive-pda/.mtn2git_empty (renamed from packages/jamvm/jamvm-1.3.0/.mtn2git_empty)0
-rw-r--r--packages/gpsdrive/gpsdrive-pda/makefile.patch16
-rw-r--r--packages/gpsdrive/gpsdrive-pda_2.10pre2.bb34
-rw-r--r--packages/jamvm/files/jamvm-1.3.1-size-defaults.patch (renamed from packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch)0
-rw-r--r--packages/jamvm/jamvm.inc22
-rw-r--r--packages/jamvm/jamvm/sh3sh4-support.patch11
-rw-r--r--packages/jamvm/jamvm_1.4.5.bb24
-rw-r--r--packages/jamvm/jamvm_1.5.0.bb5
-rw-r--r--packages/jikes/jikes-initial.bb2
-rw-r--r--packages/linux/linux-2.6.23/kallsyms-missing-include.patch19
-rw-r--r--packages/midpath/midpath-cldc-native_0.1.bb3
-rw-r--r--packages/midpath/midpath-cldc-x11_0.1.bb2
-rw-r--r--packages/midpath/midpath-cldc_0.1.bb15
-rw-r--r--packages/midpath/midpath.inc6
-rw-r--r--packages/obsolete/classpath/.mtn2git_empty (renamed from packages/jamvm/jamvm/.mtn2git_empty)0
-rw-r--r--packages/obsolete/classpath/classpath-gtk_0.93.bb (renamed from packages/classpath/classpath-gtk_0.93.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-gtk_cvs.bb (renamed from packages/classpath/classpath-gtk_cvs.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-minimal-native_0.93.bb (renamed from packages/classpath/classpath-minimal-native_0.93.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-minimal-native_0.95.bb (renamed from packages/classpath/classpath-minimal-native_0.95.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-minimal_0.90.bb (renamed from packages/classpath/classpath-minimal_0.90.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-minimal_0.95.bb (renamed from packages/classpath/classpath-minimal_0.95.bb)0
-rw-r--r--packages/obsolete/classpath/classpath.inc30
-rw-r--r--packages/obsolete/classpath/classpath_0.14.bb (renamed from packages/classpath/classpath_0.14.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_0.15.bb (renamed from packages/classpath/classpath_0.15.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_0.17.bb (renamed from packages/classpath/classpath_0.17.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_0.18.bb (renamed from packages/classpath/classpath_0.18.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_0.19.bb (renamed from packages/classpath/classpath_0.19.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_0.20.bb (renamed from packages/classpath/classpath_0.20.bb)0
-rw-r--r--packages/obsolete/classpath/classpath_cvs.bb (renamed from packages/classpath/classpath_cvs.bb)0
-rw-r--r--packages/obsolete/classpath/files/.mtn2git_empty (renamed from packages/quilt/quilt-0.39/.mtn2git_empty)0
-rw-r--r--packages/obsolete/classpath/files/disable-automake-checks-v2.patch (renamed from packages/classpath/files/disable-automake-checks-v2.patch)0
-rw-r--r--packages/obsolete/classpath/files/disable-automake-checks.patch (renamed from packages/classpath/files/disable-automake-checks.patch)0
-rw-r--r--packages/obsolete/classpath/files/fix-endian-arm-floats.patch (renamed from packages/classpath/files/fix-endian-arm-floats.patch)0
-rw-r--r--packages/obsolete/classpath/files/gconf_version.patch (renamed from packages/classpath/files/gconf_version.patch)0
-rw-r--r--packages/obsolete/jamvm/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/files/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch12
-rw-r--r--packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch (renamed from packages/jamvm/jamvm-1.3.0/heap-size.patch)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.0.bb (renamed from packages/jamvm/jamvm_1.3.0.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.1.bb (renamed from packages/jamvm/jamvm_1.3.1.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.2.bb (renamed from packages/jamvm/jamvm_1.3.2.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.4.1.bb (renamed from packages/jamvm/jamvm_1.4.1.bb)0
-rw-r--r--packages/obsolete/quilt/.mtn2git_empty0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/.mtn2git_empty0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/non-gnu.patch (renamed from packages/quilt/quilt-0.39/non-gnu.patch)0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/nostrip.patch (renamed from packages/quilt/quilt-0.39/nostrip.patch)0
-rw-r--r--packages/obsolete/quilt/quilt-native_0.39.bb (renamed from packages/quilt/quilt-native_0.39.bb)0
-rw-r--r--packages/obsolete/quilt/quilt_0.39.bb (renamed from packages/quilt/quilt_0.39.bb)0
-rw-r--r--packages/obsolete/quilt/quilt_0.39.inc (renamed from packages/quilt/quilt_0.39.inc)0
-rw-r--r--packages/pngcrush/.mtn2git_empty0
-rw-r--r--packages/pngcrush/pngcrush-native_1.6.4.bb9
-rw-r--r--packages/pngcrush/pngcrush_1.6.4.bb14
-rw-r--r--packages/ppp-dialin/ppp-dialin_0.1.bb3
-rw-r--r--packages/ppp-dsl/files/.mtn2git_empty0
-rw-r--r--packages/ppp-dsl/files/dsl-provider (renamed from packages/ppp-dsl/dsl-provider)0
-rwxr-xr-xpackages/ppp-dsl/files/ppp_on_boot.dsl (renamed from packages/ppp-dsl/ppp_on_boot.dsl)0
-rw-r--r--packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb5
-rw-r--r--packages/ppp-dsl/ppp-dsl_0.1.bb6
-rw-r--r--packages/ppp/ppp-gprs/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/chats/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/chats/chat-gprs9
-rw-r--r--packages/ppp/ppp-gprs/peers/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/peers/_gprs68
-rw-r--r--packages/ppp/ppp-gprs/peers/_gprs-ap-internet3
-rw-r--r--packages/ppp/ppp-gprs_1.0.bb22
-rw-r--r--packages/quilt/files/non-gnu.patch (renamed from packages/quilt/quilt-0.45/non-gnu.patch)0
-rw-r--r--packages/quilt/quilt-0.45/install.patch (renamed from packages/quilt/files/install.patch)0
-rw-r--r--packages/quilt/quilt-0.46/.mtn2git_empty0
-rw-r--r--packages/quilt/quilt-0.46/aclocal.patch126
-rw-r--r--packages/quilt/quilt-0.46/install.patch13
-rw-r--r--packages/quilt/quilt-native.inc2
-rw-r--r--packages/quilt/quilt-native_0.45.bb1
-rw-r--r--packages/quilt/quilt-native_0.46.bb1
-rw-r--r--packages/quilt/quilt-package.inc19
-rw-r--r--packages/quilt/quilt.inc5
-rw-r--r--packages/quilt/quilt_0.45.bb8
-rw-r--r--packages/quilt/quilt_0.45.inc3
-rw-r--r--packages/quilt/quilt_0.46.bb1
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch11
-rw-r--r--packages/rp-pppoe/rp-pppoe_3.8.bb3
-rw-r--r--packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty0
-rw-r--r--packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch4365
-rw-r--r--packages/vsftpd/vsftpd-charconv_2.0.5.bb50
102 files changed, 5305 insertions, 177 deletions
diff --git a/packages/cacao/cacao-cldc.inc b/packages/cacao/cacao-cldc.inc
new file mode 100644
index 0000000000..86df369a32
--- /dev/null
+++ b/packages/cacao/cacao-cldc.inc
@@ -0,0 +1,64 @@
+DESCRIPTION = "Cacao-cldc is a Java Virtual Machine, which uses MIDPath CLDC as default Java core library"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "interpreters"
+
+DEPENDS = "zlib libtool classpath midpath-cldc cacaoh-cldc-native virtual/javac-native"
+
+# Avoid version number here, otherwise dpkg will expect a package name
+# and cannot be satisfied with a package that provides classpath.
+RDEPENDS = "midpath-cldc"
+
+PROVIDES = "cacao-cldc virtual/java-cldc"
+RPROVIDES_cacao-cldc = "java-cldc-runtime"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "\
+ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+ --enable-debug \
+ --enable-jni \
+ --disable-libjvm \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \
+ --with-target-classpath-classes=${datadir}/midpath-cldc/midpath-cldc1.1.jar \
+ --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-cldc-${PV} \
+ --with-classpath-libdir=${STAGING_LIBDIR}/classpath \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-vm-zip=${datadir}/cacao-cldc/vm.zip \
+ --libdir=${libdir}/cacao-cldc \
+ --program-suffix=-cldc \
+ "
+
+S = "${WORKDIR}/cacao-${PV}"
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
+
+FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java-cldc"
+ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}"
+ALTERNATIVE_PATH = "${bindir}/cacao-cldc"
+ALTERNATIVE_PRIORITY = "10"
+
+do_configure_prepend() {
+ # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
+ # configured in OE.
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c
+ fi
+
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c
+ fi
+}
+
+do_configure_append() {
+ # Fix the executable name in the wrapper script.
+ sed -i -e "s|exec cacao|exec cacao-cldc|" src/scripts/java.in
+}
+
diff --git a/packages/cacao/cacao-cldc_0.98.bb b/packages/cacao/cacao-cldc_0.98.bb
index b791296d82..f5a48c40a9 100644
--- a/packages/cacao/cacao-cldc_0.98.bb
+++ b/packages/cacao/cacao-cldc_0.98.bb
@@ -1,35 +1,17 @@
+# Compatible with GNU Classpath 0.95 only!
-require cacao.inc
+require cacao-cldc.inc
-SRC_URI +="file://midpath.patch;patch=1 \
- file://offsets_make.patch;patch=1 \
- file://classpath_var.patch;patch=1 \
- file://libmath.patch;patch=1 \
- file://arm_mmap.patch;patch=1 \
- "
-SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
-
-DEPENDS = "cacaoh-cldc-native virtual/javac-native classpath-minimal-native virtual/cldc-api-1.1 libtool zlib"
-RDEPENDS = "virtual/cldc-api-1.1 libltdl"
-RPROVIDES = "virtual/java"
+PR = "r1"
-EXTRA_OECONF += "--with-classpath-libdir=${STAGING_DATADIR}/classpath-minimal \
- --with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
- --enable-jni \
- --enable-java=cldc1.1 \
- --with-classpath=cldc1.1 \
- --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \
- --with-target-classpath-classes=${datadir}/java/cldc1.1.jar \
- --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh \
- --disable-libjvm \
- "
+SRC_URI += "\
+ http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \
+ file://midpath.patch;patch=1 \
+ file://offsets_make.patch;patch=1 \
+ file://classpath_var.patch;patch=1 \
+ file://libmath.patch;patch=1 \
+ file://arm_mmap.patch;patch=1 \
+ "
-PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
-
-FILES_${PN} = "${bindir}/cacao"
-FILES_${PN}-doc = "${datadir}/man"
-FILES_${PN}-dbg = "${bindir}/.debug"
+SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
-ALTERNATIVE_NAME = "java"
-ALTERNATIVE_PATH = "${bindir}/cacao"
-ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc
index 9315babfb9..cc107abf27 100644
--- a/packages/cacao/cacao.inc
+++ b/packages/cacao/cacao.inc
@@ -1,16 +1,52 @@
-DESCRIPTION = "cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
+DESCRIPTION = "Cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
HOMEPAGE = "http://www.cacaojvm.org/"
LICENSE = "GPL"
PRIORITY = "optional"
SECTION = "interpreters"
-PR = "r1"
-inherit autotools
+DEPENDS = "zlib libtool classpath cacaoh-native virtual/javac-native"
-SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-0.98/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346"
+# Avoid version number here, otherwise dpkg will expect a package name
+# and cannot be satisfied with a package that provides classpath.
+RDEPENDS = "classpath"
-S = "${WORKDIR}/cacao-${PV}"
+PROVIDES = "cacao virtual/java"
+RPROVIDES_cacao = "java2-runtime"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "\
+ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+ --enable-debug \
+ --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-${PV} \
+ --with-classpath-libdir=${STAGING_LIBDIR}/classpath \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \
+ --with-target-classpath-classes=${datadir}/classpath/glibj.zip \
+ --with-vm-zip=${datadir}/cacao/vm.zip \
+ --with-classpath-libdir=${libdir} \
+ "
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
+
+FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}"
+ALTERNATIVE_PATH = "${bindir}/cacao"
+ALTERNATIVE_PRIORITY = "10"
+
+do_configure_prepend() {
+ # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
+ # configured in OE.
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c
+ fi
+
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c
+ fi
+}
-EXTRA_OECONF = "--disable-debug \
- ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
- "
diff --git a/packages/cacao/cacao_0.98+hg20071001.bb b/packages/cacao/cacao_0.98+hg20071001.bb
new file mode 100644
index 0000000000..38fcb37b82
--- /dev/null
+++ b/packages/cacao/cacao_0.98+hg20071001.bb
@@ -0,0 +1,16 @@
+require cacao.inc
+
+PR = "r5"
+
+SRC_URI = "\
+ http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518 \
+ file://cacao-0.98+svn-libdir.diff;patch=1 \
+ file://cacao-0.98+svn-classpath_var.patch;patch=1 \
+ file://cacao-0.98+hg-arm-cacheflush-workaround.patch;patch=1 \
+ file://cacao-0.98+hg-attachthread.patch;patch=1 \
+ "
+
+EXTRA_OECONF += "\
+ --enable-annotations \
+ "
+
diff --git a/packages/cacao/cacaoh-cldc-native_0.98.bb b/packages/cacao/cacaoh-cldc-native_0.98.bb
index 73546f8e16..e2c92cc328 100644
--- a/packages/cacao/cacaoh-cldc-native_0.98.bb
+++ b/packages/cacao/cacaoh-cldc-native_0.98.bb
@@ -1,16 +1,19 @@
+require cacaoh-native.inc
-require cacao.inc
+DEPENDS += "midpath-cldc-native"
-DEPENDS = "virtual/javac-native classpath-minimal-native virtual/cldc-api-1.1-native libtool-native zlib-native"
+SRC_URI = "\
+ http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \
+ "
-inherit native
-
-EXTRA_OECONF += "--with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
- --enable-jni \
- --enable-java=cldc1.1 \
- --with-classpath=cldc1.1 \
- --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \
- "
+EXTRA_OECONF += "\
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --enable-jni \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \
+"
+
do_stage() {
- install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/
+ install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-cldc-${PV}
}
diff --git a/packages/cacao/cacaoh-native.inc b/packages/cacao/cacaoh-native.inc
new file mode 100644
index 0000000000..1f81672e7f
--- /dev/null
+++ b/packages/cacao/cacaoh-native.inc
@@ -0,0 +1,28 @@
+DESCRIPTION = "Header generator for Cacao JVM - Needed for cross-compilation builds"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+
+DEPENDS = "libtool-native zlib-native virtual/javac-native classpath-native"
+
+S = "${WORKDIR}/cacao-${PV}"
+
+PR = "r1"
+
+inherit autotools
+inherit native
+
+EXTRA_OECONF = " \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \
+ "
+
+do_compile() {
+ # Compile the header generator only (and what is needed for it).
+ oe_runmake -C src/toolbox libtoolbox.la
+ oe_runmake -C src/vmcore libvmcore.la
+ oe_runmake -C src/cacaoh cacaoh
+}
+
+do_stage() {
+ install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-${PV}
+}
diff --git a/packages/cacao/cacaoh-native_0.98+hg20071001.bb b/packages/cacao/cacaoh-native_0.98+hg20071001.bb
new file mode 100644
index 0000000000..cb552df827
--- /dev/null
+++ b/packages/cacao/cacaoh-native_0.98+hg20071001.bb
@@ -0,0 +1,5 @@
+require cacaoh-native.inc
+
+SRC_URI = "http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518"
+
+
diff --git a/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch
new file mode 100644
index 0000000000..813cb683f6
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch
@@ -0,0 +1,50 @@
+Index: cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S
+===================================================================
+--- cacao-0.98+hg7750.orig/src/vm/jit/arm/asmpart.S 2007-11-28 10:14:51.000000000 +0100
++++ cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S 2007-11-28 10:15:31.000000000 +0100
+@@ -302,35 +302,21 @@
+ * *
+ *******************************************************************************/
+
+-.equ sys_cacheflush,__ARM_NR_cacheflush /* syscall number for cache flushing */
+-
++.equ sys_cacheflush, 0x9f0002
+ asm_cacheflush:
+- add a1, a0, a1
+- mov a2, #0
+-
+-#if defined(__ARM_EABI__)
+- /* According to EABI, the syscall number should be passed via R7,
+- see "http://wiki.debian.org/ArmEabiPort" for additional details. */
+-
+- stmfd sp!, {r7}
+- mov r7, #0x0f0000
+- add r7, r7, #0x000002
+-#endif
++ add a1, a0, a1
++ mov a2, #0
+
+ #if 0
+- /* TWISTI: required on iyonix, maybe a linux-2.4 bug */
+- mov a0, #0x0
+- mov a1, #0xff000000
++ /* TWISTI: required on iyonix, maybe a linux-2.4 bug */
++ /* TODO: repeair this! */
++ /* cacheflush is messed up beyond all repair! */
++ mov a0, #0x0
++ mov a1, #0xff000000
+ #endif
+
+- swi sys_cacheflush
+-
+-#if defined(__ARM_EABI__)
+- ldmfd sp!, {r7}
+-#endif
+-
+- mov pc, lr
+-
++ swi #sys_cacheflush
++ mov pc, lr
+
+ /* disable exec-stacks ********************************************************/
+
diff --git a/packages/cacao/files/cacao-0.98+hg-attachthread.patch b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
new file mode 100644
index 0000000000..b3dfabc625
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
@@ -0,0 +1,12 @@
+diff -r d8fe2c3ba284 src/threads/native/threads.c
+--- a/src/threads/native/threads.c Sun Dec 30 17:43:35 2007 +0100
++++ b/src/threads/native/threads.c Wed Jan 02 16:41:57 2008 +0100
+@@ -1432,6 +1432,8 @@ bool threads_attach_current_thread(JavaV
+
+ threads_thread_set_object(thread, (java_handle_t *) t);
+
++ threads_set_current_threadobject(thread);
++
+ /* thread is completely initialized */
+
+ threads_thread_state_runnable(thread);
diff --git a/packages/cacao/files/cacao-0.98+svn-classpath_var.patch b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch
new file mode 100644
index 0000000000..255281d386
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch
@@ -0,0 +1,56 @@
+Index: cacao-trunk/src/vm/properties.c
+===================================================================
+--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:28:53.000000000 +0200
++++ cacao-trunk/src/vm/properties.c 2007-09-03 00:36:14.000000000 +0200
+@@ -294,14 +294,14 @@
+ len =
+ strlen(CACAO_VM_ZIP) +
+ strlen(":") +
+- strlen(CLASSPATH_CLASSES) +
++ strlen(TARGET_CLASSPATH_CLASSES) +
+ strlen("0");
+
+ boot_class_path = MNEW(char, len);
+
+ strcpy(boot_class_path, CACAO_VM_ZIP);
+ strcat(boot_class_path, ":");
+- strcat(boot_class_path, CLASSPATH_CLASSES);
++ strcat(boot_class_path, TARGET_CLASSPATH_CLASSES);
+
+ # elif defined(WITH_CLASSPATH_SUN)
+
+Index: cacao-trunk/configure.ac
+===================================================================
+--- cacao-trunk.orig/configure.ac 2007-08-31 13:22:03.000000000 +0200
++++ cacao-trunk/configure.ac 2007-08-31 13:30:44.000000000 +0200
+@@ -851,6 +851,7 @@
+ AC_CHECK_WITH_CLASSPATH
+ AC_CHECK_WITH_CLASSPATH_PREFIX
+ AC_CHECK_WITH_CLASSPATH_CLASSES
++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES
+ AC_CHECK_WITH_CLASSPATH_LIBDIR
+ AC_CHECK_WITH_CLASSPATH_INCLUDEDIR
+
+Index: cacao-trunk/m4/classpath.m4
+===================================================================
+--- cacao-trunk.orig/m4/classpath.m4 2007-08-31 13:22:21.000000000 +0200
++++ cacao-trunk/m4/classpath.m4 2007-08-31 13:30:55.000000000 +0200
+@@ -98,6 +98,18 @@
+ AC_SUBST(CLASSPATH_CLASSES)
+ ])
+
++dnl where are Java core library classes installed on the target
++
++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[
++AC_MSG_CHECKING(where Java core library classes are installed on the target)
++AC_ARG_WITH([target-classpath-classes],
++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])],
++ [TARGET_CLASSPATH_CLASSES=${withval}],
++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip])
++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES})
++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target])
++AC_SUBST(TARGET_CLASSPATH_CLASSES)
++])
+
+ dnl where are Java core library native libraries installed
+
diff --git a/packages/cacao/files/cacao-0.98+svn-libdir.diff b/packages/cacao/files/cacao-0.98+svn-libdir.diff
new file mode 100644
index 0000000000..f5cf9ba5a1
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+svn-libdir.diff
@@ -0,0 +1,30 @@
+Index: cacao-trunk/src/vm/properties.c
+===================================================================
+--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:20:41.000000000 +0200
++++ cacao-trunk/src/vm/properties.c 2007-09-04 14:54:19.000000000 +0200
+@@ -210,15 +210,22 @@
+
+ # if defined(WITH_CLASSPATH_GNU)
+
+- boot_library_path = CLASSPATH_LIBDIR"/classpath";
++ boot_library_path = CLASSPATH_LIBDIR"/classpath:OE_LIBDIR_JNI";
+
+ # elif defined(WITH_CLASSPATH_SUN)
+
+- boot_library_path = CLASSPATH_LIBDIR;
++ boot_library_path = CLASSPATH_LIBDIR":OE_LIBDIR_JNI";
+
+ # elif defined(WITH_CLASSPATH_CLDC1_1)
+
+- /* No boot_library_path required. */
++ /* No boot_library_path required.
++ Well, don't be that strict on Debian-like
++ environments. Setting this to /usr/lib/jni
++ makes it unneccessary to fumble with
++ LD_LIBRARY_PATH to get things like MIDPath
++ running.
++ */
++ boot_library_path = "OE_LIBDIR_JNI";
+
+ # else
+ # error unknown classpath configuration
diff --git a/packages/classpath/classpath-minimal_0.96.1.bb b/packages/classpath/classpath-minimal_0.96.1.bb
new file mode 100644
index 0000000000..0597274915
--- /dev/null
+++ b/packages/classpath/classpath-minimal_0.96.1.bb
@@ -0,0 +1,17 @@
+require classpath.inc
+
+PR = "r3"
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PROVIDES = "${PN} classpath"
+
+EXTRA_OECONF += "\
+ --enable-local-sockets \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --disable-examples \
+ "
diff --git a/packages/classpath/classpath.inc b/packages/classpath/classpath.inc
index d9498c99d5..97c081af89 100644
--- a/packages/classpath/classpath.inc
+++ b/packages/classpath/classpath.inc
@@ -3,28 +3,62 @@ HOMEPAGE = "http://www.gnu.org/software/classpath/"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "Classpath"
-PROVIDES = "classpath"
-RPROVIDES = "classpath"
+PBN = "classpath"
-SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \
- file://gconf_version.patch;patch=1 \
- file://fix-endian-arm-floats.patch;patch=1"
+DEPENDS = "virtual/javac-native fastjar-native zip-native"
+RPROVIDES = ""
+
+RDEPENDS_${PN} = "${PBN}-common (>= ${PV})"
+
+RPROVIDES_${PN} = "${PBN}"
+RPROVIDES_${PN}-gtk = "${PBN}-awt"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
+
+S = "${WORKDIR}/${PBN}-${PV}"
+
+EXTRA_OECONF = "\
+ --with-glibj \
+ --with-ecj=javac \
+ --with-fastjar=fastjar \
+ --includedir=${includedir}/classpath \
+ --with-vm=java \
+ "
inherit autotools
do_stage() {
install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -m 0644 include/jni* ${STAGING_INCDIR}/classpath
+ install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath/
+
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/classpath
}
do_install() {
autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
+ mv ${D}${libdir}/security ${D}${libdir}/${PBN}
}
-PACKAGES =+ "classpath-common classpath-examples classpath-tools"
-FILES_classpath-common += "${datadir}/classpath/glibj.zip"
-FILES_classpath-examples += "${datadir}/classpath/examples"
-FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools"
-FILES_classpath-dev += "${libdir}/*.so"
-FILES_classpath-dbg += "${libdir}/classpath/.debug"
+PACKAGES =+ "${PBN}-common ${PN}-examples \
+ ${PN}-tools ${PN}-tools-doc \
+ ${PN}-gtk ${PN}-gconf "
+
+FILES_${PN}-dev += "${libdir}/${PBN}/*.la ${incdir}/${PBN}"
+
+FILES_${PBN}-common = "${datadir}/${PBN}/glibj.zip ${libdir}/logging.properties ${libdir}/${PBN}/security"
+FILES_${PN}-examples = "${datadir}/${PBN}/examples"
+
+FILES_${PN}-tools = "${datadir}/${PBN}/tools.zip ${bindir}"
+FILES_${PN}-tools-doc = "${mandir}"
+
+FILES_${PN}-dbg += "${libdir}/${PBN}/.debug"
+FILES_${PN}-doc = "${infodir}"
+
+# gcjwebplugin - not built yet
+#FILES_${PN}-gcjwebplugin = "${libdir}/${PBN}/libgcjwebplugin.so"
+FILES_${PN}-gtk = "${libdir}/${PBN}/libgtkpeer.so ${libdir}/${PBN}/libjawt.so"
+FILES_${PN}-gconf = "${libdir}/${PBN}/libgconfpeer.so"
+FILES_${PN} = "${libdir}/${PBN}/lib*so*"
+
diff --git a/packages/classpath/classpath_0.95.bb b/packages/classpath/classpath_0.95.bb
new file mode 100644
index 0000000000..6b167a2d47
--- /dev/null
+++ b/packages/classpath/classpath_0.95.bb
@@ -0,0 +1,20 @@
+require classpath.inc
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PR = "r2"
+
+DEPENDS += "gtk+ gconf libxtst"
+
+EXTRA_OECONF += "\
+ --disable-alsa \
+ --disable-dssi \
+ --disable-qt4-peer \
+ --disable-plugin \
+ --enable-gconf-peer \
+ --enable-gtk-peer \
+ --enable-local-sockets \
+ --with-vm=java \
+ "
+
+
diff --git a/packages/classpath/classpath_0.96.1.bb b/packages/classpath/classpath_0.96.1.bb
new file mode 100644
index 0000000000..6b167a2d47
--- /dev/null
+++ b/packages/classpath/classpath_0.96.1.bb
@@ -0,0 +1,20 @@
+require classpath.inc
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PR = "r2"
+
+DEPENDS += "gtk+ gconf libxtst"
+
+EXTRA_OECONF += "\
+ --disable-alsa \
+ --disable-dssi \
+ --disable-qt4-peer \
+ --disable-plugin \
+ --enable-gconf-peer \
+ --enable-gtk-peer \
+ --enable-local-sockets \
+ --with-vm=java \
+ "
+
+
diff --git a/packages/ecj/ecj-native_3.2.2.bb b/packages/ecj/ecj-native_3.2.2.bb
deleted file mode 100644
index 8afa2653ca..0000000000
--- a/packages/ecj/ecj-native_3.2.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "JDT Core Batch Compiler"
-HOMEPAGE = "http://www.eclipse.org/"
-PRIORITY = "optional"
-SECTION = "devel"
-LICENSE = "EPL"
-PR = "r0"
-
-inherit native
-
-SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.2.2-200702121330/ecj.jar \
- file://ecj.sh"
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
-}
diff --git a/packages/ecj/ecj-native_3.3.bb b/packages/ecj/ecj-native_3.3.bb
deleted file mode 100644
index ff2eb5f49e..0000000000
--- a/packages/ecj/ecj-native_3.3.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "JDT Core Batch Compiler"
-HOMEPAGE = "http://www.eclipse.org/"
-PRIORITY = "optional"
-SECTION = "devel"
-LICENSE = "EPL"
-PR = "r0"
-
-inherit native
-
-SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.3-200706251500/ecj.jar \
- file://ecj.sh"
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
-}
diff --git a/packages/ecj/files/ecj.sh b/packages/ecj/files/ecj.sh
deleted file mode 100644
index 75aa2c2287..0000000000
--- a/packages/ecj/files/ecj.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-java -Xmx512m -jar $0.jar "$@"
diff --git a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty
+++ b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty
diff --git a/packages/gpsdrive/gpsdrive-pda/makefile.patch b/packages/gpsdrive/gpsdrive-pda/makefile.patch
new file mode 100644
index 0000000000..2ec4f6a6d8
--- /dev/null
+++ b/packages/gpsdrive/gpsdrive-pda/makefile.patch
@@ -0,0 +1,16 @@
+--- gpsdrive-2.10pre2-ipaq/Makefile 2007-11-11 13:29:10.000000000 +0300
++++ gpsdrive-2.10pre2-ipaq.patched/Makefile 2008-01-12 19:18:46.000000000 +0300
+@@ -5,11 +5,11 @@
+ STRIP = arm-linux-strip
+
+ DEFS = -DLOCALEDIR=\"/usr/share/locale\" -DDATADIR=\"/usr/share\"
+-INCLUDES = -I. -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo
++INCLUDES = -I. `pkg-config gtk+-2.0 --cflags`
+
+ CFLAGS = -O2 -pipe
+
+-LIBRARIES = -L/usr/lib -lcrypt -lpthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lm -lc
++LIBRARIES = -lcrypt -lpthread -lm -lc `pkg-config gtk+-2.0 --libs`
+ LDFLAGS =
+
+ SOURCES = gpsdrive.c speech_out.c track.c settings.c splash.c gpsserial.c gpsmisc.c \
diff --git a/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb
new file mode 100644
index 0000000000..6350053768
--- /dev/null
+++ b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb
@@ -0,0 +1,34 @@
+inherit autotools pkgconfig
+
+PR = "r1"
+DESCRIPTION = "GPS navigation/map display software, PDA-optimized version"
+HOMEPAGE = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/"
+DEPENDS = "virtual/libc gtk+ libpcre gpsd"
+RDEPENDS_${PN} = "gdk-pixbuf-loader-gif gpsd"
+SECTION = "x11"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+inherit pkgconfig
+
+SRC_URI = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/gpsdrive-2.10pre2-ipaq-r4.tar.gz \
+ file://makefile.patch;patch=1 "
+
+S = "${WORKDIR}/gpsdrive-2.10pre2-ipaq"
+
+FILES_${PN} = "${bindir}/gpsdrive ${datadir}/gpsdrive ${datadir}/pixmaps ${datadir}/applications"
+FILES_${PN} += "${datadir}/${PN}"
+
+do_compile () {
+ oe_runmake "CC=${CC}" "LD=${CC}" "STRIP=${STRIP}" all
+}
+
+do_install () {
+ mkdir -p ${D}${datadir}
+ cp -a ipkg-data/usr/share/* ${D}${datadir}/
+ cp -a README.iPAQ.txt ${D}${datadir}/gpsdrive
+ cp -a COPYING ${D}${datadir}/gpsdrive
+ cp -a original-docs ${D}${datadir}/gpsdrive
+ mkdir -p ${D}${bindir}
+ install -m 0755 gpsdrive ${D}${bindir}/
+}
diff --git a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch
index a41beee982..a41beee982 100644
--- a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch
+++ b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch
diff --git a/packages/jamvm/jamvm.inc b/packages/jamvm/jamvm.inc
new file mode 100644
index 0000000000..36378370c5
--- /dev/null
+++ b/packages/jamvm/jamvm.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
+HOMEPAGE = "http://jamvm.sourceforge.net/"
+LICENSE = "GPL"
+
+DEPENDS = "zlib classpath virtual/javac-native"
+RDEPENDS = "classpath"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/jamvm/jamvm-${PV}.tar.gz"
+
+RPROVIDES_jamvm = "java2-runtime"
+
+# This uses 32 bit arm, so force the instruction set to arm, not thumb
+ARM_INSTRUCTION_SET = "arm"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "--with-classpath-install-dir=${prefix}"
+CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_PATH = "${bindir}/jamvm"
+ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/jamvm/jamvm/sh3sh4-support.patch b/packages/jamvm/jamvm/sh3sh4-support.patch
deleted file mode 100644
index 8fa0d8c161..0000000000
--- a/packages/jamvm/jamvm/sh3sh4-support.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- configure.ac_orig 2006-05-10 21:48:31.000000000 +0000
-+++ configure.ac 2006-05-10 21:49:56.000000000 +0000
-@@ -66,6 +66,8 @@
- arm*-*-linux*) host_cpu=arm host_os=linux ;;
- arm*-*-openbsd*) host_cpu=arm host_os=linux libdl_needed=no ;;
- arm*-*-freebsd*) host_cpu=arm host_os=linux libdl_needed=no ;;
-+sh3-*-linux*) host_cpu=sh3 host_os=linux libdl_needed=no ;;
-+sh4-*-linux*) host_cpu=sh4 host_os=linux libdl_needed=no ;;
- powerpc*-*-linux*) host_cpu=powerpc host_os=linux ;;
- powerpc*-*-openbsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;;
- powerpc*-*-freebsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;;
diff --git a/packages/jamvm/jamvm_1.4.5.bb b/packages/jamvm/jamvm_1.4.5.bb
index 489b4fb94b..3cc0431266 100644
--- a/packages/jamvm/jamvm_1.4.5.bb
+++ b/packages/jamvm/jamvm_1.4.5.bb
@@ -1,24 +1,4 @@
-DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
-HOMEPAGE = "http://jamvm.sourceforge.net/"
-LICENSE = "GPL"
-PRIORITY = "optional"
-SECTION = "interpreters"
+require jamvm.inc
-DEPENDS = "zlib classpath"
-RDEPENDS = "classpath (>= 0.18) classpath-common (>= 0.18)"
+SRC_URI += "file://jamvm-1.3.1-size-defaults.patch;patch=1"
-SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \
- file://jamvm-1.3.1-size-defaults.patch;patch=1"
-
-# This uses 32 bit arm, so force the instruction set to arm, not thumb
-ARM_INSTRUCTION_SET = "arm"
-
-inherit autotools update-alternatives
-
-EXTRA_OECONF = "--with-classpath-install-dir=${prefix}"
-CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
-
-PROVIDES = "virtual/java"
-ALTERNATIVE_NAME = "java"
-ALTERNATIVE_PATH = "${bindir}/jamvm"
-ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/jamvm/jamvm_1.5.0.bb b/packages/jamvm/jamvm_1.5.0.bb
new file mode 100644
index 0000000000..efa959f0f9
--- /dev/null
+++ b/packages/jamvm/jamvm_1.5.0.bb
@@ -0,0 +1,5 @@
+require jamvm.inc
+
+PR = "r0"
+
+
diff --git a/packages/jikes/jikes-initial.bb b/packages/jikes/jikes-initial.bb
index 701cfe1519..0e2f4d0748 100644
--- a/packages/jikes/jikes-initial.bb
+++ b/packages/jikes/jikes-initial.bb
@@ -1,6 +1,6 @@
SUMMARY = "Initial Java 1.4-compatible (and not higher) compiler"
-DEPENDS = "virtual/javac-native classpath-initial"
+DEPENDS = "jikes-native classpath-initial"
SRC_URI = ""
diff --git a/packages/linux/linux-2.6.23/kallsyms-missing-include.patch b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch
new file mode 100644
index 0000000000..9c31b1fa9a
--- /dev/null
+++ b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch
@@ -0,0 +1,19 @@
+A missing include in kallsyms.h.
+
+Upstream this is fixed in the 2.6.24 rc series:
+
+http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5a75983eef1193c43caebde6643a218bd8d8390e
+
+Leon Woestenberg <leon.woestenberg@gmail.com>
+
+--- a/include/linux/kallsyms.h
++++ b/include/linux/kallsyms.h
+@@ -6,6 +6,7 @@
+ #define _LINUX_KALLSYMS_H
+
+ #include <linux/errno.h>
++#include <linux/stddef.h>
+
+ #define KSYM_NAME_LEN 128
+ #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \
+
diff --git a/packages/midpath/midpath-cldc-native_0.1.bb b/packages/midpath/midpath-cldc-native_0.1.bb
index 27700d2e61..30f67854d4 100644
--- a/packages/midpath/midpath-cldc-native_0.1.bb
+++ b/packages/midpath/midpath-cldc-native_0.1.bb
@@ -4,9 +4,6 @@ inherit native
require midpath-cldc_${PV}.bb
-PROVIDES = "virtual/cldc-api-1.1-native"
-RPROVIDES = " "
-
PACKAGES = " "
do_install() {
diff --git a/packages/midpath/midpath-cldc-x11_0.1.bb b/packages/midpath/midpath-cldc-x11_0.1.bb
index 9db0c4a686..7c92621c36 100644
--- a/packages/midpath/midpath-cldc-x11_0.1.bb
+++ b/packages/midpath/midpath-cldc-x11_0.1.bb
@@ -1,7 +1,7 @@
require midpath.inc
-DEPENDS += " virtual/libx11 virtual/cldc-api-1.1"
+DEPENDS += "virtual/libx11 midpath-cldc"
do_configure() {
diff --git a/packages/midpath/midpath-cldc_0.1.bb b/packages/midpath/midpath-cldc_0.1.bb
index 51a1314467..7aeefa5264 100644
--- a/packages/midpath/midpath-cldc_0.1.bb
+++ b/packages/midpath/midpath-cldc_0.1.bb
@@ -1,9 +1,6 @@
require midpath.inc
-PROVIDES = "virtual/cldc-api-1.1"
-RPROVIDES = "virtual/cldc-api-1.1"
-
do_compile() {
mkdir -p ${S}/dist
@@ -18,21 +15,21 @@ cd ${S}/src/cldc-glue
make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -sourcepath ${S}/src/cldc-glue -source 1.3 -target 1.1"
make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes
# Make a jar
-${FASTJAR_CMD} cvf ${S}/dist/cldc1.1.jar -C ${S}/external/cldc1.1/classes .
+${FASTJAR_CMD} cvf ${S}/dist/midpath-cldc1.1.jar -C ${S}/external/cldc1.1/classes .
}
do_install() {
- install -d ${D}${datadir}/java
- install -m 0644 dist/cldc1.1.jar ${D}${datadir}/java
+ install -d ${D}${datadir}/midpath-cldc
+ install -m 0644 dist/midpath-cldc1.1.jar ${D}${datadir}/midpath-cldc
}
do_stage() {
- install -d ${STAGING_DATADIR}/java
- install -m 0644 dist/cldc1.1.jar ${STAGING_DATADIR}/java
+ install -d ${STAGING_DATADIR}/midpath-cldc
+ install -m 0644 dist/midpath-cldc1.1.jar ${STAGING_DATADIR}/midpath-cldc
}
PACKAGES = "${PN}"
-FILES_${PN} = "${datadir}/java/cldc1.1.jar"
+FILES_${PN} = "${datadir}/midpath-cldc/midpath-cldc1.1.jar"
diff --git a/packages/midpath/midpath.inc b/packages/midpath/midpath.inc
index 9fa8facf94..4bc3b71598 100644
--- a/packages/midpath/midpath.inc
+++ b/packages/midpath/midpath.inc
@@ -9,7 +9,7 @@ SRC_URI = "http://downloads.sourceforge.net/midpath/midpath-${PV}.tar.gz"
S = "${WORKDIR}/midpath-${PV}"
-DEPENDS = "virtual/javac-native fastjar-native classpath-minimal"
+DEPENDS = "virtual/javac-native fastjar-native classpath"
JAVAC_CMD = "${STAGING_BINDIR_NATIVE}/javac"
@@ -17,6 +17,6 @@ FASTJAR_CMD = "${STAGING_BINDIR_NATIVE}/fastjar"
JAVA_PATH = "${STAGING_DATADIR}/java"
-GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath-minimal/glibj.zip"
+GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath/glibj.zip"
-CLDC_PATH = ${JAVA_PATH}/cldc1.1.jar
+CLDC_PATH = ${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar
diff --git a/packages/jamvm/jamvm/.mtn2git_empty b/packages/obsolete/classpath/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/jamvm/jamvm/.mtn2git_empty
+++ b/packages/obsolete/classpath/.mtn2git_empty
diff --git a/packages/classpath/classpath-gtk_0.93.bb b/packages/obsolete/classpath/classpath-gtk_0.93.bb
index 3c9f073e26..3c9f073e26 100644
--- a/packages/classpath/classpath-gtk_0.93.bb
+++ b/packages/obsolete/classpath/classpath-gtk_0.93.bb
diff --git a/packages/classpath/classpath-gtk_cvs.bb b/packages/obsolete/classpath/classpath-gtk_cvs.bb
index 4d4895a319..4d4895a319 100644
--- a/packages/classpath/classpath-gtk_cvs.bb
+++ b/packages/obsolete/classpath/classpath-gtk_cvs.bb
diff --git a/packages/classpath/classpath-minimal-native_0.93.bb b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb
index e7862e6e3f..e7862e6e3f 100644
--- a/packages/classpath/classpath-minimal-native_0.93.bb
+++ b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb
diff --git a/packages/classpath/classpath-minimal-native_0.95.bb b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb
index 28b25a7cb9..28b25a7cb9 100644
--- a/packages/classpath/classpath-minimal-native_0.95.bb
+++ b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb
diff --git a/packages/classpath/classpath-minimal_0.90.bb b/packages/obsolete/classpath/classpath-minimal_0.90.bb
index e006e23c32..e006e23c32 100644
--- a/packages/classpath/classpath-minimal_0.90.bb
+++ b/packages/obsolete/classpath/classpath-minimal_0.90.bb
diff --git a/packages/classpath/classpath-minimal_0.95.bb b/packages/obsolete/classpath/classpath-minimal_0.95.bb
index cb38710ac1..cb38710ac1 100644
--- a/packages/classpath/classpath-minimal_0.95.bb
+++ b/packages/obsolete/classpath/classpath-minimal_0.95.bb
diff --git a/packages/obsolete/classpath/classpath.inc b/packages/obsolete/classpath/classpath.inc
new file mode 100644
index 0000000000..d9498c99d5
--- /dev/null
+++ b/packages/obsolete/classpath/classpath.inc
@@ -0,0 +1,30 @@
+DESCRIPTION = "GNU Classpath standard Java libraries"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Classpath"
+PROVIDES = "classpath"
+RPROVIDES = "classpath"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \
+ file://gconf_version.patch;patch=1 \
+ file://fix-endian-arm-floats.patch;patch=1"
+
+inherit autotools
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+}
+
+do_install() {
+ autotools_do_install
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
+}
+
+PACKAGES =+ "classpath-common classpath-examples classpath-tools"
+FILES_classpath-common += "${datadir}/classpath/glibj.zip"
+FILES_classpath-examples += "${datadir}/classpath/examples"
+FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools"
+FILES_classpath-dev += "${libdir}/*.so"
+FILES_classpath-dbg += "${libdir}/classpath/.debug"
diff --git a/packages/classpath/classpath_0.14.bb b/packages/obsolete/classpath/classpath_0.14.bb
index a20aa73992..a20aa73992 100644
--- a/packages/classpath/classpath_0.14.bb
+++ b/packages/obsolete/classpath/classpath_0.14.bb
diff --git a/packages/classpath/classpath_0.15.bb b/packages/obsolete/classpath/classpath_0.15.bb
index a20aa73992..a20aa73992 100644
--- a/packages/classpath/classpath_0.15.bb
+++ b/packages/obsolete/classpath/classpath_0.15.bb
diff --git a/packages/classpath/classpath_0.17.bb b/packages/obsolete/classpath/classpath_0.17.bb
index a20aa73992..a20aa73992 100644
--- a/packages/classpath/classpath_0.17.bb
+++ b/packages/obsolete/classpath/classpath_0.17.bb
diff --git a/packages/classpath/classpath_0.18.bb b/packages/obsolete/classpath/classpath_0.18.bb
index 8696501fcf..8696501fcf 100644
--- a/packages/classpath/classpath_0.18.bb
+++ b/packages/obsolete/classpath/classpath_0.18.bb
diff --git a/packages/classpath/classpath_0.19.bb b/packages/obsolete/classpath/classpath_0.19.bb
index 8696501fcf..8696501fcf 100644
--- a/packages/classpath/classpath_0.19.bb
+++ b/packages/obsolete/classpath/classpath_0.19.bb
diff --git a/packages/classpath/classpath_0.20.bb b/packages/obsolete/classpath/classpath_0.20.bb
index 8696501fcf..8696501fcf 100644
--- a/packages/classpath/classpath_0.20.bb
+++ b/packages/obsolete/classpath/classpath_0.20.bb
diff --git a/packages/classpath/classpath_cvs.bb b/packages/obsolete/classpath/classpath_cvs.bb
index 943af376a7..943af376a7 100644
--- a/packages/classpath/classpath_cvs.bb
+++ b/packages/obsolete/classpath/classpath_cvs.bb
diff --git a/packages/quilt/quilt-0.39/.mtn2git_empty b/packages/obsolete/classpath/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/quilt/quilt-0.39/.mtn2git_empty
+++ b/packages/obsolete/classpath/files/.mtn2git_empty
diff --git a/packages/classpath/files/disable-automake-checks-v2.patch b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch
index 0c1df1acae..0c1df1acae 100644
--- a/packages/classpath/files/disable-automake-checks-v2.patch
+++ b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch
diff --git a/packages/classpath/files/disable-automake-checks.patch b/packages/obsolete/classpath/files/disable-automake-checks.patch
index d6a55428ad..d6a55428ad 100644
--- a/packages/classpath/files/disable-automake-checks.patch
+++ b/packages/obsolete/classpath/files/disable-automake-checks.patch
diff --git a/packages/classpath/files/fix-endian-arm-floats.patch b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch
index a9af0611b2..a9af0611b2 100644
--- a/packages/classpath/files/fix-endian-arm-floats.patch
+++ b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch
diff --git a/packages/classpath/files/gconf_version.patch b/packages/obsolete/classpath/files/gconf_version.patch
index b1be1209a2..b1be1209a2 100644
--- a/packages/classpath/files/gconf_version.patch
+++ b/packages/obsolete/classpath/files/gconf_version.patch
diff --git a/packages/obsolete/jamvm/.mtn2git_empty b/packages/obsolete/jamvm/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/.mtn2git_empty
diff --git a/packages/obsolete/jamvm/files/.mtn2git_empty b/packages/obsolete/jamvm/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/files/.mtn2git_empty
diff --git a/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch
new file mode 100644
index 0000000000..a41beee982
--- /dev/null
+++ b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch
@@ -0,0 +1,12 @@
+--- jamvm-1.3.1.orig/src/jam.h 2005-07-17 23:53:34.000000000 +0200
++++ jamvm-1.3.1/src/jam.h 2005-07-17 23:54:17.000000000 +0200
+@@ -548,7 +548,9 @@
+ #endif
+
+ /* default size of the Java stack */
++#ifndef DEFAULT_STACK
+ #define DEFAULT_STACK 64*KB
++#endif
+
+ /* size of emergency area - big enough to create
+ a StackOverflow exception */
diff --git a/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty
diff --git a/packages/jamvm/jamvm-1.3.0/heap-size.patch b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch
index 36d681889d..36d681889d 100644
--- a/packages/jamvm/jamvm-1.3.0/heap-size.patch
+++ b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch
diff --git a/packages/jamvm/jamvm_1.3.0.bb b/packages/obsolete/jamvm/jamvm_1.3.0.bb
index ffdf74938f..ffdf74938f 100644
--- a/packages/jamvm/jamvm_1.3.0.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.0.bb
diff --git a/packages/jamvm/jamvm_1.3.1.bb b/packages/obsolete/jamvm/jamvm_1.3.1.bb
index 20b1535707..20b1535707 100644
--- a/packages/jamvm/jamvm_1.3.1.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.1.bb
diff --git a/packages/jamvm/jamvm_1.3.2.bb b/packages/obsolete/jamvm/jamvm_1.3.2.bb
index 9727fd6cda..9727fd6cda 100644
--- a/packages/jamvm/jamvm_1.3.2.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.2.bb
diff --git a/packages/jamvm/jamvm_1.4.1.bb b/packages/obsolete/jamvm/jamvm_1.4.1.bb
index 9727fd6cda..9727fd6cda 100644
--- a/packages/jamvm/jamvm_1.4.1.bb
+++ b/packages/obsolete/jamvm/jamvm_1.4.1.bb
diff --git a/packages/obsolete/quilt/.mtn2git_empty b/packages/obsolete/quilt/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/quilt/.mtn2git_empty
diff --git a/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty
diff --git a/packages/quilt/quilt-0.39/non-gnu.patch b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch
index 8b07bc2923..8b07bc2923 100644
--- a/packages/quilt/quilt-0.39/non-gnu.patch
+++ b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch
diff --git a/packages/quilt/quilt-0.39/nostrip.patch b/packages/obsolete/quilt/quilt-0.39/nostrip.patch
index 4dedad96d4..4dedad96d4 100644
--- a/packages/quilt/quilt-0.39/nostrip.patch
+++ b/packages/obsolete/quilt/quilt-0.39/nostrip.patch
diff --git a/packages/quilt/quilt-native_0.39.bb b/packages/obsolete/quilt/quilt-native_0.39.bb
index 7caa9f620c..7caa9f620c 100644
--- a/packages/quilt/quilt-native_0.39.bb
+++ b/packages/obsolete/quilt/quilt-native_0.39.bb
diff --git a/packages/quilt/quilt_0.39.bb b/packages/obsolete/quilt/quilt_0.39.bb
index 5d8ae086c2..5d8ae086c2 100644
--- a/packages/quilt/quilt_0.39.bb
+++ b/packages/obsolete/quilt/quilt_0.39.bb
diff --git a/packages/quilt/quilt_0.39.inc b/packages/obsolete/quilt/quilt_0.39.inc
index 4fbbb03316..4fbbb03316 100644
--- a/packages/quilt/quilt_0.39.inc
+++ b/packages/obsolete/quilt/quilt_0.39.inc
diff --git a/packages/pngcrush/.mtn2git_empty b/packages/pngcrush/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pngcrush/.mtn2git_empty
diff --git a/packages/pngcrush/pngcrush-native_1.6.4.bb b/packages/pngcrush/pngcrush-native_1.6.4.bb
new file mode 100644
index 0000000000..4e119a167b
--- /dev/null
+++ b/packages/pngcrush/pngcrush-native_1.6.4.bb
@@ -0,0 +1,9 @@
+require pngcrush_${PV}.bb
+
+inherit native
+
+S = "${WORKDIR}/pngcrush-${PV}"
+
+do_stage() {
+ install -m 755 ${S}/pngcrush ${STAGING_BINDIR}/
+}
diff --git a/packages/pngcrush/pngcrush_1.6.4.bb b/packages/pngcrush/pngcrush_1.6.4.bb
new file mode 100644
index 0000000000..9f0413a6cc
--- /dev/null
+++ b/packages/pngcrush/pngcrush_1.6.4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Tool to optimize PNG images"
+SECTION = "console/graphics"
+HOMEPAGE = "http://pmt.sourceforge.net/pngcrush"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pmt/pngcrush-${PV}.tar.gz"
+
+#DEPENDS += "libsdl-net smpeg"
+
+EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LD='${CC}'"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 755 ${PN} ${D}${bindir}
+}
diff --git a/packages/ppp-dialin/ppp-dialin_0.1.bb b/packages/ppp-dialin/ppp-dialin_0.1.bb
index f0d410e455..6861d8ad44 100644
--- a/packages/ppp-dialin/ppp-dialin_0.1.bb
+++ b/packages/ppp-dialin/ppp-dialin_0.1.bb
@@ -2,7 +2,7 @@ SECTION = "console/network"
DESCRIPTION = "Enables PPP dial-in through a serial connection"
DEPENDS = "ppp"
RDEPENDS = "ppp"
-PR = "r4"
+PR = "r5"
LICENSE = "MIT"
SRC_URI = "file://host-peer \
@@ -16,6 +16,7 @@ do_install() {
install -m 0755 ${WORKDIR}/ppp-dialin ${D}${sbindir}
}
+PACKAGE_ARCH = "all"
pkg_postinst() {
if test "x$D" != "x"; then
diff --git a/packages/ppp-dsl/files/.mtn2git_empty b/packages/ppp-dsl/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp-dsl/files/.mtn2git_empty
diff --git a/packages/ppp-dsl/dsl-provider b/packages/ppp-dsl/files/dsl-provider
index 6feaf55752..6feaf55752 100644
--- a/packages/ppp-dsl/dsl-provider
+++ b/packages/ppp-dsl/files/dsl-provider
diff --git a/packages/ppp-dsl/ppp_on_boot.dsl b/packages/ppp-dsl/files/ppp_on_boot.dsl
index f1d5183b38..f1d5183b38 100755
--- a/packages/ppp-dsl/ppp_on_boot.dsl
+++ b/packages/ppp-dsl/files/ppp_on_boot.dsl
diff --git a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb b/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb
deleted file mode 100644
index 216c87fffd..0000000000
--- a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-include ppp-dsl_0.1.bb
-
-RDEPENDS = "ppp rp-pppoe"
-
-S = "${WORKDIR}/ppp-dsl-0.1"
diff --git a/packages/ppp-dsl/ppp-dsl_0.1.bb b/packages/ppp-dsl/ppp-dsl_0.1.bb
index 8796da86da..8d63e8fc47 100644
--- a/packages/ppp-dsl/ppp-dsl_0.1.bb
+++ b/packages/ppp-dsl/ppp-dsl_0.1.bb
@@ -4,7 +4,7 @@ LICENSE = "PD"
DEPENDS = "ppp rp-pppoe"
RDEPENDS = "ppp rp-pppoe"
RRECOMMENDS = "kernel-module-ppp-async kernel-module-ppp-generic kernel-module-slhc"
-PR = "r2"
+PR = "r5"
SRC_URI = "file://dsl-provider \
file://ppp_on_boot.dsl"
@@ -25,4 +25,6 @@ else
fi
}
-CONFFILES_${PN}_nylon = "${sysconfdir}/ppp/peers/dsl-provider"
+PACKAGE_ARCH = "all"
+
+CONFFILES_${PN} = "${sysconfdir}/ppp/peers/dsl-provider"
diff --git a/packages/ppp/ppp-gprs/.mtn2git_empty b/packages/ppp/ppp-gprs/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/chats/.mtn2git_empty b/packages/ppp/ppp-gprs/chats/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/chats/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/chats/chat-gprs b/packages/ppp/ppp-gprs/chats/chat-gprs
new file mode 100644
index 0000000000..b90e5ff2cf
--- /dev/null
+++ b/packages/ppp/ppp-gprs/chats/chat-gprs
@@ -0,0 +1,9 @@
+# GPRS AP (Access Point) name should be passed via -T switch
+
+'' ATZ
+OK AT+CGDCONT=1,"IP","\T"
+# We setup profile #1 in the above command, and then use it to call
+# GPRS. This is correct, but some buggy phone may parse only "ATD*99#"
+OK "ATD*99***1#"
+# OK "ATD*99#"
+CONNECT ''
diff --git a/packages/ppp/ppp-gprs/peers/.mtn2git_empty b/packages/ppp/ppp-gprs/peers/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/peers/_gprs b/packages/ppp/ppp-gprs/peers/_gprs
new file mode 100644
index 0000000000..cc316951a0
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/_gprs
@@ -0,0 +1,68 @@
+# This is generic pppd config for GPRS connection
+# To connect to specific provider, one
+# more provider-specific config
+# file is required, which will
+# usually just set chat utility params
+# to make connection and call this one.
+# (And in most cases that will be symlink
+# to a file with well-known settings).
+#
+# Usage:
+# pppd <modem_device> call gprs call <country>-<provider>
+# where /etc/ppp/peers/<country>-<provider> ends with line
+# "call _gprs"
+# Example:
+# pppd /dev/rfcomm0 call ua-life
+# Debugging PPP protocol problems:
+# pppd /dev/rfcomm0 call ua-life debug nodetach
+#
+# By default, pppd will go to
+# background once connection is
+# established. 'nodetach' option will
+# prevent this. If you want pppd to
+# even establish connection in
+# background, comment 'updetach' below.
+#
+# To finish connection, use Ctrl+C if
+# 'nodetach' was used, or
+# kill `head -1 /var/run/ppp-gprs.pid`
+# otherwise. If you are sure there is
+# only one pppd connection, you can use
+# killall pppd
+
+##
+## pppd options
+##
+
+# create /var/run/ppp-gprs.pid
+# with pid for this connection
+linkname gprs
+# Connect in foreground, but go
+# to background after that
+updetach
+
+# Treat port as a modem and use
+# reasonable speed
+modem
+crtscts
+115200
+
+# Don't do CCP (compression)
+# negotiation, some providers are
+# rumored to be buggy with this, and
+# most of the rest simply don't support.
+noccp
+# We don't request provider to auth
+# to us
+noauth
+# Don't try to make up our IP address
+noipdefault
+# We want provider to supply us with
+# IP addresses
+ipcp-accept-remote
+ipcp-accept-local
+# Ask provider for DNS and use it
+usepeerdns
+# Route all Internet traffic thru
+# this connection
+defaultroute
diff --git a/packages/ppp/ppp-gprs/peers/_gprs-ap-internet b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet
new file mode 100644
index 0000000000..d55eeb0266
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet
@@ -0,0 +1,3 @@
+# -T options sets value of GPRS AP name. Change this for your cell provider
+connect '/usr/sbin/chat -V -f /etc/ppp/chats/chat-gprs -T internet'
+call gprs
diff --git a/packages/ppp/ppp-gprs_1.0.bb b/packages/ppp/ppp-gprs_1.0.bb
new file mode 100644
index 0000000000..2db6e808f4
--- /dev/null
+++ b/packages/ppp/ppp-gprs_1.0.bb
@@ -0,0 +1,22 @@
+SECTION = "console/network"
+DESCRIPTION = "PPP scripts for easy GPRS connection"
+LICENSE = "GPL"
+RDEPENDS = "ppp"
+PR = "r1"
+
+SRC_URI = "file://peers/* file://chats/*"
+
+do_install () {
+ install -d ${D}${sysconfdir}/ppp/peers/
+ install -d ${D}${sysconfdir}/ppp/chats/
+ install -m 0644 ${WORKDIR}/peers/* ${D}${sysconfdir}/ppp/peers/
+ install -m 0644 ${WORKDIR}/chats/* ${D}${sysconfdir}/ppp/chats/
+
+ # Add links for providers sharing same well-known config
+ ln -sf _gprs-ap-internet ${D}${sysconfdir}/ppp/peers/ua-life
+}
+
+PACKAGE_ARCH = "all"
+
+# In worst case, user may need to edit anything
+CONFFILES_${PN} = "${sysconfdir}/ppp/peers/_gprs ${sysconfdir}/ppp/chats/chat-gprs"
diff --git a/packages/quilt/quilt-0.45/non-gnu.patch b/packages/quilt/files/non-gnu.patch
index c1cbfb3983..c1cbfb3983 100644
--- a/packages/quilt/quilt-0.45/non-gnu.patch
+++ b/packages/quilt/files/non-gnu.patch
diff --git a/packages/quilt/files/install.patch b/packages/quilt/quilt-0.45/install.patch
index 4122370d6a..4122370d6a 100644
--- a/packages/quilt/files/install.patch
+++ b/packages/quilt/quilt-0.45/install.patch
diff --git a/packages/quilt/quilt-0.46/.mtn2git_empty b/packages/quilt/quilt-0.46/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/quilt/quilt-0.46/.mtn2git_empty
diff --git a/packages/quilt/quilt-0.46/aclocal.patch b/packages/quilt/quilt-0.46/aclocal.patch
new file mode 100644
index 0000000000..1245f74922
--- /dev/null
+++ b/packages/quilt/quilt-0.46/aclocal.patch
@@ -0,0 +1,126 @@
+Add the aclocal.m4 as acinclude.m4
+
+Index: quilt-0.46/acinclude.m4
+===================================================================
+--- /dev/null
++++ quilt-0.46/acinclude.m4
+@@ -0,0 +1,119 @@
++dnl Allow configure to specify a specific binary
++dnl 1: Environment variable
++dnl 2: binary name
++dnl 3: optional list of alternative binary names
++dnl 4: optional list of additional search directories
++AC_DEFUN([QUILT_COMPAT_PROG_PATH],[
++ m4_define([internal_$2_cmd],[esyscmd(ls compat/$2.in 2>/dev/null)])
++
++ AC_ARG_WITH($2, AC_HELP_STRING(
++ [--with-$2], [name of the $2 executable to use]
++ m4_if(internal_$2_cmd,[],[],[ (use --without-$2
++ to use an internal mechanism)])),
++ [
++ if test x"$withval" = xnone; then
++ AC_MSG_ERROR([Invalid configure argument. use --without-$2])
++ fi
++ if test x"$withval" != xno; then
++ AC_MSG_CHECKING(for $2)
++ $1="$withval"
++ if test -e "$$1"; then
++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then
++ AC_MSG_ERROR([$$1 is not an executable file])
++ fi
++ fi
++ AC_MSG_RESULT([$$1])
++ if test ! -e "$$1"; then
++ AC_MSG_WARN([$$1 does not exist])
++ fi
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ],[
++ m4_if([$3],[],[
++ AC_PATH_PROG($1,$2,,$PATH:$4)
++ ],[
++ AC_PATH_PROGS($1,$3,,$PATH:$4)
++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ])
++ m4_if([$4],[],[],[
++ if test -n "$$1"; then
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++ for dir in "$4"; do
++ if test "`dirname $$1`" = "$dir"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ break
++ fi
++ done
++ IFS="$as_save_IFS"
++ fi
++ ])
++ ])
++ if test -z "$$1"; then
++ m4_if(internal_$2_cmd,[],[
++ AC_MSG_ERROR([Please specify the location of $2 with the option '--with-$2'])
++ ],[
++ AC_MSG_WARN([Using internal $2 mechanism. Use option '--with-$2' to override])
++ COMPAT_PROGRAMS="$COMPAT_PROGRAMS $2"
++ $1=$2
++ INTERNAL_$1=1
++ ])
++ fi
++ AC_SUBST($1)
++])
++
++dnl Allow configure to specify a specific binary
++dnl This variant is for optional binaries.
++dnl 1: Environment variable
++dnl 2: binary name
++dnl 3: optional list of alternative binary names
++dnl 4: optional list of additional search directories
++AC_DEFUN([QUILT_COMPAT_PROG_PATH_OPT],[
++ AC_ARG_WITH($2, AC_HELP_STRING(
++ [--with-$2], [name of the $2 executable to use]),
++ [
++ if test x"$withval" != xno; then
++ AC_MSG_CHECKING(for $2)
++ $1="$withval"
++ if test -e "$$1"; then
++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then
++ AC_MSG_ERROR([$$1 is not an executable file])
++ fi
++ fi
++ AC_MSG_RESULT([$$1])
++ if test ! -e "$$1"; then
++ AC_MSG_WARN([$$1 does not exist])
++ fi
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ],[
++ m4_if([$3],[],[
++ AC_PATH_PROG($1,$2,,$PATH:$4)
++ ],[
++ AC_PATH_PROGS($1,$3,,$PATH:$4)
++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ])
++ m4_if([$4],[],[],[
++ if test -n "$$1"; then
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++ for dir in "$4"; do
++ if test "`dirname $$1`" = "$dir"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ break
++ fi
++ done
++ IFS="$as_save_IFS"
++ fi
++ ])
++ if test -z "$$1"; then
++ AC_MSG_WARN([$2 not found, some optional functionalities will be missing])
++ fi
++ ])
++ if test -z "$$1"; then
++ $1=$2
++ fi
++ AC_SUBST($1)
++])
diff --git a/packages/quilt/quilt-0.46/install.patch b/packages/quilt/quilt-0.46/install.patch
new file mode 100644
index 0000000000..3c9030d377
--- /dev/null
+++ b/packages/quilt/quilt-0.46/install.patch
@@ -0,0 +1,13 @@
+Index: quilt-0.46/Makefile.in
+===================================================================
+--- quilt-0.46.orig/Makefile.in
++++ quilt-0.46/Makefile.in
+@@ -12,7 +12,7 @@ datadir := @datadir@
+ docdir := @docdir@
+ mandir := @mandir@
+ localedir := $(datadir)/locale
+-etcdir := $(subst /usr/etc,/etc,$(prefix)/etc)
++etcdir := @sysconfdir@
+
+ INSTALL := @INSTALL@
+ POD2MAN := @POD2MAN@
diff --git a/packages/quilt/quilt-native.inc b/packages/quilt/quilt-native.inc
index 5861b2229c..f815969344 100644
--- a/packages/quilt/quilt-native.inc
+++ b/packages/quilt/quilt-native.inc
@@ -1,4 +1,4 @@
-require quilt_${PV}.inc
+require quilt.inc
SRC_URI_append_build-darwin = "? file://non-gnu.patch;patch=1 "
RDEPENDS_${PN} = "diffstat-native patch-native bzip2-native util-linux-native"
diff --git a/packages/quilt/quilt-native_0.45.bb b/packages/quilt/quilt-native_0.45.bb
index 033f323a13..302df25afd 100644
--- a/packages/quilt/quilt-native_0.45.bb
+++ b/packages/quilt/quilt-native_0.45.bb
@@ -1,2 +1 @@
-PV="0.45"
require quilt-native.inc
diff --git a/packages/quilt/quilt-native_0.46.bb b/packages/quilt/quilt-native_0.46.bb
new file mode 100644
index 0000000000..302df25afd
--- /dev/null
+++ b/packages/quilt/quilt-native_0.46.bb
@@ -0,0 +1 @@
+require quilt-native.inc
diff --git a/packages/quilt/quilt-package.inc b/packages/quilt/quilt-package.inc
index bcdbcf026a..900884b917 100644
--- a/packages/quilt/quilt-package.inc
+++ b/packages/quilt/quilt-package.inc
@@ -1,10 +1,21 @@
+require quilt.inc
+
+RDEPENDS_${PN} += "patch diffstat bzip2 util-linux"
+
+SRC_URI += "file://aclocal.patch;patch=1"
+
+inherit autotools gettext
+
+do_install () {
+ oe_runmake 'BUILD_ROOT=${D}' install
+
+ # Remove the compat symlinks
+ rm -rf "${D}"/usr/share/quilt/compat
+}
+
PACKAGES += "guards guards-doc"
FILES_${PN} = "${sysconfdir} ${datadir}/quilt \
${bindir}/quilt ${libdir}/quilt"
FILES_guards = "${bindir}/guards"
FILES_${PN}-doc = "${mandir}/man1/quilt.1 ${docdir}/${P}"
FILES_guards-doc = "${mandir}/man1/guards.1"
-
-do_install () {
- oe_runmake 'BUILD_ROOT=${D}' install
-}
diff --git a/packages/quilt/quilt.inc b/packages/quilt/quilt.inc
index ee90455fca..33bc0f62ea 100644
--- a/packages/quilt/quilt.inc
+++ b/packages/quilt/quilt.inc
@@ -2,8 +2,9 @@ DESCRIPTION = "Tool to work with series of patches."
HOMEPAGE = "http://savannah.nongnu.org/projects/quilt/"
SECTION = "devel"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
-SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz "
+SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz \
+ file://install.patch;patch=1"
S = "${WORKDIR}/quilt-${PV}"
diff --git a/packages/quilt/quilt_0.45.bb b/packages/quilt/quilt_0.45.bb
index d809c83518..de38f64782 100644
--- a/packages/quilt/quilt_0.45.bb
+++ b/packages/quilt/quilt_0.45.bb
@@ -1,9 +1 @@
-RDEPENDS_${PN} += "patch diffstat bzip2 util-linux"
-
-require quilt_${PV}.inc
-
-SRC_URI += "file://aclocal.patch;patch=1"
-
-inherit autotools gettext
-
require quilt-package.inc
diff --git a/packages/quilt/quilt_0.45.inc b/packages/quilt/quilt_0.45.inc
deleted file mode 100644
index bf6267b56c..0000000000
--- a/packages/quilt/quilt_0.45.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-require quilt.inc
-
-SRC_URI += "file://install.patch;patch=1"
diff --git a/packages/quilt/quilt_0.46.bb b/packages/quilt/quilt_0.46.bb
new file mode 100644
index 0000000000..de38f64782
--- /dev/null
+++ b/packages/quilt/quilt_0.46.bb
@@ -0,0 +1 @@
+require quilt-package.inc
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch
new file mode 100644
index 0000000000..81ce2db335
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch
@@ -0,0 +1,11 @@
+--- a/src/configure.in.org 2008-01-14 21:08:38.000000000 +0200
++++ a/src/configure.in 2008-01-14 21:20:09.000000000 +0200
+@@ -208,7 +208,7 @@
+ return 2;
+ }
+ }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+-$ECHO "no defaults for cross-compiling"; exit 0)
++$ECHO "no defaults for cross-compiling"; exit 1)
+ ])
+
+ if test "$rpppoe_cv_pack_bitfields" = "rev" ; then
diff --git a/packages/rp-pppoe/rp-pppoe_3.8.bb b/packages/rp-pppoe/rp-pppoe_3.8.bb
index 35faf8839b..9852522da1 100644
--- a/packages/rp-pppoe/rp-pppoe_3.8.bb
+++ b/packages/rp-pppoe/rp-pppoe_3.8.bb
@@ -5,13 +5,14 @@ LICENSE = "GPLv2"
RDEPENDS_${PN} = "ppp"
RDEPENDS_${PN}-server = "${PN}"
RRECOMMENDS_${PN} = "ppp-oe"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://www.roaringpenguin.com/files/download/${P}.tar.gz \
file://top-autoconf.patch;patch=1 \
file://configure_in_cross.patch;patch=1 \
file://pppoe-src-restrictions.patch;patch=1 \
file://update-config.patch;patch=1 \
+ file://dont-swallow-errors.patch;patch=1 \
file://pppoe-server.default \
file://pppoe-server.init"
diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty
diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch
new file mode 100644
index 0000000000..affdd32075
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch
@@ -0,0 +1,4365 @@
+This patch is extracted and cleaned up version of filename character
+set conversion patches for vsftpd by Dmitriy Balashov,
+http://vsftpd.devnet.ru/eng/ . It provides dirty-pragmatics approach
+towards serving Windows codepages encoded filenames to Windows clients
+out of normal utf-8 filesystem.
+
+These patches will never be accepted upstream, they should never be merged
+to main vsftpd package, and they for sure void "vs" in "vsftpd". So again,
+they are for users to prefer stone-dead pragmatics. Use at you own risk.
+
+- Paul Sokolovsky, pmiscml@gmail.com
+
+diff -urN vsftpd-2.0.5.org/charconv.c vsftpd-2.0.5/charconv.c
+--- vsftpd-2.0.5.org/charconv.c 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/charconv.c 2008-01-13 20:39:49.000000000 +0200
+@@ -0,0 +1,462 @@
++/*
++ * Part of Very Secure FTPd
++ * Licence: GPL v2
++ * Author: Dmitriy Balashov
++ * charconv.c
++ */
++
++#include "charconv.h"
++#include "tunables.h"
++#include "session.h"
++#include "str.h"
++#include "sysutil.h"
++
++#include "char_maps/utf8.map"
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#include "char_maps/cyrillic.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#include "char_maps/western.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#include "char_maps/central.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#include "char_maps/soutern.map"
++#endif
++
++/* Tables mapping supported codepage names to runtime variables */
++static struct available_charsets
++{
++ const char* p_charset_name;
++ int p_variable;
++}
++available_charsets_array[] =
++{
++ { VSFTP_CP_NONE , VSFTP_C_NONE },
++ // Cyrillic
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ { VSFTP_CP_UTF_8 , VSFTP_C_UTF8 },
++ { VSFTP_CP_UTF8 , VSFTP_C_UTF8 },
++ { VSFTP_CP_WIN_1251 , VSFTP_C_1251 },
++ { VSFTP_CP_WIN1251 , VSFTP_C_1251 },
++ { VSFTP_CP_CP1251 , VSFTP_C_1251 },
++ { VSFTP_CP_1251 , VSFTP_C_1251 },
++ { VSFTP_CP_KOI8_R , VSFTP_C_878R },
++ { VSFTP_CP_KOI8R , VSFTP_C_878R },
++ { VSFTP_CP_CP878 , VSFTP_C_878R },
++ { VSFTP_CP_878 , VSFTP_C_878R },
++ { VSFTP_CP_CP878R , VSFTP_C_878R },
++ { VSFTP_CP_878R , VSFTP_C_878R },
++ { VSFTP_CP_KOI8_U , VSFTP_C_878U },
++ { VSFTP_CP_KOI8U , VSFTP_C_878U },
++ { VSFTP_CP_CP878U , VSFTP_C_878U },
++ { VSFTP_CP_878U , VSFTP_C_878U },
++ { VSFTP_CP_IBM866 , VSFTP_C_866 },
++ { VSFTP_CP_CP866 , VSFTP_C_866 },
++ { VSFTP_CP_866 , VSFTP_C_866 },
++ { VSFTP_CP_ISO8859_5 , VSFTP_C_ISO5 },
++ { VSFTP_CP_ISO5 , VSFTP_C_ISO5 },
++#endif
++ // Western European
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ { VSFTP_CP_ISO8859_1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_ISO1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_LATIN1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_ISO8859_15, VSFTP_C_ISO15 },
++ { VSFTP_CP_ISO15 , VSFTP_C_ISO15 },
++ { VSFTP_CP_LATIN9 , VSFTP_C_ISO15 },
++ { VSFTP_CP_WIN_1252 , VSFTP_C_1252 },
++ { VSFTP_CP_WIN1252 , VSFTP_C_1252 },
++ { VSFTP_CP_CP1252 , VSFTP_C_1252 },
++ { VSFTP_CP_1252 , VSFTP_C_1252 },
++#endif
++ // Central European
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ { VSFTP_CP_ISO8859_2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_ISO2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_LATIN2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_ISO8859_16, VSFTP_C_ISO16 },
++ { VSFTP_CP_ISO16 , VSFTP_C_ISO16 },
++ { VSFTP_CP_WIN_1250 , VSFTP_C_1250 },
++ { VSFTP_CP_WIN1250 , VSFTP_C_1250 },
++ { VSFTP_CP_CP1250 , VSFTP_C_1250 },
++ { VSFTP_CP_1250 , VSFTP_C_1250 },
++#endif
++ // Soutern European
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ { VSFTP_CP_ISO8859_3 , VSFTP_C_ISO3 },
++ { VSFTP_CP_ISO3 , VSFTP_C_ISO3 },
++ { VSFTP_CP_LATIN3 , VSFTP_C_ISO3 },
++#endif
++ { 0, 0 }
++};
++
++/* Available convertions */
++static struct available_convertions
++{
++ int local;
++ int remote;
++ int localCharset;
++ int remoteCharset;
++}
++available_convertions_array[] =
++{ // Cyrillic
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ { VSFTP_C_UTF8 , VSFTP_C_1251 , VSFTP_CS_UTF8CYR , VSFTP_CS_1251 },
++ { VSFTP_C_UTF8 , VSFTP_C_878R , VSFTP_CS_UTF8CYR , VSFTP_CS_878R },
++ { VSFTP_C_UTF8 , VSFTP_C_878U , VSFTP_CS_UTF8CYR , VSFTP_CS_878U },
++ { VSFTP_C_UTF8 , VSFTP_C_866 , VSFTP_CS_UTF8CYR , VSFTP_CS_866 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO5 , VSFTP_CS_UTF8CYR , VSFTP_CS_ISO5 },
++ { VSFTP_C_1251 , VSFTP_C_UTF8 , VSFTP_CS_1251 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_1251 , VSFTP_C_878R , VSFTP_CS_1251 , VSFTP_CS_878R },
++ { VSFTP_C_1251 , VSFTP_C_878U , VSFTP_CS_1251 , VSFTP_CS_878U },
++ { VSFTP_C_1251 , VSFTP_C_866 , VSFTP_CS_1251 , VSFTP_CS_866 },
++ { VSFTP_C_1251 , VSFTP_C_ISO5 , VSFTP_CS_1251 , VSFTP_CS_ISO5 },
++ { VSFTP_C_878R , VSFTP_C_UTF8 , VSFTP_CS_878R , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_878R , VSFTP_C_1251 , VSFTP_CS_878R , VSFTP_CS_1251 },
++ { VSFTP_C_878R , VSFTP_C_878U , VSFTP_CS_878R , VSFTP_CS_878U },
++ { VSFTP_C_878R , VSFTP_C_866 , VSFTP_CS_878R , VSFTP_CS_866 },
++ { VSFTP_C_878R , VSFTP_C_ISO5 , VSFTP_CS_878R , VSFTP_CS_ISO5 },
++ { VSFTP_C_866 , VSFTP_C_UTF8 , VSFTP_CS_866 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_866 , VSFTP_C_1251 , VSFTP_CS_866 , VSFTP_CS_1251 },
++ { VSFTP_C_866 , VSFTP_C_878R , VSFTP_CS_866 , VSFTP_CS_878R },
++ { VSFTP_C_866 , VSFTP_C_878U , VSFTP_CS_866 , VSFTP_CS_878U },
++ { VSFTP_C_866 , VSFTP_C_ISO5 , VSFTP_CS_866 , VSFTP_CS_ISO5 },
++ { VSFTP_C_ISO5 , VSFTP_C_UTF8 , VSFTP_CS_ISO5 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_ISO5 , VSFTP_C_1251 , VSFTP_CS_ISO5 , VSFTP_CS_1251 },
++ { VSFTP_C_ISO5 , VSFTP_C_878R , VSFTP_CS_ISO5 , VSFTP_CS_878R },
++ { VSFTP_C_ISO5 , VSFTP_C_878U , VSFTP_CS_ISO5 , VSFTP_CS_878U },
++ { VSFTP_C_ISO5 , VSFTP_C_866 , VSFTP_CS_ISO5 , VSFTP_CS_866 },
++#endif
++ // Western European
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ { VSFTP_C_UTF8 , VSFTP_C_ISO1 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO1 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO15 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO15 },
++ { VSFTP_C_UTF8 , VSFTP_C_1252 , VSFTP_CS_UTF8WEST , VSFTP_CS_1252 },
++ { VSFTP_C_ISO1 , VSFTP_C_UTF8 , VSFTP_CS_ISO1 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_ISO1 , VSFTP_C_ISO15 , VSFTP_CS_ISO1 , VSFTP_CS_ISO15 },
++ { VSFTP_C_ISO1 , VSFTP_C_1252 , VSFTP_CS_ISO1 , VSFTP_CS_1252 },
++ { VSFTP_C_ISO15 , VSFTP_C_UTF8 , VSFTP_CS_ISO15 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_ISO15 , VSFTP_C_ISO1 , VSFTP_CS_ISO15 , VSFTP_CS_ISO1 },
++ { VSFTP_C_ISO15 , VSFTP_C_1252 , VSFTP_CS_ISO15 , VSFTP_CS_1252 },
++ { VSFTP_C_1252 , VSFTP_C_UTF8 , VSFTP_CS_1252 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_1252 , VSFTP_C_ISO1 , VSFTP_CS_1252 , VSFTP_CS_ISO1 },
++ { VSFTP_C_1252 , VSFTP_C_ISO15 , VSFTP_CS_1252 , VSFTP_CS_ISO15 },
++#endif
++ // Central European
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ { VSFTP_C_UTF8 , VSFTP_C_ISO2 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO2 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO16 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO16 },
++ { VSFTP_C_UTF8 , VSFTP_C_1250 , VSFTP_CS_UTF8CENT , VSFTP_CS_1250 },
++ { VSFTP_C_ISO2 , VSFTP_C_UTF8 , VSFTP_CS_ISO2 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_ISO2 , VSFTP_C_ISO16 , VSFTP_CS_ISO2 , VSFTP_CS_ISO16 },
++ { VSFTP_C_ISO2 , VSFTP_C_1250 , VSFTP_CS_ISO2 , VSFTP_CS_1250 },
++ { VSFTP_C_ISO16 , VSFTP_C_UTF8 , VSFTP_CS_ISO16 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_ISO16 , VSFTP_C_ISO2 , VSFTP_CS_ISO16 , VSFTP_CS_ISO2 },
++ { VSFTP_C_ISO16 , VSFTP_C_1250 , VSFTP_CS_ISO16 , VSFTP_CS_1250 },
++ { VSFTP_C_1250 , VSFTP_C_UTF8 , VSFTP_CS_1250 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_1250 , VSFTP_C_ISO2 , VSFTP_CS_1250 , VSFTP_CS_ISO2 },
++ { VSFTP_C_1250 , VSFTP_C_ISO16 , VSFTP_CS_1250 , VSFTP_CS_ISO16 },
++#endif
++ // Soutern European
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ { VSFTP_C_UTF8 , VSFTP_C_ISO3 , VSFTP_CS_UTF8SOUT , VSFTP_CS_ISO3 },
++ { VSFTP_C_ISO3 , VSFTP_C_UTF8 , VSFTP_CS_ISO3 , VSFTP_CS_UTF8SOUT },
++#endif
++
++ { 0, 0, 0, 0 }
++};
++
++map_ptr map_array[] =
++{
++ 0,
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ codepage_utf8cyr_array, codepage_win1251_array, codepage_koi8r_array,
++ codepage_ibm866_array, codepage_iso5_array, codepage_koi8u_array,
++#else
++ 0, 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ codepage_utf8west_array, codepage_iso1_array, codepage_iso15_array,
++ codepage_win1252_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ codepage_utf8cent_array, codepage_iso2_array, codepage_iso16_array,
++ codepage_win1250_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ codepage_utf8sout_array, codepage_iso3_array,
++#else
++ 0, 0,
++#endif
++
++ 0
++};
++
++/* Initial table for work with unprintable chars */
++map_ptr init_array[] =
++{
++ 0,
++ codepage_utf8_array,
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ codepage_win1251_array, codepage_koi8r_array, codepage_ibm866_array,
++ codepage_iso5_array, codepage_koi8u_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ codepage_iso1_array, codepage_iso15_array, codepage_win1252_array,
++#else
++ 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ codepage_iso2_array, codepage_iso16_array, codepage_win1250_array,
++#else
++ 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ codepage_iso3_array,
++#else
++ 0,
++#endif
++
++ 0
++};
++
++map_ptr localMap = 0, remoteMap = 0;
++map_ptr localTbl = 0, remoteTbl = 0;
++
++void char_convertion(struct mystr* p_str, int direction, char unprintable);
++void InitTables(map_ptr* map, map_ptr* table, int indexx);
++static int char_len(unsigned int s);
++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code);
++
++const char* vsf_charconv_charset_name(int code)
++{
++ int i = 0;
++ while (available_charsets_array [i].p_charset_name && available_charsets_array [i].p_variable != code) i++;
++ return available_charsets_array [i].p_charset_name;
++}
++
++int vsf_charconv_codepage(const char* p_str)
++{
++ const struct available_charsets* charsets = available_charsets_array;
++
++ while (charsets->p_charset_name != 0)
++ {
++ if (!vsf_sysutil_strcmp(charsets->p_charset_name, p_str))
++ {
++ return charsets->p_variable;
++ }
++ charsets++;
++ }
++
++ return 0;
++}
++
++int vsf_charconv_avail_convertion(int localCode, int remoteCode)
++{
++ const struct available_convertions* aconv = available_convertions_array;
++
++ while (aconv->local != 0)
++ {
++ if (localCode == aconv->local && remoteCode == aconv->remote)
++ {
++ InitTables(&localMap, &localTbl, aconv->localCharset);
++ InitTables(&remoteMap, &remoteTbl, aconv->remoteCharset);
++ return 1;
++ }
++ aconv++;
++ }
++
++ return 0;
++}
++
++void vsf_charconv_init_local_codepage(int localCode)
++{
++ if (!localCode)
++ {
++ return;
++ }
++
++ localTbl = init_array [localCode];
++ localMap = vsf_sysutil_malloc((localTbl [0].order + 1) * sizeof(_codepage_map));
++ localMap [0].char_code = localTbl [0].char_code;
++ localMap [0].order = localTbl [0].order;
++
++ int indexx = 1;
++ while (localTbl [indexx].char_code)
++ {
++ if (localTbl [indexx].order)
++ {
++ localMap [localTbl [indexx].order].char_code = localTbl [indexx].char_code;
++ localMap [localTbl [indexx].order].order = indexx;
++ }
++ indexx++;
++ }
++
++ return;
++}
++
++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction)
++{
++ if (!p_sess->enable_conversion || !p_sess->remote_charset || !tunable_local_codepage) return;
++
++ char_convertion(p_str, direction, '?');
++}
++
++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char)
++{
++ if (localMap) char_convertion(p_str, VSFTP_CONVDIRECT_UNPRINTABLE, new_char);
++}
++
++void InitTables(map_ptr* map, map_ptr* table, int indexx)
++{
++ *table = map_array [indexx];
++
++ if (*map) vsf_sysutil_free(*map);
++
++ *map = vsf_sysutil_malloc(((*table) [0].order + 1) * sizeof(_codepage_map));
++ (*map) [0].char_code = (*table) [0].char_code;
++ (*map) [0].order = (*table) [0].order;
++
++ indexx = 1;
++ while ((*table) [indexx].char_code)
++ {
++ if ((*table) [indexx].order)
++ {
++ (*map) [(*table) [indexx].order].char_code = (*table) [indexx].char_code;
++ (*map) [(*table) [indexx].order].order = indexx;
++ }
++ indexx++;
++ }
++
++ return;
++}
++
++static int char_len(unsigned int s)
++{
++ int len = 1;
++ if ((s & 0x80) == 0x00) len = 1;
++ else if ((s & 0xe0) == 0xc0) len = 2;
++ else if ((s & 0xf0) == 0xe0) len = 3;
++ else if ((s & 0xf8) == 0xf0) len = 4;
++// else if ((s & 0xfc) == 0xf8) len = 5;
++// else if ((s & 0xfe) == 0xce) len = 6;
++ return (len);
++}
++
++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code)
++{
++ unsigned int m, l = low, r = high;
++
++ m = (l + r) >> 1;
++ while ((m != 0) && (map [m].char_code != char_code))
++ {
++ if (map [m].char_code < char_code) l = m + 1;
++ else
++ if (map [m].char_code > char_code) r = m - 1;
++ if (l > r)
++ return 0;
++ else
++ m = (l + r) >> 1;
++ }
++
++ if (m) m = map [m].order;
++ return m;
++}
++
++void char_convertion(struct mystr* p_str, int direction, char unprintable)
++{
++ const char* srcbuf;
++ unsigned int srclen;
++ char* dstbuf;
++ map_ptr src, dst;
++ unsigned int sl;
++ unsigned int srcpos = 0, dstpos = 0;
++ unsigned int char_code = 0;
++
++ srclen = str_getlen(p_str); // Len of source string
++ srcbuf = str_getbuf(p_str);
++
++ if (direction == VSFTP_CONVDIRECT_FORWARD)
++ {
++ src = localMap;
++ dst = remoteTbl;
++ }
++ else
++ if (direction == VSFTP_CONVDIRECT_BACKWARD)
++ {
++ src = remoteMap;
++ dst = localTbl;
++ }
++ else
++ {
++ src = localMap;
++ dst = localTbl;
++ }
++
++ if (!src || !dst)
++ {
++ return;
++ }
++
++ dstbuf = vsf_sysutil_malloc(srclen * dst [0].char_code + dst [0].char_code);
++
++ while (srcpos < srclen)
++ {
++ char_code = (unsigned char)srcbuf [srcpos++];
++ if (src [0].char_code > 1)
++ {
++ sl = char_len (char_code);
++ while (sl-- > 1)
++ {
++ char_code = (char_code << 8) | (unsigned char)srcbuf [srcpos++];
++ }
++ }
++
++ if (char_code > 127)
++ {
++ sl = bsearch_index (src, 1, src [0].order, char_code);
++ char_code = 0;
++ if (sl) char_code = dst [sl].char_code;
++ }
++
++ if (char_code == 13 || char_code == 10)
++ {
++ char_code = 0;
++ }
++ else
++ if (char_code < 32 && char_code != 9)
++ {
++ char_code = (unsigned int)unprintable;
++ }
++
++ if (char_code > 0 || direction != VSFTP_CONVDIRECT_UNPRINTABLE)
++ {
++ if (char_code & 0xff000000) dstbuf [dstpos++] = (char)((char_code >> 24) & 0xff);
++ if (char_code & 0x00ff0000) dstbuf [dstpos++] = (char)((char_code >> 16) & 0xff);
++ if (char_code & 0x0000ff00) dstbuf [dstpos++] = (char)((char_code >> 8) & 0xff);
++ if (char_code & 0x000000ff) dstbuf [dstpos++] = (char)((char_code ) & 0xff);
++ }
++ }
++
++ dstbuf [dstpos] = '\0';
++
++ str_empty(p_str);
++ str_append_text(p_str, dstbuf);
++
++ vsf_sysutil_free(dstbuf);
++}
++
+diff -urN vsftpd-2.0.5.org/charconv.h vsftpd-2.0.5/charconv.h
+--- vsftpd-2.0.5.org/charconv.h 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/charconv.h 2008-01-13 19:32:11.000000000 +0200
+@@ -0,0 +1,182 @@
++#ifndef VSF_CHARCONV_H
++#define VSF_CHARCONV_H
++
++struct mystr;
++struct vsf_session;
++
++#define VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CHARCONV_SUPPORT_SOUTERN
++
++#define VSFTP_CONVDIRECT_FORWARD 1
++#define VSFTP_CONVDIRECT_UNPRINTABLE 0
++#define VSFTP_CONVDIRECT_BACKWARD -1
++
++/* Supported charset for convertion */
++#define VSFTP_CP_NONE "NONE"
++#define VSFTP_CP_UTF_8 "UTF-8"
++#define VSFTP_CP_UTF8 "UTF8"
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CP_WIN_1251 "Win-1251"
++#define VSFTP_CP_WIN1251 "WIN1251"
++#define VSFTP_CP_CP1251 "CP1251"
++#define VSFTP_CP_1251 "1251"
++#define VSFTP_CP_KOI8_R "Koi8-R"
++#define VSFTP_CP_KOI8R "KOI8R"
++#define VSFTP_CP_KOI8_U "Koi8-U"
++#define VSFTP_CP_KOI8U "KOI8U"
++#define VSFTP_CP_CP878 "CP878"
++#define VSFTP_CP_878 "878"
++#define VSFTP_CP_CP878R "CP878R"
++#define VSFTP_CP_878R "878R"
++#define VSFTP_CP_CP878U "CP878U"
++#define VSFTP_CP_878U "878U"
++#define VSFTP_CP_IBM866 "IBM866"
++#define VSFTP_CP_CP866 "CP866"
++#define VSFTP_CP_866 "866"
++#define VSFTP_CP_ISO8859_5 "ISO-8859-5"
++#define VSFTP_CP_ISO5 "ISO5"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CP_ISO8859_1 "ISO-8859-1"
++#define VSFTP_CP_ISO1 "ISO1"
++#define VSFTP_CP_LATIN1 "LATIN1"
++#define VSFTP_CP_ISO8859_15 "ISO-8859-15"
++#define VSFTP_CP_ISO15 "ISO15"
++#define VSFTP_CP_LATIN9 "LATIN9"
++#define VSFTP_CP_WIN_1252 "Win-1252"
++#define VSFTP_CP_WIN1252 "WIN1252"
++#define VSFTP_CP_CP1252 "CP1252"
++#define VSFTP_CP_1252 "1252"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CP_ISO8859_2 "ISO-8859-2"
++#define VSFTP_CP_ISO2 "ISO2"
++#define VSFTP_CP_LATIN2 "LATIN2"
++#define VSFTP_CP_ISO8859_16 "ISO-8859-16"
++#define VSFTP_CP_ISO16 "ISO16"
++#define VSFTP_CP_WIN_1250 "Win-1250"
++#define VSFTP_CP_WIN1250 "WIN1250"
++#define VSFTP_CP_CP1250 "CP1250"
++#define VSFTP_CP_1250 "1250"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_CP_ISO8859_3 "ISO-8859-3"
++#define VSFTP_CP_ISO3 "ISO3"
++#define VSFTP_CP_LATIN3 "LATIN3"
++#endif
++
++#define VSFTP_C_NONE 0
++#define VSFTP_C_UTF8 1
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_C_1251 2
++#define VSFTP_C_878R 3
++#define VSFTP_C_866 4
++#define VSFTP_C_ISO5 5
++#define VSFTP_C_878U 6
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_C_ISO1 7
++#define VSFTP_C_ISO15 8
++#define VSFTP_C_1252 9
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_C_ISO2 10
++#define VSFTP_C_ISO16 11
++#define VSFTP_C_1250 12
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_C_ISO3 13
++#endif
++
++#define VSFTP_CS_NONE 0
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CS_UTF8CYR 1
++#define VSFTP_CS_1251 2
++#define VSFTP_CS_878R 3
++#define VSFTP_CS_866 4
++#define VSFTP_CS_ISO5 5
++#define VSFTP_CS_878U 6
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CS_UTF8WEST 7
++#define VSFTP_CS_ISO1 8
++#define VSFTP_CS_ISO15 9
++#define VSFTP_CS_1252 10
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CS_UTF8CENT 11
++#define VSFTP_CS_ISO2 12
++#define VSFTP_CS_ISO16 13
++#define VSFTP_CS_1250 14
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_CS_UTF8SOUT 15
++#define VSFTP_CS_ISO3 16
++#endif
++
++struct codepage_map
++{
++ unsigned int char_code; // The first element is count bytes of char.
++ unsigned int order;
++} _codepage_map;
++
++typedef struct codepage_map * map_ptr;
++
++extern map_ptr localMap;
++
++/* vsf_charconv_charset_name()
++ * PURPOSE
++ * Get charset name by code;
++ * PARAMETERS
++ * code - Internal charset code
++ * RETURNS
++ * Charset name
++ */
++const char* vsf_charconv_charset_name(int code);
++
++/* vsf_charconv_codepage()
++ * PURPOSE
++ * Get internal charset code
++ * PARAMETERS
++ * p_str - String value with code page
++ * RETURNS
++ * Internal charset code
++ */
++int vsf_charconv_codepage(const char* p_str);
++
++/* vsf_charconv_init_local_codepage(int localCode)
++ * PURPOSE
++ * Init local codepage for work with unprintable chars
++ * PARAMETERS
++ * localCode - source internal code page
++ */
++void vsf_charconv_init_local_codepage(int localCode);
++
++/* vsf_charconv_avail_convertion()
++ * PURPOS
++ * Checking for available convertion characters
++ * PARAMETERS
++ * localCode - source internal code page
++ * remoteCode - destination internal code page
++ * RETURNS
++ * Available ot not converion
++ */
++int vsf_charconv_avail_convertion(int localCode, int remoteCode);
++
++/* vsf_charconv_convert()
++ * PURPOSE
++ * Converting string via charsets
++ * PARAMETERS
++ * p_sess - the current session object
++ * p_str - string for convertin
++ * direction - converting from host to remoute charsetr or otherwise
++ */
++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction);
++
++/* vsf_charconv_replace_unprintable
++ */
++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char);
++
++#endif
+diff -urN vsftpd-2.0.5.org/char_maps/central.map vsftpd-2.0.5/char_maps/central.map
+--- vsftpd-2.0.5.org/char_maps/central.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/central.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,738 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8cent_array[] =
++ {
++ { 0x000003, 178 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a4, 34 },
++ { 0x00c2a6, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a8, 37 },
++ { 0x00c2a9, 38 },
++ { 0x00c2ab, 39 },
++ { 0x00c2ad, 40 },
++ { 0x00c2ad, 41 },
++ { 0x00c2ae, 42 },
++ { 0x00c2b0, 43 },
++ { 0x00c2b1, 44 },
++ { 0x00c2b4, 45 },
++ { 0x00c2b5, 46 },
++ { 0x00c2b6, 47 },
++ { 0x00c2b7, 48 },
++ { 0x00c2b8, 49 },
++ { 0x00c2bb, 50 },
++ { 0x00c380, 51 },
++ { 0x00c381, 52 },
++ { 0x00c382, 53 },
++ { 0x00c384, 54 },
++ { 0x00c386, 55 },
++ { 0x00c387, 56 },
++ { 0x00c388, 57 },
++ { 0x00c389, 58 },
++ { 0x00c38a, 59 },
++ { 0x00c38b, 60 },
++ { 0x00c38c, 61 },
++ { 0x00c38d, 62 },
++ { 0x00c38e, 63 },
++ { 0x00c38f, 64 },
++ { 0x00c392, 65 },
++ { 0x00c393, 66 },
++ { 0x00c394, 67 },
++ { 0x00c396, 68 },
++ { 0x00c397, 69 },
++ { 0x00c399, 70 },
++ { 0x00c39a, 71 },
++ { 0x00c39b, 72 },
++ { 0x00c39c, 73 },
++ { 0x00c39d, 74 },
++ { 0x00c39f, 75 },
++ { 0x00c3a0, 76 },
++ { 0x00c3a1, 77 },
++ { 0x00c3a2, 78 },
++ { 0x00c3a4, 79 },
++ { 0x00c3a6, 80 },
++ { 0x00c3a7, 81 },
++ { 0x00c3a8, 82 },
++ { 0x00c3a9, 83 },
++ { 0x00c3aa, 84 },
++ { 0x00c3ab, 85 },
++ { 0x00c3ac, 86 },
++ { 0x00c3ad, 87 },
++ { 0x00c3ae, 88 },
++ { 0x00c3af, 89 },
++ { 0x00c3b2, 90 },
++ { 0x00c3b3, 91 },
++ { 0x00c3b4, 92 },
++ { 0x00c3b6, 93 },
++ { 0x00c3b7, 94 },
++ { 0x00c3b9, 95 },
++ { 0x00c3ba, 96 },
++ { 0x00c3bb, 97 },
++ { 0x00c3bc, 98 },
++ { 0x00c3bd, 99 },
++ { 0x00c3bf, 100 },
++ { 0x00c482, 101 },
++ { 0x00c483, 102 },
++ { 0x00c484, 103 },
++ { 0x00c485, 104 },
++ { 0x00c486, 105 },
++ { 0x00c487, 106 },
++ { 0x00c48c, 107 },
++ { 0x00c48d, 108 },
++ { 0x00c48e, 109 },
++ { 0x00c48f, 110 },
++ { 0x00c490, 111 },
++ { 0x00c491, 112 },
++ { 0x00c498, 113 },
++ { 0x00c499, 114 },
++ { 0x00c49a, 115 },
++ { 0x00c49b, 116 },
++ { 0x00c4b9, 117 },
++ { 0x00c4ba, 118 },
++ { 0x00c4bd, 119 },
++ { 0x00c4be, 120 },
++ { 0x00c581, 121 },
++ { 0x00c582, 122 },
++ { 0x00c583, 123 },
++ { 0x00c584, 124 },
++ { 0x00c587, 125 },
++ { 0x00c588, 126 },
++ { 0x00c590, 127 },
++ { 0x00c591, 128 },
++ { 0x00c592, 129 },
++ { 0x00c593, 130 },
++ { 0x00c594, 131 },
++ { 0x00c595, 132 },
++ { 0x00c598, 133 },
++ { 0x00c599, 134 },
++ { 0x00c59a, 135 },
++ { 0x00c59b, 136 },
++ { 0x00c59e, 137 },
++ { 0x00c59f, 138 },
++ { 0x00c5a0, 139 },
++ { 0x00c5a1, 140 },
++ { 0x00c5a2, 141 },
++ { 0x00c5a3, 142 },
++ { 0x00c5a4, 143 },
++ { 0x00c5a5, 144 },
++ { 0x00c5ae, 145 },
++ { 0x00c5af, 146 },
++ { 0x00c5b0, 147 },
++ { 0x00c5b1, 148 },
++ { 0x00c5b8, 149 },
++ { 0x00c5b9, 150 },
++ { 0x00c5ba, 151 },
++ { 0x00c5bb, 152 },
++ { 0x00c5bc, 153 },
++ { 0x00c5bd, 154 },
++ { 0x00c5be, 155 },
++ { 0x00cb87, 156 },
++ { 0x00cb98, 157 },
++ { 0x00cb99, 158 },
++ { 0x00c89a, 159 },
++ { 0x00cb9b, 160 },
++ { 0x00cb9d, 161 },
++ { 0xe28093, 162 },
++ { 0xe28094, 163 },
++ { 0xe28098, 164 },
++ { 0xe28099, 165 },
++ { 0xe2809a, 166 },
++ { 0xe2809c, 167 },
++ { 0xe2809d, 168 },
++ { 0xe2809e, 169 },
++ { 0xe280a0, 170 },
++ { 0xe280a1, 171 },
++ { 0xe280a2, 172 },
++ { 0xe280a6, 173 },
++ { 0xe280b0, 174 },
++ { 0xe280b9, 175 },
++ { 0xe280ba, 176 },
++ { 0xe282ac, 177 },
++ { 0xe284a2, 178 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso2_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso16_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a7, 40 },
++ { 0x003f, 0 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x003f, 0 },
++ { 0x00bb, 60 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c4, 69 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d6, 87 },
++ { 0x003f, 0 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x003f, 0 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e4, 101 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f6, 119 },
++ { 0x003f, 0 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x003f, 0 },
++ { 0x00ff, 128 },
++ { 0x00c3, 68 },
++ { 0x00e3, 100 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00c5, 70 },
++ { 0x00e5, 102 },
++ { 0x00b2, 51 },
++ { 0x00b9, 58 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d0, 81 },
++ { 0x00f0, 113 },
++ { 0x00dd, 94 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a3, 36 },
++ { 0x00b3, 52 },
++ { 0x00d1, 82 },
++ { 0x00f1, 114 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d5, 86 },
++ { 0x00f5, 118 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d7, 88 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a6, 39 },
++ { 0x00a8, 41 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d8, 89 },
++ { 0x00f8, 121 },
++ { 0x00be, 63 },
++ { 0x00ac, 45 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00bf, 64 },
++ { 0x00b4, 53 },
++ { 0x00b8, 57 },
++ { 0x003f, 0 },
++ { 0x00aa, 43 },
++ { 0x00ba, 59 },
++ { 0x00de, 95 },
++ { 0x00fe, 127 },
++ { 0x00b5, 54 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_win1250_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0081, 2 },
++ { 0x0083, 4 },
++ { 0x0088, 9 },
++ { 0x0090, 17 },
++ { 0x0098, 25 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a4, 37 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00bb, 60 },
++ { 0x003f, 0 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c4, 69 },
++ { 0x003f, 0 },
++ { 0x00c7, 72 },
++ { 0x003f, 0 },
++ { 0x00c9, 74 },
++ { 0x003f, 0 },
++ { 0x00cb, 76 },
++ { 0x003f, 0 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x003f, 0 },
++ { 0x00da, 91 },
++ { 0x003f, 0 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x003f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e4, 101 },
++ { 0x003f, 0 },
++ { 0x00e7, 104 },
++ { 0x003f, 0 },
++ { 0x00e9, 106 },
++ { 0x003f, 0 },
++ { 0x00eb, 108 },
++ { 0x003f, 0 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x00fa, 123 },
++ { 0x003f, 0 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x00c3, 68 },
++ { 0x00e3, 100 },
++ { 0x00a5, 38 },
++ { 0x00b9, 58 },
++ { 0x00c6, 71 },
++ { 0x00e6, 103 },
++ { 0x00c8, 73 },
++ { 0x00e8, 105 },
++ { 0x00cf, 80 },
++ { 0x00ef, 112 },
++ { 0x00d0, 81 },
++ { 0x00f0, 113 },
++ { 0x00ca, 75 },
++ { 0x00ea, 107 },
++ { 0x00cc, 77 },
++ { 0x00ec, 109 },
++ { 0x00c5, 70 },
++ { 0x00e5, 102 },
++ { 0x00bc, 61 },
++ { 0x00be, 63 },
++ { 0x00a3, 36 },
++ { 0x00b3, 52 },
++ { 0x00d1, 82 },
++ { 0x00f1, 114 },
++ { 0x00d2, 83 },
++ { 0x00f2, 115 },
++ { 0x00d5, 86 },
++ { 0x00f5, 118 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00c0, 65 },
++ { 0x00e0, 97 },
++ { 0x00d8, 89 },
++ { 0x00f8, 121 },
++ { 0x008c, 13 },
++ { 0x009c, 29 },
++ { 0x00aa, 43 },
++ { 0x00ba, 59 },
++ { 0x008a, 11 },
++ { 0x009a, 27 },
++ { 0x00de, 95 },
++ { 0x00fe, 127 },
++ { 0x008d, 14 },
++ { 0x009d, 30 },
++ { 0x00d9, 90 },
++ { 0x00f9, 122 },
++ { 0x00db, 92 },
++ { 0x00fb, 124 },
++ { 0x003f, 0 },
++ { 0x008f, 16 },
++ { 0x009f, 32 },
++ { 0x00af, 48 },
++ { 0x00bf, 64 },
++ { 0x008e, 15 },
++ { 0x009e, 31 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x00b2, 51 },
++ { 0x00bd, 62 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0099, 26 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/cyrillic.map vsftpd-2.0.5/char_maps/cyrillic.map
+--- vsftpd-2.0.5.org/char_maps/cyrillic.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/cyrillic.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,1349 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8cyr_array[] =
++ {
++ { 0x000003, 216 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a4, 34 },
++ { 0x00c2a6, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a9, 37 },
++ { 0x00c2ab, 38 },
++ { 0x00c2ac, 39 },
++ { 0x00c2ad, 40 },
++ { 0x00c2ae, 41 },
++ { 0x00c2b0, 42 },
++ { 0x00c2b1, 43 },
++ { 0x00c2b2, 44 },
++ { 0x00c2b5, 45 },
++ { 0x00c2b6, 46 },
++ { 0x00c2b7, 47 },
++ { 0x00c2bb, 48 },
++ { 0x00c3b7, 49 },
++ { 0x00d081, 50 },
++ { 0x00d082, 51 },
++ { 0x00d083, 52 },
++ { 0x00d084, 53 },
++ { 0x00d085, 54 },
++ { 0x00d086, 55 },
++ { 0x00d087, 56 },
++ { 0x00d088, 57 },
++ { 0x00d089, 58 },
++ { 0x00d08a, 59 },
++ { 0x00d08b, 60 },
++ { 0x00d08c, 61 },
++ { 0x00d08e, 62 },
++ { 0x00d08f, 63 },
++ { 0x00d090, 64 },
++ { 0x00d091, 65 },
++ { 0x00d092, 66 },
++ { 0x00d093, 67 },
++ { 0x00d094, 68 },
++ { 0x00d095, 69 },
++ { 0x00d096, 70 },
++ { 0x00d097, 71 },
++ { 0x00d098, 72 },
++ { 0x00d099, 73 },
++ { 0x00d09a, 74 },
++ { 0x00d09b, 75 },
++ { 0x00d09c, 76 },
++ { 0x00d09d, 77 },
++ { 0x00d09e, 78 },
++ { 0x00d09f, 79 },
++ { 0x00d0a0, 80 },
++ { 0x00d0a1, 81 },
++ { 0x00d0a2, 82 },
++ { 0x00d0a3, 83 },
++ { 0x00d0a4, 84 },
++ { 0x00d0a5, 85 },
++ { 0x00d0a6, 86 },
++ { 0x00d0a7, 87 },
++ { 0x00d0a8, 88 },
++ { 0x00d0a9, 89 },
++ { 0x00d0aa, 90 },
++ { 0x00d0ab, 91 },
++ { 0x00d0ac, 92 },
++ { 0x00d0ad, 93 },
++ { 0x00d0ae, 94 },
++ { 0x00d0af, 95 },
++ { 0x00d0b0, 96 },
++ { 0x00d0b1, 97 },
++ { 0x00d0b2, 98 },
++ { 0x00d0b3, 99 },
++ { 0x00d0b4, 100 },
++ { 0x00d0b5, 101 },
++ { 0x00d0b6, 102 },
++ { 0x00d0b7, 103 },
++ { 0x00d0b8, 104 },
++ { 0x00d0b9, 105 },
++ { 0x00d0ba, 106 },
++ { 0x00d0bb, 107 },
++ { 0x00d0bc, 108 },
++ { 0x00d0bd, 109 },
++ { 0x00d0be, 110 },
++ { 0x00d0bf, 111 },
++ { 0x00d180, 112 },
++ { 0x00d181, 113 },
++ { 0x00d182, 114 },
++ { 0x00d183, 115 },
++ { 0x00d184, 116 },
++ { 0x00d185, 117 },
++ { 0x00d186, 118 },
++ { 0x00d187, 119 },
++ { 0x00d188, 120 },
++ { 0x00d189, 121 },
++ { 0x00d18a, 122 },
++ { 0x00d18b, 123 },
++ { 0x00d18c, 124 },
++ { 0x00d18d, 125 },
++ { 0x00d18e, 126 },
++ { 0x00d18f, 127 },
++ { 0x00d191, 128 },
++ { 0x00d192, 129 },
++ { 0x00d193, 130 },
++ { 0x00d194, 131 },
++ { 0x00d195, 132 },
++ { 0x00d196, 133 },
++ { 0x00d197, 134 },
++ { 0x00d198, 135 },
++ { 0x00d199, 136 },
++ { 0x00d19a, 137 },
++ { 0x00d19b, 138 },
++ { 0x00d19c, 139 },
++ { 0x00d19e, 140 },
++ { 0x00d19f, 141 },
++ { 0x00d290, 142 },
++ { 0x00d291, 143 },
++ { 0xe28093, 144 },
++ { 0xe28094, 145 },
++ { 0xe28098, 146 },
++ { 0xe28099, 147 },
++ { 0xe2809a, 148 },
++ { 0xe2809c, 149 },
++ { 0xe2809d, 150 },
++ { 0xe2809e, 151 },
++ { 0xe280a0, 152 },
++ { 0xe280a1, 153 },
++ { 0xe280a2, 154 },
++ { 0xe280a6, 155 },
++ { 0xe280b0, 156 },
++ { 0xe280b9, 157 },
++ { 0xe280ba, 158 },
++ { 0xe28496, 159 },
++ { 0xe284a2, 160 },
++ { 0xe28899, 161 },
++ { 0xe2889a, 162 },
++ { 0xe28988, 163 },
++ { 0xe289a4, 164 },
++ { 0xe289a5, 165 },
++ { 0xe28ca0, 166 },
++ { 0xe28ca1, 167 },
++ { 0xe29480, 168 },
++ { 0xe29482, 169 },
++ { 0xe2948c, 170 },
++ { 0xe29490, 171 },
++ { 0xe29494, 172 },
++ { 0xe29498, 173 },
++ { 0xe2949c, 174 },
++ { 0xe294a4, 175 },
++ { 0xe294ac, 176 },
++ { 0xe294b4, 177 },
++ { 0xe294bc, 178 },
++ { 0xe29590, 179 },
++ { 0xe29591, 180 },
++ { 0xe29592, 181 },
++ { 0xe29593, 182 },
++ { 0xe29594, 183 },
++ { 0xe29595, 184 },
++ { 0xe29596, 185 },
++ { 0xe29597, 186 },
++ { 0xe29598, 187 },
++ { 0xe29599, 188 },
++ { 0xe2959a, 189 },
++ { 0xe2959b, 190 },
++ { 0xe2959c, 191 },
++ { 0xe2959d, 192 },
++ { 0xe2959e, 193 },
++ { 0xe2959f, 194 },
++ { 0xe295a0, 195 },
++ { 0xe295a1, 196 },
++ { 0xe295a2, 197 },
++ { 0xe295a3, 198 },
++ { 0xe295a4, 199 },
++ { 0xe295a5, 200 },
++ { 0xe295a6, 201 },
++ { 0xe295a7, 202 },
++ { 0xe295a8, 203 },
++ { 0xe295a9, 204 },
++ { 0xe295aa, 205 },
++ { 0xe295ab, 206 },
++ { 0xe295ac, 207 },
++ { 0xe29680, 208 },
++ { 0xe29684, 209 },
++ { 0xe29688, 210 },
++ { 0xe2968c, 211 },
++ { 0xe29690, 212 },
++ { 0xe29691, 213 },
++ { 0xe29692, 214 },
++ { 0xe29693, 215 },
++ { 0xe296a0, 216 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_win1251_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0088, 9 },
++ { 0x0098, 25 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a4, 37 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x003f, 0 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00bb, 60 },
++ { 0x003f, 0 },
++ { 0x00a8, 41 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x00aa, 43 },
++ { 0x00bd, 62 },
++ { 0x00b2, 51 },
++ { 0x00af, 48 },
++ { 0x00a3, 36 },
++ { 0x008a, 11 },
++ { 0x008c, 13 },
++ { 0x008e, 15 },
++ { 0x008d, 14 },
++ { 0x00a1, 34 },
++ { 0x008f, 16 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x00b8, 57 },
++ { 0x0090, 17 },
++ { 0x0083, 4 },
++ { 0x00ba, 59 },
++ { 0x00be, 63 },
++ { 0x00b3, 52 },
++ { 0x00bf, 64 },
++ { 0x00bc, 61 },
++ { 0x009a, 27 },
++ { 0x009c, 29 },
++ { 0x009e, 31 },
++ { 0x009d, 30 },
++ { 0x00a2, 35 },
++ { 0x009f, 32 },
++ { 0x00a5, 38 },
++ { 0x00b4, 53 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x00b9, 58 },
++ { 0x0099, 26 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_koi8u_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009a, 27 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00bf, 64 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009c, 29 },
++ { 0x003f, 0 },
++ { 0x009d, 30 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009e, 31 },
++ { 0x003f, 0 },
++ { 0x009f, 32 },
++ { 0x00b3, 52 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b4, 53 },
++ { 0x003f, 0 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00f7, 120 },
++ { 0x00e7, 104 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00f6, 119 },
++ { 0x00fa, 123 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00e6, 103 },
++ { 0x00e8, 105 },
++ { 0x00e3, 100 },
++ { 0x00fe, 127 },
++ { 0x00fb, 124 },
++ { 0x00fd, 126 },
++ { 0x00ff, 128 },
++ { 0x00f9, 122 },
++ { 0x00f8, 121 },
++ { 0x00fc, 125 },
++ { 0x00e0, 97 },
++ { 0x00f1, 114 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00d7, 88 },
++ { 0x00c7, 72 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00d6, 87 },
++ { 0x00da, 91 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00c6, 71 },
++ { 0x00c8, 73 },
++ { 0x00c3, 68 },
++ { 0x00de, 95 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x00d9, 90 },
++ { 0x00d8, 89 },
++ { 0x00dc, 93 },
++ { 0x00c0, 65 },
++ { 0x00d1, 82 },
++ { 0x00a3, 36 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00bd, 62 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x0093, 20 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x003f, 0 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x003f, 0 },
++ { 0x00b5, 54 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x003f, 0 },
++ { 0x00be, 63 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0094, 21 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_ibm866_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00ff, 128 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f8, 121 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fa, 123 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f0, 113 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f2, 115 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f4, 117 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f6, 119 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f1, 114 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f3, 116 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f5, 118 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fc, 125 },
++ { 0x003f, 0 },
++ { 0x00f9, 122 },
++ { 0x00fb, 124 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00c4, 69 },
++ { 0x00b3, 52 },
++ { 0x00da, 91 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00d9, 90 },
++ { 0x00c3, 68 },
++ { 0x00b4, 53 },
++ { 0x00c2, 67 },
++ { 0x00c1, 66 },
++ { 0x00c5, 70 },
++ { 0x00cd, 78 },
++ { 0x00ba, 59 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00c9, 74 },
++ { 0x00b8, 57 },
++ { 0x00b7, 56 },
++ { 0x00bb, 60 },
++ { 0x00d4, 85 },
++ { 0x00d3, 84 },
++ { 0x00c8, 73 },
++ { 0x00be, 63 },
++ { 0x00bd, 62 },
++ { 0x00bc, 61 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00cc, 77 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b9, 58 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00cb, 76 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00ca, 75 },
++ { 0x00d8, 89 },
++ { 0x00d7, 88 },
++ { 0x00ce, 79 },
++ { 0x00df, 96 },
++ { 0x00dc, 93 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00fe, 127 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso5_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f0, 113 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_koi8r_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009a, 27 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x00bf, 64 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009c, 29 },
++ { 0x005f, 0 },
++ { 0x009d, 30 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009e, 31 },
++ { 0x005f, 0 },
++ { 0x009f, 32 },
++ { 0x00b3, 52 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00f7, 120 },
++ { 0x00e7, 104 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00f6, 119 },
++ { 0x00fa, 123 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00e6, 103 },
++ { 0x00e8, 105 },
++ { 0x00e3, 100 },
++ { 0x00fe, 127 },
++ { 0x00fb, 124 },
++ { 0x00fd, 126 },
++ { 0x00ff, 128 },
++ { 0x00f9, 122 },
++ { 0x00f8, 121 },
++ { 0x00fc, 125 },
++ { 0x00e0, 97 },
++ { 0x00f1, 114 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00d7, 88 },
++ { 0x00c7, 72 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00d6, 87 },
++ { 0x00da, 91 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00c6, 71 },
++ { 0x00c8, 73 },
++ { 0x00c3, 68 },
++ { 0x00de, 95 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x00d9, 90 },
++ { 0x00d8, 89 },
++ { 0x00dc, 93 },
++ { 0x00c0, 65 },
++ { 0x00d1, 82 },
++ { 0x00a3, 36 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x0093, 20 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0094, 21 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/soutern.map vsftpd-2.0.5/char_maps/soutern.map
+--- vsftpd-2.0.5.org/char_maps/soutern.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/soutern.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,259 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8sout_array[] =
++ {
++ { 0x000003, 121 }, // max size , char count
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a3, 34 },
++ { 0x00c2a4, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a8, 37 },
++ { 0x00c2ad, 38 },
++ { 0x00c2b0, 39 },
++ { 0x00c2b2, 40 },
++ { 0x00c2b3, 41 },
++ { 0x00c2b4, 42 },
++ { 0x00c2b5, 43 },
++ { 0x00c2b7, 44 },
++ { 0x00c2b8, 45 },
++ { 0x00c2bd, 46 },
++ { 0x00c380, 47 },
++ { 0x00c381, 48 },
++ { 0x00c382, 49 },
++ { 0x00c384, 50 },
++ { 0x00c387, 51 },
++ { 0x00c388, 52 },
++ { 0x00c389, 53 },
++ { 0x00c38a, 54 },
++ { 0x00c38b, 55 },
++ { 0x00c38c, 56 },
++ { 0x00c38d, 57 },
++ { 0x00c38e, 58 },
++ { 0x00c38f, 59 },
++ { 0x00c391, 60 },
++ { 0x00c392, 61 },
++ { 0x00c393, 62 },
++ { 0x00c394, 63 },
++ { 0x00c396, 64 },
++ { 0x00c397, 65 },
++ { 0x00c399, 66 },
++ { 0x00c39a, 67 },
++ { 0x00c39b, 68 },
++ { 0x00c39c, 69 },
++ { 0x00c39f, 70 },
++ { 0x00c3a0, 71 },
++ { 0x00c3a1, 72 },
++ { 0x00c3a2, 73 },
++ { 0x00c3a4, 74 },
++ { 0x00c3a7, 75 },
++ { 0x00c3a8, 76 },
++ { 0x00c3a9, 77 },
++ { 0x00c3aa, 78 },
++ { 0x00c3ab, 79 },
++ { 0x00c3ac, 80 },
++ { 0x00c3ad, 81 },
++ { 0x00c3ae, 82 },
++ { 0x00c3af, 83 },
++ { 0x00c3b1, 84 },
++ { 0x00c3b2, 85 },
++ { 0x00c3b3, 86 },
++ { 0x00c3b4, 87 },
++ { 0x00c3b6, 88 },
++ { 0x00c3b7, 89 },
++ { 0x00c3b9, 90 },
++ { 0x00c3ba, 91 },
++ { 0x00c3bb, 92 },
++ { 0x00c3bc, 93 },
++ { 0x00c488, 94 },
++ { 0x00c489, 95 },
++ { 0x00c48a, 96 },
++ { 0x00c48b, 97 },
++ { 0x00c49c, 98 },
++ { 0x00c49d, 99 },
++ { 0x00c49e, 100 },
++ { 0x00c49f, 101 },
++ { 0x00c4a0, 102 },
++ { 0x00c4a1, 103 },
++ { 0x00c4a4, 104 },
++ { 0x00c4a5, 105 },
++ { 0x00c4a6, 106 },
++ { 0x00c4a7, 107 },
++ { 0x00c4b0, 108 },
++ { 0x00c4b1, 109 },
++ { 0x00c4b4, 110 },
++ { 0x00c4b5, 111 },
++ { 0x00c59c, 112 },
++ { 0x00c59d, 113 },
++ { 0x00c59e, 114 },
++ { 0x00c59f, 115 },
++ { 0x00c5ac, 116 },
++ { 0x00c5ad, 117 },
++ { 0x00c5bb, 118 },
++ { 0x00c5bc, 119 },
++ { 0x00cb98, 120 },
++ { 0x00cb99, 121 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso3_array[] =
++ {
++ { 0x0001, 121 }, // max size , char count for control
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a7, 39 },
++ { 0x00a8, 40 },
++ { 0x00ad, 45 },
++ { 0x00b0, 47 },
++ { 0x00b2, 49 },
++ { 0x00b3, 50 },
++ { 0x00b4, 51 },
++ { 0x00b5, 52 },
++ { 0x00b7, 54 },
++ { 0x00b8, 55 },
++ { 0x00bd, 60 },
++ { 0x00c0, 62 },
++ { 0x00c1, 63 },
++ { 0x00c2, 64 },
++ { 0x00c4, 65 },
++ { 0x00c7, 68 },
++ { 0x00c8, 69 },
++ { 0x00c9, 70 },
++ { 0x00ca, 71 },
++ { 0x00cb, 72 },
++ { 0x00cc, 73 },
++ { 0x00cd, 74 },
++ { 0x00ce, 75 },
++ { 0x00cf, 76 },
++ { 0x00d1, 77 },
++ { 0x00d2, 78 },
++ { 0x00d3, 79 },
++ { 0x00d4, 80 },
++ { 0x00d6, 82 },
++ { 0x00d7, 83 },
++ { 0x00d9, 85 },
++ { 0x00da, 86 },
++ { 0x00db, 87 },
++ { 0x00dc, 88 },
++ { 0x00df, 91 },
++ { 0x00e0, 92 },
++ { 0x00e1, 93 },
++ { 0x00e2, 94 },
++ { 0x00e4, 95 },
++ { 0x00e7, 98 },
++ { 0x00e8, 99 },
++ { 0x00e9, 100 },
++ { 0x00ea, 101 },
++ { 0x00eb, 102 },
++ { 0x00ec, 103 },
++ { 0x00ed, 104 },
++ { 0x00ee, 105 },
++ { 0x00ef, 106 },
++ { 0x00f1, 107 },
++ { 0x00f2, 108 },
++ { 0x00f3, 109 },
++ { 0x00f4, 110 },
++ { 0x00f6, 112 },
++ { 0x00f7, 113 },
++ { 0x00f9, 115 },
++ { 0x00fa, 116 },
++ { 0x00fb, 117 },
++ { 0x00fc, 118 },
++ { 0x00c6, 67 },
++ { 0x00e6, 97 },
++ { 0x00c5, 66 },
++ { 0x00e5, 96 },
++ { 0x00d8, 84 },
++ { 0x00f8, 114 },
++ { 0x00ab, 43 },
++ { 0x00bb, 58 },
++ { 0x00d5, 81 },
++ { 0x00f5, 111 },
++ { 0x00a6, 38 },
++ { 0x00b6, 53 },
++ { 0x00a1, 34 },
++ { 0x00b1, 48 },
++ { 0x00a9, 41 },
++ { 0x00b9, 56 },
++ { 0x00ac, 44 },
++ { 0x00bc, 59 },
++ { 0x00de, 90 },
++ { 0x00fe, 120 },
++ { 0x00aa, 42 },
++ { 0x00ba, 57 },
++ { 0x00dd, 89 },
++ { 0x00fd, 119 },
++ { 0x00af, 46 },
++ { 0x00bf, 61 },
++ { 0x00a2, 35 },
++ { 0x00ff, 121 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/utf8.map vsftpd-2.0.5/char_maps/utf8.map
+--- vsftpd-2.0.5.org/char_maps/utf8.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/utf8.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,393 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8_array[] =
++ {
++ { 0x000003, 382 }, // max size , char count
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a1, 34 },
++ { 0x00c2a2, 35 },
++ { 0x00c2a3, 36 },
++ { 0x00c2a4, 37 },
++ { 0x00c2a5, 38 },
++ { 0x00c2a6, 39 },
++ { 0x00c2a7, 40 },
++ { 0x00c2a8, 41 },
++ { 0x00c2a9, 42 },
++ { 0x00c2aa, 43 },
++ { 0x00c2ab, 44 },
++ { 0x00c2ac, 45 },
++ { 0x00c2ad, 46 },
++ { 0x00c2ae, 47 },
++ { 0x00c2af, 48 },
++ { 0x00c2b0, 49 },
++ { 0x00c2b1, 50 },
++ { 0x00c2b2, 51 },
++ { 0x00c2b3, 52 },
++ { 0x00c2b4, 53 },
++ { 0x00c2b5, 54 },
++ { 0x00c2b6, 55 },
++ { 0x00c2b7, 56 },
++ { 0x00c2b8, 57 },
++ { 0x00c2b9, 58 },
++ { 0x00c2ba, 59 },
++ { 0x00c2bb, 60 },
++ { 0x00c2bc, 61 },
++ { 0x00c2bd, 62 },
++ { 0x00c2be, 63 },
++ { 0x00c2bf, 64 },
++ { 0x00c380, 65 },
++ { 0x00c381, 66 },
++ { 0x00c382, 67 },
++ { 0x00c383, 68 },
++ { 0x00c384, 69 },
++ { 0x00c385, 70 },
++ { 0x00c386, 71 },
++ { 0x00c387, 72 },
++ { 0x00c388, 73 },
++ { 0x00c389, 74 },
++ { 0x00c38a, 75 },
++ { 0x00c38b, 76 },
++ { 0x00c38c, 77 },
++ { 0x00c38d, 78 },
++ { 0x00c38e, 79 },
++ { 0x00c38f, 80 },
++ { 0x00c390, 81 },
++ { 0x00c391, 82 },
++ { 0x00c392, 83 },
++ { 0x00c393, 84 },
++ { 0x00c394, 85 },
++ { 0x00c395, 86 },
++ { 0x00c396, 87 },
++ { 0x00c397, 88 },
++ { 0x00c398, 89 },
++ { 0x00c399, 90 },
++ { 0x00c39a, 91 },
++ { 0x00c39b, 92 },
++ { 0x00c39c, 93 },
++ { 0x00c39d, 94 },
++ { 0x00c39e, 95 },
++ { 0x00c39f, 96 },
++ { 0x00c3a0, 97 },
++ { 0x00c3a1, 98 },
++ { 0x00c3a2, 99 },
++ { 0x00c3a3, 100 },
++ { 0x00c3a4, 101 },
++ { 0x00c3a5, 102 },
++ { 0x00c3a6, 103 },
++ { 0x00c3a7, 104 },
++ { 0x00c3a8, 105 },
++ { 0x00c3a9, 106 },
++ { 0x00c3aa, 107 },
++ { 0x00c3ab, 108 },
++ { 0x00c3ac, 109 },
++ { 0x00c3ad, 110 },
++ { 0x00c3ae, 111 },
++ { 0x00c3af, 112 },
++ { 0x00c3b0, 113 },
++ { 0x00c3b1, 114 },
++ { 0x00c3b2, 115 },
++ { 0x00c3b3, 116 },
++ { 0x00c3b4, 117 },
++ { 0x00c3b5, 118 },
++ { 0x00c3b6, 119 },
++ { 0x00c3b7, 120 },
++ { 0x00c3b8, 121 },
++ { 0x00c3b9, 122 },
++ { 0x00c3ba, 123 },
++ { 0x00c3bb, 124 },
++ { 0x00c3bc, 125 },
++ { 0x00c3bd, 126 },
++ { 0x00c3be, 127 },
++ { 0x00c3bf, 128 },
++ { 0x00c482, 129 },
++ { 0x00c483, 130 },
++ { 0x00c484, 131 },
++ { 0x00c485, 132 },
++ { 0x00c486, 133 },
++ { 0x00c487, 134 },
++ { 0x00c488, 135 },
++ { 0x00c489, 136 },
++ { 0x00c48a, 137 },
++ { 0x00c48b, 138 },
++ { 0x00c48c, 139 },
++ { 0x00c48d, 140 },
++ { 0x00c48e, 141 },
++ { 0x00c48f, 142 },
++ { 0x00c490, 143 },
++ { 0x00c491, 144 },
++ { 0x00c498, 145 },
++ { 0x00c499, 146 },
++ { 0x00c49a, 147 },
++ { 0x00c49b, 148 },
++ { 0x00c49c, 149 },
++ { 0x00c49d, 150 },
++ { 0x00c49e, 151 },
++ { 0x00c49f, 152 },
++ { 0x00c4a0, 153 },
++ { 0x00c4a1, 154 },
++ { 0x00c4a4, 155 },
++ { 0x00c4a5, 156 },
++ { 0x00c4a6, 157 },
++ { 0x00c4a7, 158 },
++ { 0x00c4b0, 159 },
++ { 0x00c4b1, 160 },
++ { 0x00c4b4, 161 },
++ { 0x00c4b5, 162 },
++ { 0x00c4b9, 163 },
++ { 0x00c4ba, 164 },
++ { 0x00c4bd, 165 },
++ { 0x00c4be, 166 },
++ { 0x00c581, 167 },
++ { 0x00c582, 168 },
++ { 0x00c583, 169 },
++ { 0x00c584, 170 },
++ { 0x00c587, 171 },
++ { 0x00c588, 172 },
++ { 0x00c590, 173 },
++ { 0x00c591, 174 },
++ { 0x00c592, 175 },
++ { 0x00c593, 176 },
++ { 0x00c594, 177 },
++ { 0x00c595, 178 },
++ { 0x00c598, 179 },
++ { 0x00c599, 180 },
++ { 0x00c59a, 181 },
++ { 0x00c59b, 182 },
++ { 0x00c59c, 183 },
++ { 0x00c59d, 184 },
++ { 0x00c59e, 185 },
++ { 0x00c59f, 186 },
++ { 0x00c5a0, 187 },
++ { 0x00c5a1, 188 },
++ { 0x00c5a2, 189 },
++ { 0x00c5a3, 190 },
++ { 0x00c5a4, 191 },
++ { 0x00c5a5, 192 },
++ { 0x00c5ac, 193 },
++ { 0x00c5ad, 194 },
++ { 0x00c5ae, 195 },
++ { 0x00c5af, 196 },
++ { 0x00c5b0, 197 },
++ { 0x00c5b1, 198 },
++ { 0x00c5b8, 199 },
++ { 0x00c5b9, 200 },
++ { 0x00c5ba, 201 },
++ { 0x00c5bb, 202 },
++ { 0x00c5bc, 203 },
++ { 0x00c5bd, 204 },
++ { 0x00c5be, 205 },
++ { 0x00c692, 206 },
++ { 0x00c89a, 207 },
++ { 0x00cb86, 208 },
++ { 0x00cb87, 209 },
++ { 0x00cb98, 210 },
++ { 0x00cb99, 211 },
++ { 0x00cb9b, 212 },
++ { 0x00cb9c, 213 },
++ { 0x00cb9d, 214 },
++ { 0x00d081, 215 },
++ { 0x00d082, 216 },
++ { 0x00d083, 217 },
++ { 0x00d084, 218 },
++ { 0x00d085, 219 },
++ { 0x00d086, 220 },
++ { 0x00d087, 221 },
++ { 0x00d088, 222 },
++ { 0x00d089, 223 },
++ { 0x00d08a, 224 },
++ { 0x00d08b, 225 },
++ { 0x00d08c, 226 },
++ { 0x00d08e, 227 },
++ { 0x00d08f, 228 },
++ { 0x00d090, 229 },
++ { 0x00d091, 230 },
++ { 0x00d092, 231 },
++ { 0x00d093, 232 },
++ { 0x00d094, 233 },
++ { 0x00d095, 234 },
++ { 0x00d096, 235 },
++ { 0x00d097, 236 },
++ { 0x00d098, 237 },
++ { 0x00d099, 238 },
++ { 0x00d09a, 239 },
++ { 0x00d09b, 240 },
++ { 0x00d09c, 241 },
++ { 0x00d09d, 242 },
++ { 0x00d09e, 243 },
++ { 0x00d09f, 244 },
++ { 0x00d0a0, 245 },
++ { 0x00d0a1, 246 },
++ { 0x00d0a2, 247 },
++ { 0x00d0a3, 248 },
++ { 0x00d0a4, 249 },
++ { 0x00d0a5, 250 },
++ { 0x00d0a6, 251 },
++ { 0x00d0a7, 252 },
++ { 0x00d0a8, 253 },
++ { 0x00d0a9, 254 },
++ { 0x00d0aa, 255 },
++ { 0x00d0ab, 256 },
++ { 0x00d0ac, 257 },
++ { 0x00d0ad, 258 },
++ { 0x00d0ae, 259 },
++ { 0x00d0af, 260 },
++ { 0x00d0b0, 261 },
++ { 0x00d0b1, 262 },
++ { 0x00d0b2, 263 },
++ { 0x00d0b3, 264 },
++ { 0x00d0b4, 265 },
++ { 0x00d0b5, 266 },
++ { 0x00d0b6, 267 },
++ { 0x00d0b7, 268 },
++ { 0x00d0b8, 269 },
++ { 0x00d0b9, 270 },
++ { 0x00d0ba, 271 },
++ { 0x00d0bb, 272 },
++ { 0x00d0bc, 273 },
++ { 0x00d0bd, 274 },
++ { 0x00d0be, 275 },
++ { 0x00d0bf, 276 },
++ { 0x00d180, 277 },
++ { 0x00d181, 278 },
++ { 0x00d182, 279 },
++ { 0x00d183, 280 },
++ { 0x00d184, 281 },
++ { 0x00d185, 282 },
++ { 0x00d186, 283 },
++ { 0x00d187, 284 },
++ { 0x00d188, 285 },
++ { 0x00d189, 286 },
++ { 0x00d18a, 287 },
++ { 0x00d18b, 288 },
++ { 0x00d18c, 289 },
++ { 0x00d18d, 290 },
++ { 0x00d18e, 291 },
++ { 0x00d18f, 292 },
++ { 0x00d191, 293 },
++ { 0x00d192, 294 },
++ { 0x00d193, 295 },
++ { 0x00d194, 296 },
++ { 0x00d195, 297 },
++ { 0x00d196, 298 },
++ { 0x00d197, 299 },
++ { 0x00d198, 300 },
++ { 0x00d199, 301 },
++ { 0x00d19a, 302 },
++ { 0x00d19b, 303 },
++ { 0x00d19c, 304 },
++ { 0x00d19e, 305 },
++ { 0x00d19f, 306 },
++ { 0x00d290, 307 },
++ { 0x00d291, 308 },
++ { 0xe28093, 309 },
++ { 0xe28094, 310 },
++ { 0xe28098, 311 },
++ { 0xe28099, 312 },
++ { 0xe2809a, 313 },
++ { 0xe2809c, 314 },
++ { 0xe2809d, 315 },
++ { 0xe2809e, 316 },
++ { 0xe280a0, 317 },
++ { 0xe280a1, 318 },
++ { 0xe280a2, 319 },
++ { 0xe280a6, 320 },
++ { 0xe280b0, 321 },
++ { 0xe280b9, 322 },
++ { 0xe280ba, 323 },
++ { 0xe282ac, 324 },
++ { 0xe28496, 325 },
++ { 0xe284a2, 326 },
++ { 0xe28899, 327 },
++ { 0xe2889a, 328 },
++ { 0xe28988, 329 },
++ { 0xe289a4, 330 },
++ { 0xe289a5, 331 },
++ { 0xe28ca0, 332 },
++ { 0xe28ca1, 333 },
++ { 0xe29480, 334 },
++ { 0xe29482, 335 },
++ { 0xe2948c, 336 },
++ { 0xe29490, 337 },
++ { 0xe29494, 338 },
++ { 0xe29498, 339 },
++ { 0xe2949c, 340 },
++ { 0xe294a4, 341 },
++ { 0xe294ac, 342 },
++ { 0xe294b4, 343 },
++ { 0xe294bc, 344 },
++ { 0xe29590, 345 },
++ { 0xe29591, 346 },
++ { 0xe29592, 347 },
++ { 0xe29593, 348 },
++ { 0xe29594, 349 },
++ { 0xe29595, 350 },
++ { 0xe29596, 351 },
++ { 0xe29597, 352 },
++ { 0xe29598, 353 },
++ { 0xe29599, 354 },
++ { 0xe2959a, 355 },
++ { 0xe2959b, 356 },
++ { 0xe2959c, 357 },
++ { 0xe2959d, 358 },
++ { 0xe2959e, 359 },
++ { 0xe2959f, 360 },
++ { 0xe295a0, 361 },
++ { 0xe295a1, 362 },
++ { 0xe295a2, 363 },
++ { 0xe295a3, 364 },
++ { 0xe295a4, 365 },
++ { 0xe295a5, 366 },
++ { 0xe295a6, 367 },
++ { 0xe295a7, 368 },
++ { 0xe295a8, 369 },
++ { 0xe295a9, 370 },
++ { 0xe295aa, 371 },
++ { 0xe295ab, 372 },
++ { 0xe295ac, 373 },
++ { 0xe29680, 374 },
++ { 0xe29684, 375 },
++ { 0xe29688, 376 },
++ { 0xe2968c, 377 },
++ { 0xe29690, 378 },
++ { 0xe29691, 379 },
++ { 0xe29692, 380 },
++ { 0xe29693, 381 },
++ { 0xe296a0, 382 },
++ { 0x000000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/western.map vsftpd-2.0.5/char_maps/western.map
+--- vsftpd-2.0.5.org/char_maps/western.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/western.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,669 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8west_array[] =
++ {
++ { 0x000003, 155 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a1, 34 },
++ { 0x00c2a2, 35 },
++ { 0x00c2a3, 36 },
++ { 0x00c2a4, 37 },
++ { 0x00c2a5, 38 },
++ { 0x00c2a6, 39 },
++ { 0x00c2a7, 40 },
++ { 0x00c2a8, 41 },
++ { 0x00c2a9, 42 },
++ { 0x00c2aa, 43 },
++ { 0x00c2ab, 44 },
++ { 0x00c2ac, 45 },
++ { 0x00c2ad, 46 },
++ { 0x00c2ae, 47 },
++ { 0x00c2af, 48 },
++ { 0x00c2b0, 49 },
++ { 0x00c2b1, 50 },
++ { 0x00c2b2, 51 },
++ { 0x00c2b3, 52 },
++ { 0x00c2b4, 53 },
++ { 0x00c2b5, 54 },
++ { 0x00c2b6, 55 },
++ { 0x00c2b7, 56 },
++ { 0x00c2b8, 57 },
++ { 0x00c2b9, 58 },
++ { 0x00c2ba, 59 },
++ { 0x00c2bb, 60 },
++ { 0x00c2bc, 61 },
++ { 0x00c2bd, 62 },
++ { 0x00c2be, 63 },
++ { 0x00c2bf, 64 },
++ { 0x00c380, 65 },
++ { 0x00c381, 66 },
++ { 0x00c382, 67 },
++ { 0x00c383, 68 },
++ { 0x00c384, 69 },
++ { 0x00c385, 70 },
++ { 0x00c386, 71 },
++ { 0x00c387, 72 },
++ { 0x00c388, 73 },
++ { 0x00c389, 74 },
++ { 0x00c38a, 75 },
++ { 0x00c38b, 76 },
++ { 0x00c38c, 77 },
++ { 0x00c38d, 78 },
++ { 0x00c38e, 79 },
++ { 0x00c38f, 80 },
++ { 0x00c390, 81 },
++ { 0x00c391, 82 },
++ { 0x00c392, 83 },
++ { 0x00c393, 84 },
++ { 0x00c394, 85 },
++ { 0x00c395, 86 },
++ { 0x00c396, 87 },
++ { 0x00c397, 88 },
++ { 0x00c398, 89 },
++ { 0x00c399, 90 },
++ { 0x00c39a, 91 },
++ { 0x00c39b, 92 },
++ { 0x00c39c, 93 },
++ { 0x00c39d, 94 },
++ { 0x00c39e, 95 },
++ { 0x00c39f, 96 },
++ { 0x00c3a0, 97 },
++ { 0x00c3a1, 98 },
++ { 0x00c3a2, 99 },
++ { 0x00c3a3, 100 },
++ { 0x00c3a4, 101 },
++ { 0x00c3a5, 102 },
++ { 0x00c3a6, 103 },
++ { 0x00c3a7, 104 },
++ { 0x00c3a8, 105 },
++ { 0x00c3a9, 106 },
++ { 0x00c3aa, 107 },
++ { 0x00c3ab, 108 },
++ { 0x00c3ac, 109 },
++ { 0x00c3ad, 110 },
++ { 0x00c3ae, 111 },
++ { 0x00c3af, 112 },
++ { 0x00c3b0, 113 },
++ { 0x00c3b1, 114 },
++ { 0x00c3b2, 115 },
++ { 0x00c3b3, 116 },
++ { 0x00c3b4, 117 },
++ { 0x00c3b5, 118 },
++ { 0x00c3b6, 119 },
++ { 0x00c3b7, 120 },
++ { 0x00c3b8, 121 },
++ { 0x00c3b9, 122 },
++ { 0x00c3ba, 123 },
++ { 0x00c3bb, 124 },
++ { 0x00c3bc, 125 },
++ { 0x00c3bd, 126 },
++ { 0x00c3be, 127 },
++ { 0x00c3bf, 128 },
++ { 0x00c592, 129 },
++ { 0x00c593, 130 },
++ { 0x00c5a0, 131 },
++ { 0x00c5a1, 132 },
++ { 0x00c5b8, 133 },
++ { 0x00c5bd, 134 },
++ { 0x00c5be, 135 },
++ { 0x00c692, 136 },
++ { 0x00cb86, 137 },
++ { 0x00cb9c, 138 },
++ { 0xe28093, 139 },
++ { 0xe28094, 140 },
++ { 0xe28098, 141 },
++ { 0xe28099, 142 },
++ { 0xe2809a, 143 },
++ { 0xe2809c, 144 },
++ { 0xe2809d, 145 },
++ { 0xe2809e, 146 },
++ { 0xe280a0, 147 },
++ { 0xe280a1, 148 },
++ { 0xe280a2, 149 },
++ { 0xe280a6, 150 },
++ { 0xe280b0, 151 },
++ { 0xe280b9, 152 },
++ { 0xe280ba, 153 },
++ { 0xe282ac, 154 },
++ { 0xe284a2, 155 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso1_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso15_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_win1252_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0081, 2 },
++ { 0x008d, 14 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x009d, 30 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x008c, 13 },
++ { 0x009c, 29 },
++ { 0x008a, 11 },
++ { 0x009a, 27 },
++ { 0x009f, 32 },
++ { 0x008e, 15 },
++ { 0x009e, 31 },
++ { 0x0083, 4 },
++ { 0x0088, 9 },
++ { 0x0098, 25 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0099, 26 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/ftpcmdio.c vsftpd-2.0.5/ftpcmdio.c
+--- vsftpd-2.0.5.org/ftpcmdio.c 2005-03-04 02:42:34.000000000 +0200
++++ vsftpd-2.0.5/ftpcmdio.c 2008-01-13 19:34:50.000000000 +0200
+@@ -19,6 +19,7 @@
+ #include "logging.h"
+ #include "session.h"
+ #include "readwrite.h"
++#include "charconv.h"
+
+ /* Internal functions */
+ static void control_getline(struct mystr* p_str, struct vsf_session* p_sess);
+@@ -125,9 +126,13 @@
+ vsf_log_line(p_sess, kVSFLogEntryFTPOutput, &s_write_buf_str);
+ }
+ str_copy(&s_text_mangle_str, p_str);
++ vsf_charconv_convert(p_sess, &s_text_mangle_str, VSFTP_CONVDIRECT_FORWARD);
+ /* Process the output response according to the specifications.. */
+ /* Escape telnet characters properly */
+- str_replace_text(&s_text_mangle_str, "\377", "\377\377");
++// if (tunable_double_377)
++ {
++ str_replace_text(&s_text_mangle_str, "\377", "\377\377");
++ }
+ /* Change \n for \0 in response */
+ str_replace_char(&s_text_mangle_str, '\n', '\0');
+ /* Build string to squirt down network */
+@@ -213,5 +218,6 @@
+ --len;
+ }
+ }
++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_BACKWARD);
+ }
+
+diff -urN vsftpd-2.0.5.org/ftpdataio.c vsftpd-2.0.5/ftpdataio.c
+--- vsftpd-2.0.5.org/ftpdataio.c 2005-03-12 04:00:00.000000000 +0200
++++ vsftpd-2.0.5/ftpdataio.c 2008-01-13 19:35:59.000000000 +0200
+@@ -296,7 +296,7 @@
+ {
+ p_subdir_list = &subdir_list;
+ }
+- vsf_ls_populate_dir_list(&dir_list, p_subdir_list, p_dir, p_base_dir_str,
++ vsf_ls_populate_dir_list(p_sess, &dir_list, p_subdir_list, p_dir, p_base_dir_str,
+ p_option_str, p_filter_str, is_verbose);
+ if (p_subdir_list)
+ {
+diff -urN vsftpd-2.0.5.org/ls.c vsftpd-2.0.5/ls.c
+--- vsftpd-2.0.5.org/ls.c 2005-05-24 00:55:00.000000000 +0300
++++ vsftpd-2.0.5/ls.c 2008-01-13 19:32:28.000000000 +0200
+@@ -14,13 +14,16 @@
+ #include "sysstr.h"
+ #include "sysutil.h"
+ #include "tunables.h"
++#include "charconv.h"
+
+-static void build_dir_line(struct mystr* p_str,
++static void build_dir_line(struct vsf_session* p_sess,
++ struct mystr* p_str,
+ const struct mystr* p_filename_str,
+ const struct vsf_sysutil_statbuf* p_stat);
+
+ void
+-vsf_ls_populate_dir_list(struct mystr_list* p_list,
++vsf_ls_populate_dir_list(struct vsf_session* p_sess,
++ struct mystr_list* p_list,
+ struct mystr_list* p_subdir_list,
+ struct vsf_sysutil_dir* p_dir,
+ const struct mystr* p_base_dir_str,
+@@ -157,7 +160,7 @@
+ {
+ str_append_char(&s_final_file_str, '/');
+ }
+- build_dir_line(&dirline_str, &s_final_file_str, s_p_statbuf);
++ build_dir_line(p_sess, &dirline_str, &s_final_file_str, s_p_statbuf);
+ }
+ else
+ {
+@@ -176,6 +179,7 @@
+ str_append_char(&dirline_str, '@');
+ }
+ }
++ vsf_charconv_convert(p_sess, &dirline_str, VSFTP_CONVDIRECT_FORWARD);
+ str_append_text(&dirline_str, "\r\n");
+ }
+ /* Add filename into our sorted list - sorting by filename or time. Also,
+@@ -357,7 +361,7 @@
+ }
+
+ static void
+-build_dir_line(struct mystr* p_str, const struct mystr* p_filename_str,
++build_dir_line(struct vsf_session* p_sess, struct mystr* p_str, const struct mystr* p_filename_str,
+ const struct vsf_sysutil_statbuf* p_stat)
+ {
+ static struct mystr s_tmp_str;
+@@ -431,6 +435,7 @@
+ str_append_char(p_str, ' ');
+ /* Filename */
+ str_append_str(p_str, p_filename_str);
++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_FORWARD);
+ str_append_text(p_str, "\r\n");
+ }
+
+diff -urN vsftpd-2.0.5.org/ls.h vsftpd-2.0.5/ls.h
+--- vsftpd-2.0.5.org/ls.h 2003-09-15 13:43:40.000000000 +0300
++++ vsftpd-2.0.5/ls.h 2008-01-13 19:32:30.000000000 +0200
+@@ -4,12 +4,14 @@
+ struct mystr;
+ struct mystr_list;
+ struct vsf_sysutil_dir;
++struct vsf_session;
+
+ /* vsf_ls_populate_dir_list()
+ * PURPOSE
+ * Given a directory handle, populate a formatted directory entry list (/bin/ls
+ * format). Also optionally populate a list of subdirectories.
+ * PARAMETERS
++ * p_sess - the current FTP session object
+ * p_list - the string list object for the result list of entries
+ * p_subdir_list - the string list object for the result list of
+ * subdirectories. May be 0 if client is not interested.
+@@ -19,7 +21,8 @@
+ * p_filter_str - the filter string given to LIST/NLST - e.g. "*.mp3"
+ * is_verbose - set to 1 for LIST, 0 for NLST
+ */
+-void vsf_ls_populate_dir_list(struct mystr_list* p_list,
++void vsf_ls_populate_dir_list(struct vsf_session* p_sess,
++ struct mystr_list* p_list,
+ struct mystr_list* p_subdir_list,
+ struct vsf_sysutil_dir* p_dir,
+ const struct mystr* p_base_dir_str,
+diff -urN vsftpd-2.0.5.org/main.c vsftpd-2.0.5/main.c
+--- vsftpd-2.0.5.org/main.c 2006-07-03 15:26:08.000000000 +0300
++++ vsftpd-2.0.5/main.c 2008-01-13 20:51:11.000000000 +0200
+@@ -63,7 +63,9 @@
+ /* Secure connection state */
+ 0, 0, 0, 0, 0, 0, -1, -1,
+ /* Login fails */
+- 0
++ 0,
++ /* Filename charset conv */
++ 0, 0,
+ };
+ int config_specified = 0;
+ const char* p_config_name = VSFTP_DEFAULT_CONFIG;
+@@ -106,6 +108,12 @@
+ }
+ vsf_sysutil_free(p_statbuf);
+ }
++ /* Init local codepage */
++ if (tunable_convert_charset_enable)
++ {
++ tunable_local_codepage = vsf_charconv_codepage(tunable_local_charset);
++ tunable_convert_charset_enable = (tunable_local_codepage) ? 1 : 0;
++ }
+ /* Resolve pasv_address if required */
+ if (tunable_pasv_address && tunable_pasv_addr_resolve)
+ {
+diff -urN vsftpd-2.0.5.org/Makefile vsftpd-2.0.5/Makefile
+--- vsftpd-2.0.5.org/Makefile 2006-07-03 15:25:41.000000000 +0300
++++ vsftpd-2.0.5/Makefile 2008-01-13 19:39:58.000000000 +0200
+@@ -14,7 +14,7 @@
+ banner.o filestr.o parseconf.o secutil.o \
+ ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o \
+ tcpwrap.o ipaddrparse.o access.o features.o readwrite.o \
+- ssl.o sysutil.o sysdeputil.o
++ ssl.o sysutil.o sysdeputil.o charconv.o
+
+
+ .c.o:
+diff -urN vsftpd-2.0.5.org/parseconf.c vsftpd-2.0.5/parseconf.c
+--- vsftpd-2.0.5.org/parseconf.c 2006-07-02 02:05:10.000000000 +0300
++++ vsftpd-2.0.5/parseconf.c 2008-01-13 20:21:57.000000000 +0200
+@@ -99,6 +99,7 @@
+ { "mdtm_write", &tunable_mdtm_write },
+ { "lock_upload_files", &tunable_lock_upload_files },
+ { "pasv_addr_resolve", &tunable_pasv_addr_resolve },
++ { "convert_charset_enable", &tunable_convert_charset_enable },
+ { 0, 0 }
+ };
+
+@@ -168,6 +169,8 @@
+ { "ssl_ciphers", &tunable_ssl_ciphers },
+ { "rsa_private_key_file", &tunable_rsa_private_key_file },
+ { "dsa_private_key_file", &tunable_dsa_private_key_file },
++ { "local_charset", &tunable_local_charset },
++ { "remote_charset", &tunable_remote_charset },
+ { 0, 0 }
+ };
+
+diff -urN vsftpd-2.0.5.org/postlogin.c vsftpd-2.0.5/postlogin.c
+--- vsftpd-2.0.5.org/postlogin.c 2006-06-12 01:45:25.000000000 +0300
++++ vsftpd-2.0.5/postlogin.c 2008-01-13 20:58:37.000000000 +0200
+@@ -25,6 +25,7 @@
+ #include "access.h"
+ #include "features.h"
+ #include "ssl.h"
++#include "charconv.h"
+ #include "vsftpver.h"
+
+ /* Private local functions */
+@@ -98,6 +99,17 @@
+ /* Handle any login message */
+ vsf_banner_dir_changed(p_sess, FTP_LOGINOK);
+ vsf_cmdio_write(p_sess, FTP_LOGINOK, "Login successful.");
++ if (tunable_convert_charset_enable)
++ {
++ vsf_charconv_init_local_codepage(tunable_local_codepage);
++ tunable_remote_codepage = vsf_charconv_codepage(tunable_remote_charset);
++ p_sess->remote_charset = tunable_remote_codepage;
++ p_sess->enable_conversion = vsf_charconv_avail_convertion(tunable_local_codepage, p_sess->remote_charset);
++ }
++ else
++ {
++ p_sess->enable_conversion = 0;
++ }
+ while(1)
+ {
+ int cmd_ok = 1;
+diff -urN vsftpd-2.0.5.org/session.h vsftpd-2.0.5/session.h
+--- vsftpd-2.0.5.org/session.h 2006-07-02 03:34:48.000000000 +0300
++++ vsftpd-2.0.5/session.h 2008-01-13 20:39:41.000000000 +0200
+@@ -91,6 +91,10 @@
+ int ssl_slave_fd;
+ int ssl_consumer_fd;
+ unsigned int login_fails;
++
++ /* Filename charset conv */
++ int enable_conversion;
++ int remote_charset;
+ };
+
+ #endif /* VSF_SESSION_H */
+diff -urN vsftpd-2.0.5.org/tunables.c vsftpd-2.0.5/tunables.c
+--- vsftpd-2.0.5.org/tunables.c 2006-07-02 02:06:56.000000000 +0300
++++ vsftpd-2.0.5/tunables.c 2008-01-13 20:24:57.000000000 +0200
+@@ -71,6 +71,9 @@
+ int tunable_mdtm_write = 1;
+ int tunable_lock_upload_files = 1;
+ int tunable_pasv_addr_resolve = 0;
++int tunable_convert_charset_enable = 0;
++int tunable_local_codepage = 0;
++int tunable_remote_codepage = 0;
+
+ unsigned int tunable_accept_timeout = 60;
+ unsigned int tunable_connect_timeout = 60;
+@@ -125,4 +128,6 @@
+ const char* tunable_ssl_ciphers = "DES-CBC3-SHA";
+ const char* tunable_rsa_private_key_file = 0;
+ const char* tunable_dsa_private_key_file = 0;
++const char* tunable_local_charset = "NONE";
++const char* tunable_remote_charset = "NONE";
+
+diff -urN vsftpd-2.0.5.org/tunables.h vsftpd-2.0.5/tunables.h
+--- vsftpd-2.0.5.org/tunables.h 2006-07-02 02:07:00.000000000 +0300
++++ vsftpd-2.0.5/tunables.h 2008-01-13 20:28:11.000000000 +0200
+@@ -67,6 +67,9 @@
+ extern int tunable_mdtm_write; /* Allow MDTM to set timestamps */
+ extern int tunable_lock_upload_files; /* Lock uploading files */
+ extern int tunable_pasv_addr_resolve; /* DNS resolve pasv_addr */
++extern int tunable_convert_charset_enable; /* Allow converting charsets for file names */
++extern int tunable_local_codepage; /* Code of local charset */
++extern int tunable_remote_codepage; /* Code of remote charset */
+
+ /* Integer/numeric defines */
+ extern unsigned int tunable_accept_timeout;
+@@ -120,6 +123,8 @@
+ extern const char* tunable_ssl_ciphers;
+ extern const char* tunable_rsa_private_key_file;
+ extern const char* tunable_dsa_private_key_file;
++extern const char* tunable_local_charset;
++extern const char* tunable_remote_charset;
+
+ #endif /* VSF_TUNABLES_H */
+
diff --git a/packages/vsftpd/vsftpd-charconv_2.0.5.bb b/packages/vsftpd/vsftpd-charconv_2.0.5.bb
new file mode 100644
index 0000000000..cc559c6259
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv_2.0.5.bb
@@ -0,0 +1,50 @@
+DESCRIPTION = "Secure ftp daemon with filename charconv"
+SECTION = "console/network"
+LICENSE = "GPL"
+PR = "r1"
+
+FILESPATH_append = ":${@os.path.dirname(bb.data.getVar('FILE',d,1))}/vsftpd-2.0.5"
+
+SRC_URI = "ftp://vsftpd.beasts.org/users/cevans/vsftpd-${PV}.tar.gz \
+ file://vsftpd-charconv.patch;patch=1 \
+ file://makefile.patch;patch=1 \
+ file://nopam.patch;patch=1 \
+ file://syscall.patch;patch=1 \
+ file://init \
+ file://vsftpd.conf"
+
+S = "${WORKDIR}/vsftpd-2.0.5"
+
+inherit update-rc.d
+
+do_configure() {
+ # Fix hardcoded /usr, /etc, /var mess.
+ cat tunables.c|sed s:\"/usr:\"${prefix}:g|sed s:\"/var:\"${localstatedir}:g \
+ |sed s:\"${prefix}/share/empty:\"${localstatedir}/share/empty:g |sed s:\"/etc:\"${sysconfdir}:g > tunables.c.new
+ mv tunables.c.new tunables.c
+}
+
+do_compile() {
+ oe_runmake "LIBS=-lcrypt -L${STAGING_LIBDIR}"
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man8
+ install -d ${D}${mandir}/man5
+ oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}${sysconfdir}
+ install -m 0755 ${WORKDIR}/vsftpd.conf ${D}${sysconfdir}/vsftpd.conf
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/vsftpd
+}
+
+pkg_postinst() {
+ addgroup ftp
+ adduser --system --home /var/tmp/ftp --no-create-home --ingroup ftp --disabled-password -s /bin/false ftp
+ mkdir -p ${localstatedir}/share/empty
+}
+
+INITSCRIPT_NAME = "vsftpd"
+
+INITSCRIPT_PARAMS = "defaults"