diff options
-rw-r--r-- | ChangeLog | 32 | ||||
-rw-r--r-- | iconvdata/gconv-modules | 8 | ||||
-rw-r--r-- | iconvdata/iso646.c | 67 | ||||
-rw-r--r-- | localedata/Makefile | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/ioctls.h | 2 |
5 files changed, 95 insertions, 22 deletions
@@ -1,6 +1,34 @@ +1998-04-02 11:45 Ulrich Drepper <drepper@cygnus.com> + + * localedata/Makefile: Correct testsuite rules. + + * iconvdata/gconv-modules: Set cost of ISO646 module to 2. + * iconvdata/iso646.c: Fix conversion from UCS4. + + * elf/ldsodefs.h: Mark internal function with internal_function. + * elf/dl-addr.c: Likewise. + * elf/dl-close.c: Likewise. + * elf/dl-debug.c: Likewise. + * elf/dl-deps.c: Likewise. + * elf/dl-error.c: Likewise. + * elf/dl-fini.c: Likewise. + * elf/dl-init.c: Likewise. + * elf/dl-load.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-object.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/dl-profile.c: Likewise. + * elf/dl-reloc.c: Likewise. + * elf/dl-runtime.c: Likewise. + * elf/dl-symbol.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/dlerror.c: Likewise. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/i386/dl-machine.h: Likewise. + 1998-04-01 17:38 Ulrich Drepper <drepper@cygnus.com> - * iconv/gconv?simple.c: New builtins for UCS en/decoding. + * iconv/gconv_simple.c: New builtins for UCS en/decoding. * iconv/gconv_builtin.h: Add definitions for new builtins. * iconv/gconv.h: Add prototypes for new builtins. @@ -29,7 +57,7 @@ * iconv/gconv_conf.c (builtin_aliases): New variable. (__gconv_read_conf): Add builtin aliases. - * iconv/gconv_builtin.c (builtin_map): Define BUILTIN?ALIAS as an + * iconv/gconv_builtin.c (builtin_map): Define BUILTIN_ALIAS as an noop macro before including gconv_builtin.h. * iconv/gconv_builtin.h: Add alias names. diff --git a/iconvdata/gconv-modules b/iconvdata/gconv-modules index adbf2f07a1..be03e9608e 100644 --- a/iconvdata/gconv-modules +++ b/iconvdata/gconv-modules @@ -48,15 +48,15 @@ alias US-ASCII// ANSI_X3.4-1968// alias US// ANSI_X3.4-1968// alias IBM367// ANSI_X3.4-1968// alias CP367// ANSI_X3.4-1968// -module ANSI_X3.4-1968// ISO-10646/UCS4/ ISO646 1 -module ISO-10646/UCS4/ ANSI_X3.4-1968// ISO646 1 +module ANSI_X3.4-1968// ISO-10646/UCS4/ ISO646 2 +module ISO-10646/UCS4/ ANSI_X3.4-1968// ISO646 2 alias ISO-IR-4// BS_4730// alias ISO646-GB// BS_4730// alias GB// BS_4730// alias UK// BS_4730// -module BS_4730// ISO-10646/UCS4/ ISO646 -module ISO-10646/UCS4/ BS_4730// ISO646 +module BS_4730// ISO-10646/UCS4/ ISO646 2 +module ISO-10646/UCS4/ BS_4730// ISO646 2 # from to module cost alias ISO-IR-100// ISO-8859-1// diff --git a/iconvdata/iso646.c b/iconvdata/iso646.c index db0c0893e7..3b4864ef11 100644 --- a/iconvdata/iso646.c +++ b/iconvdata/iso646.c @@ -18,6 +18,19 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* The implementation of the conversion which can be performed by this + module are not very sophisticated and not tuned at all. There are + zillions of ISO 646 derivates and supporting them all in a separate + module is overkill since these coded character sets are hardly ever + used anymore (except ANSI_X3.4-1968 == ASCII, which is compatible + with ISO 8859-1). The European variants are superceded by the + various ISO 8859-? standards and the Asian variants are embedded in + larger character sets. Therefore this implementation is simply + here to make it possible to do the conversion if it is necessary. + The cost in the gconv-modules file is set to `2' and therefore + allows one to easily provide a tuned implementation in case this + proofs to be necessary. */ + #include <gconv.h> #include <stdlib.h> #include <string.h> @@ -25,13 +38,14 @@ /* Direction of the transformation. */ enum direction { - illegal, + illegal_dir, to_iso646, from_iso646 }; enum variant { + illegal_var, US, /* ANSI_X3.4-1968 */ GB, /* BS_4730 */ }; @@ -73,10 +87,13 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data) var = GB; } else - dir = illegal; + { + dir = illegal_dir; + var = illegal_var; + } result = GCONV_NOCONV; - if (dir != illegal + if (dir != illegal_dir && ((new_data = (struct iso646_data *) malloc (sizeof (struct iso646_data))) != NULL)) @@ -167,11 +184,16 @@ gconv (struct gconv_step *step, struct gconv_step_data *data, default: *((wchar_t *) (outbuf + outwchars)) = (unsigned char) inbuf[cnt]; + case '\x80' ... '\xff': + /* Illegal character. */ + result = GCONV_ILLEGAL_INPUT; + goto out_from; } ++do_write; outwchars += sizeof (wchar_t); ++cnt; } + out_from: *inbufsize -= cnt; data->outbufavail = outwchars; } @@ -179,24 +201,47 @@ gconv (struct gconv_step *step, struct gconv_step_data *data, { size_t inwchars = *inbufsize; size_t outchars = data->outbufavail; - char *outbuf = data->outbuf; + unsigned char *outbuf = data->outbuf; size_t cnt = 0; while (inwchars >= cnt + sizeof (wchar_t) && outchars < data->outbufsize) { - if (*((wchar_t *) (inbuf + cnt)) >= L'\0' - && *((wchar_t *) (inbuf + cnt)) <= L'\177') - outbuf[outchars] = *((wchar_t *) (inbuf + cnt)); - else - /* Here is where the transliteration would enter the - scene. */ - break; + switch (*((wchar_t *) (inbuf + cnt))) + { + case 0x23: + if (var == GB) + goto out_to; + outbuf[outchars] = 0x23; + break; + case 0x75: + if (var == GB) + goto out_to; + outbuf[outchars] = 0x75; + break; + case 0xa3: + if (var != GB) + goto out_to; + outbuf[outchars] = 0x23; + break; + case 0x203e: + if (var != GB) + goto out_to; + outbuf[outchars] = 0x75; + break; + default: + if (*((wchar_t *) (inbuf + cnt)) > 0x7f) + goto out_to; + outbuf[outchars] = + (unsigned char) *((wchar_t *) (inbuf + cnt)); + break; + } ++do_write; ++outchars; cnt += sizeof (wchar_t); } + out_to: *inbufsize -= cnt; data->outbufavail = outchars; diff --git a/localedata/Makefile b/localedata/Makefile index c01454393b..dac662081e 100644 --- a/localedata/Makefile +++ b/localedata/Makefile @@ -65,11 +65,11 @@ tests: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-collate-test: sort-test.sh $(objpfx)collate-test $(objpfx)xfrm-test \ $(test-input:.ISO-8859-1=.in) $(SHELL) -e $< $(common-objpfx) $(test-input) -do-tst-fmon: tst-locale.sh $(objpfx)tst-fmon $(ld-test-srcs) +do-tst-fmon: tst-fmon.sh $(objpfx)tst-fmon tst-fmon.data + $(SHELL) -e $< $(common-objpfx) tst-fmon.data +do-tst-locale: tst-locale.sh $(ld-test-srcs) $(SHELL) -e $< $(common-objpfx) -do-tst-locale: tst-locale.sh - $(SHELL) -e $< $(common-objpfx) -do-tst-rpmatch: tst-rpmatch.sh $(objpfx)tst-rpmatch +do-tst-rpmatch: tst-rpmatch.sh $(objpfx)tst-rpmatch do-collate-test $(SHELL) -e $< $(common-objpfx) endif diff --git a/sysdeps/unix/sysv/linux/bits/ioctls.h b/sysdeps/unix/sysv/linux/bits/ioctls.h index 7208d3bd4f..c103645f67 100644 --- a/sysdeps/unix/sysv/linux/bits/ioctls.h +++ b/sysdeps/unix/sysv/linux/bits/ioctls.h @@ -99,7 +99,7 @@ names as their own. Because these are device dependent it is a good idea _NOT_ to issue them to random objects and hope. */ -#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */ +#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */ /* * These 16 ioctl calls are protocol private |