Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 2 Apr 1998 12:44:17 +0000 (12:44 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 2 Apr 1998 12:44:17 +0000 (12:44 +0000)
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.

* iconv/gconv_simple.c: New builtins for UCS en/decoding.
* iconv/gconv_builtin.c (builtin_map): Define BUILTIN_ALIAS as an

ChangeLog
iconvdata/gconv-modules
iconvdata/iso646.c
localedata/Makefile
sysdeps/unix/sysv/linux/bits/ioctls.h

index 052f2e9..3c06996 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
 
index adbf2f0..be03e96 100644 (file)
@@ -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//
index db0c089..3b4864e 100644 (file)
    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>
 /* 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;
 
index c014543..dac6620 100644 (file)
@@ -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
 
index 7208d3b..c103645 100644 (file)
@@ -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