Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 5 Feb 2001 05:57:24 +0000 (05:57 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 5 Feb 2001 05:57:24 +0000 (05:57 +0000)
2001-02-04  Ulrich Drepper  <drepper@redhat.com>

* iconv/Makefile (iconv_prog-modules): Define.  Add vpath to find
files in locale/programs.  Add CFLAGS definition to allow compiling
localedef files.
* iconv/dummy-repertoire.c: New file.
* iconv/iconv_charmap.c: New file.
* iconv/iconv_prog.h: New file.
* iconv/iconv_prog.c: Make verbose and omit_invalid global.
(main): If parameter for -f and -t contain slashes try first to resolve
the strings as filenames of charmap files.  Use them for conversion
in this case.
* iconvdata/run-iconv-test.sh: If charmaps exist also run tests with
iconv getting charmap names as parameters.
* locale/programs/linereader.c (lr_token): Take extra parameters
verbose and pass it to get_string.
(get_string): Take extra parameters verbose.
* locale/programs/charmap.c (parse_charmap): Take extra parameters
verbose and be_quiet.  Change all callers of lr_token and
parse_charmap.
* locale/programs/charmap.h: Likewise.
* locale/programs/ld-address.c: Likewise.
* locale/programs/ld-collate.c: Likewise.
* locale/programs/ld-ctype.c: Likewise.
* locale/programs/ld-identification.c: Likewise.
* locale/programs/ld-measurement.c: Likewise.
* locale/programs/ld-messages.c: Likewise.
* locale/programs/ld-monetary.c: Likewise.
* locale/programs/ld-name.c: Likewise.
* locale/programs/ld-numeric.c: Likewise.
* locale/programs/ld-paper.c: Likewise.
* locale/programs/ld-telephone.c: Likewise.
* locale/programs/ld-time.c: Likewise.
* locale/programs/linereader.c: Likewise.
* locale/programs/linereader.h: Likewise.
* locale/programs/localedef.c: Likewise.
* locale/programs/locfile.c: Likewise.
* locale/programs/locfile.h: Likewise.
* locale/programs/repertoire.c: Likewise.

27 files changed:
ChangeLog
iconv/Makefile
iconv/dummy-repertoire.c [new file with mode: 0644]
iconv/iconv_charmap.c [new file with mode: 0644]
iconv/iconv_prog.c
iconv/iconv_prog.h [new file with mode: 0644]
iconvdata/run-iconv-test.sh
locale/programs/charmap.c
locale/programs/charmap.h
locale/programs/ld-address.c
locale/programs/ld-collate.c
locale/programs/ld-ctype.c
locale/programs/ld-identification.c
locale/programs/ld-measurement.c
locale/programs/ld-messages.c
locale/programs/ld-monetary.c
locale/programs/ld-name.c
locale/programs/ld-numeric.c
locale/programs/ld-paper.c
locale/programs/ld-telephone.c
locale/programs/ld-time.c
locale/programs/linereader.c
locale/programs/linereader.h
locale/programs/localedef.c
locale/programs/locfile.c
locale/programs/locfile.h
locale/programs/repertoire.c

index 92f6d41..312a8c8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,43 @@
+2001-02-04  Ulrich Drepper  <drepper@redhat.com>
+
+       * iconv/Makefile (iconv_prog-modules): Define.  Add vpath to find
+       files in locale/programs.  Add CFLAGS definition to allow compiling
+       localedef files.
+       * iconv/dummy-repertoire.c: New file.
+       * iconv/iconv_charmap.c: New file.
+       * iconv/iconv_prog.h: New file.
+       * iconv/iconv_prog.c: Make verbose and omit_invalid global.
+       (main): If parameter for -f and -t contain slashes try first to resolve
+       the strings as filenames of charmap files.  Use them for conversion
+       in this case.
+       * iconvdata/run-iconv-test.sh: If charmaps exist also run tests with
+       iconv getting charmap names as parameters.
+       * locale/programs/linereader.c (lr_token): Take extra parameters
+       verbose and pass it to get_string.
+       (get_string): Take extra parameters verbose.
+       * locale/programs/charmap.c (parse_charmap): Take extra parameters
+       verbose and be_quiet.  Change all callers of lr_token and
+       parse_charmap.
+       * locale/programs/charmap.h: Likewise.
+       * locale/programs/ld-address.c: Likewise.
+       * locale/programs/ld-collate.c: Likewise.
+       * locale/programs/ld-ctype.c: Likewise.
+       * locale/programs/ld-identification.c: Likewise.
+       * locale/programs/ld-measurement.c: Likewise.
+       * locale/programs/ld-messages.c: Likewise.
+       * locale/programs/ld-monetary.c: Likewise.
+       * locale/programs/ld-name.c: Likewise.
+       * locale/programs/ld-numeric.c: Likewise.
+       * locale/programs/ld-paper.c: Likewise.
+       * locale/programs/ld-telephone.c: Likewise.
+       * locale/programs/ld-time.c: Likewise.
+       * locale/programs/linereader.c: Likewise.
+       * locale/programs/linereader.h: Likewise.
+       * locale/programs/localedef.c: Likewise.
+       * locale/programs/locfile.c: Likewise.
+       * locale/programs/locfile.h: Likewise.
+       * locale/programs/repertoire.c: Likewise.
+
 2001-02-03  Ulrich Drepper  <drepper@redhat.com>
 
        * iconv/iconv_prog.c (main): If output file name is "-" write to
index b6c4f23..e92eb0b 100644 (file)
@@ -34,9 +34,19 @@ CFLAGS-gconv_db.c = -DSTATIC_GCONV
 CFLAGS-gconv_simple.c = -DSTATIC_GCONV
 endif
 
+vpath %.c ../locale/programs
+
+iconv_prog-modules = iconv_charmap charmap charmap-dir linereader \
+                    dummy-repertoire simple-hash xstrdup xmalloc
+CFLAGS-iconv_prog.c = -I../locale/programs
+CFLAGS-iconv_charmap.c = -I../locale/programs
+CFLAGS-dummy-repertoire.c = -I../locale/programs
+CFLAGS-charmap.c = -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
+                  -DDEFAULT_CHARMAP=null_pointer
+
 tests  = tst-iconv1 tst-iconv2 tst-iconv3
 
-distribute     = gconv_builtin.h gconv_int.h loop.c skeleton.c
+distribute     = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h
 
 others         = iconv_prog
 install-others = $(inst_bindir)/iconv
@@ -47,3 +57,5 @@ include ../Rules
 
 $(inst_bindir)/iconv: $(objpfx)iconv_prog $(+force)
        $(do-install-program)
+
+$(objpfx)iconv_prog: $(iconv_prog-modules:%=$(objpfx)%.o)
diff --git a/iconv/dummy-repertoire.c b/iconv/dummy-repertoire.c
new file mode 100644 (file)
index 0000000..d3b455e
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* For iconv we don't have to handle repertoire maps.  Provide dummy
+   definitions to allow the use of linereader.c unchanged.  */
+#include <repertoire.h>
+
+
+uint32_t
+repertoire_find_value (const struct repertoire_t *repertoire, const char *name,
+                      size_t len)
+{
+  return ILLEGAL_CHAR_VALUE;
+}
+
+
+const char *
+repertoire_find_symbol (const struct repertoire_t *repertoire, uint32_t ucs)
+{
+  return NULL;
+}
diff --git a/iconv/iconv_charmap.c b/iconv/iconv_charmap.c
new file mode 100644 (file)
index 0000000..4b72b1b
--- /dev/null
@@ -0,0 +1,563 @@
+/* Convert using charmaps and possibly iconv().
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <assert.h>
+#include <errno.h>
+#include <error.h>
+#include <fcntl.h>
+#include <iconv.h>
+#include <libintl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include "iconv_prog.h"
+
+
+/* Prototypes for a few program-wide used functions.  */
+extern void *xmalloc (size_t __n);
+extern void *xcalloc (size_t __n, size_t __s);
+
+
+struct convtable
+{
+  int term[256 / 8];
+  union
+  {
+    struct convtable *sub;
+    struct charseq *out;
+  } val[256];
+};
+
+
+static inline struct convtable *
+allocate_table (void)
+{
+  return (struct convtable *) xcalloc (1, sizeof (struct convtable));
+}
+
+
+static inline int
+is_term (struct convtable *tbl, unsigned int idx)
+{
+  return tbl->term[idx / 8] & (1 << (idx % 8));
+}
+
+
+static inline void
+clear_term (struct convtable *tbl, unsigned int idx)
+{
+  tbl->term[idx / 8] &= ~(1 << (idx % 8));
+}
+
+
+static inline void
+set_term (struct convtable *tbl, unsigned int idx)
+{
+  tbl->term[idx / 8] |= 1 << (idx % 8);
+}
+
+
+/* Generate the conversion table.  */
+static struct convtable *use_from_charmap (struct charmap_t *from_charmap,
+                                          const char *to_code);
+static struct convtable *use_to_charmap (const char *from_code,
+                                        struct charmap_t *to_charmap);
+static struct convtable *use_both_charmaps (struct charmap_t *from_charmap,
+                                           struct charmap_t *to_charmap);
+
+/* Prototypes for the functions doing the actual work.  */
+static int process_block (struct convtable *tbl, char *addr, size_t len,
+                         FILE *output);
+static int process_fd (struct convtable *tbl, int fd, FILE *output);
+static int process_file (struct convtable *tbl, FILE *input, FILE *output);
+
+
+int
+charmap_conversion (const char *from_code, struct charmap_t *from_charmap,
+                   const char *to_code, struct charmap_t *to_charmap,
+                   int argc, int remaining, char *argv[], FILE *output)
+{
+  struct convtable *cvtbl;
+  int status = EXIT_SUCCESS;
+
+  /* We have three different cases to handle:
+
+     - both, from_charmap and to_charmap, are available.  This means we
+       can assume that the symbolic names match and use them to create
+       the mapping.
+
+     - only from_charmap is available.  In this case we can only hope that
+       the symbolic names used are of the <Uxxxx> form in which case we
+       can use a UCS4->"to_code" iconv() conversion for the second step.
+
+     - only to_charmap is available.  This is similar, only that we would
+       use iconv() for the "to_code"->UCS4 conversion.
+
+       We first create a table which maps input bytes into output bytes.
+       Once this is done we can handle all three of the cases above
+       equally.  */
+  if (from_charmap != NULL)
+    {
+      if (to_charmap == NULL)
+       cvtbl = use_from_charmap (from_charmap, to_code);
+      else
+       cvtbl = use_both_charmaps (from_charmap, to_charmap);
+    }
+  else
+    {
+      assert (to_charmap != NULL);
+      cvtbl = use_to_charmap (from_code, to_charmap);
+    }
+
+  /* If we couldn't generate a table stop now.  */
+  if (cvtbl == NULL)
+    return EXIT_FAILURE;
+
+  /* We can now start the conversion.  */
+  if (remaining == argc)
+    {
+      if (process_file (cvtbl, stdin, output) != 0)
+       status = EXIT_FAILURE;
+    }
+  else
+    do
+      {
+       struct stat st;
+       char *addr;
+       int fd;
+
+       if (verbose)
+         printf ("%s:\n", argv[remaining]);
+       if (strcmp (argv[remaining], "-") == 0)
+         fd = 0;
+       else
+         {
+           fd = open (argv[remaining], O_RDONLY);
+
+           if (fd == -1)
+             {
+               error (0, errno, _("cannot open input file `%s'"),
+                      argv[remaining]);
+               status = EXIT_FAILURE;
+               continue;
+             }
+         }
+
+#ifdef _POSIX_MAPPED_FILES
+       /* We have possibilities for reading the input file.  First try
+          to mmap() it since this will provide the fastest solution.  */
+       if (fstat (fd, &st) == 0
+           && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE,
+                             fd, 0)) != MAP_FAILED))
+         {
+           /* Yes, we can use mmap().  The descriptor is not needed
+              anymore.  */
+           if (close (fd) != 0)
+             error (EXIT_FAILURE, errno,
+                    _("error while closing input `%s'"), argv[remaining]);
+
+           if (process_block (cvtbl, addr, st.st_size, output) < 0)
+             {
+               /* Something went wrong.  */
+               status = EXIT_FAILURE;
+
+               /* We don't need the input data anymore.  */
+               munmap ((void *) addr, st.st_size);
+
+               /* We cannot go on with producing output since it might
+                  lead to problem because the last output might leave
+                  the output stream in an undefined state.  */
+               break;
+             }
+
+           /* We don't need the input data anymore.  */
+           munmap ((void *) addr, st.st_size);
+         }
+       else
+#endif /* _POSIX_MAPPED_FILES */
+         {
+           /* Read the file in pieces.  */
+           if (process_fd (cvtbl, fd, output) != 0)
+             {
+               /* Something went wrong.  */
+               status = EXIT_FAILURE;
+
+               /* We don't need the input file anymore.  */
+               close (fd);
+
+               /* We cannot go on with producing output since it might
+                  lead to problem because the last output might leave
+                  the output stream in an undefined state.  */
+               break;
+             }
+
+           /* Now close the file.  */
+           close (fd);
+         }
+      }
+    while (++remaining < argc);
+
+  /* All done.  */
+  return status;
+}
+
+
+static void
+add_bytes (struct convtable *tbl, struct charseq *in, struct charseq *out)
+{
+  int n = 0;
+  unsigned int byte;
+
+  assert (in->nbytes > 0);
+
+  byte = ((unsigned char *) in->bytes)[n];
+  while (n + 1 < in->nbytes)
+    {
+      if (is_term (tbl, byte) || tbl->val[byte].sub == NULL)
+       {
+         /* Note that we simply ignore a definition for a byte sequence
+            which is also the prefix for a longer one.  */
+         clear_term (tbl, byte);
+         tbl->val[byte].sub =
+           (struct convtable *) xcalloc (1, sizeof (struct convtable));
+       }
+
+      tbl = tbl->val[byte].sub;
+
+      byte = ((unsigned char *) in->bytes)[++n];
+    }
+
+  /* Only add the new sequence if there is none yet and the byte sequence
+     is not part of an even longer one.  */
+  if (! is_term (tbl, byte) && tbl->val[byte].sub == NULL)
+    {
+      set_term (tbl, byte);
+      tbl->val[byte].out = out;
+    }
+}
+
+
+static struct convtable *
+use_from_charmap (struct charmap_t *from_charmap, const char *to_code)
+{
+  /* We iterate over all entries in the from_charmap and for those which
+     have a known UCS4 representation we use an iconv() call to determine
+     the mapping to the to_code charset.  */
+  struct convtable *rettbl;
+  iconv_t cd;
+  void *ptr = NULL;
+  const void *key;
+  size_t keylen;
+  void *data;
+
+  cd = iconv_open (to_code, "WCHAR_T");
+  if (cd == (iconv_t) -1)
+    /* We cannot do anything.  */
+    return NULL;
+
+  rettbl = allocate_table ();
+
+  while (iterate_table (&from_charmap->char_table, &ptr, &key, &keylen, &data)
+        >= 0)
+    {
+      struct charseq *in = (struct charseq *) data;
+
+      if (in->ucs4 != UNINITIALIZED_CHAR_VALUE)
+       {
+         /* There is a chance.  Try the iconv module.  */
+         wchar_t inbuf[1] = { in->ucs4 };
+         unsigned char outbuf[64];
+         char *inptr = (char *) inbuf;
+         size_t inlen = sizeof (inbuf);
+         char *outptr = (char *) outbuf;
+         size_t outlen = sizeof (outbuf);
+
+         (void) iconv (cd, &inptr, &inlen, &outptr, &outlen);
+
+         if (outptr != (char *) outbuf)
+           {
+             /* We got some output.  Good, use it.  */
+             struct charseq *newp;
+
+             outlen = sizeof (outbuf) - outlen;
+             assert ((char *) outbuf + outlen == outptr);
+
+             newp = (struct charseq *) xmalloc (sizeof (struct charseq)
+                                                + outlen);
+             newp->name = in->name;
+             newp->ucs4 = in->ucs4;
+             newp->nbytes = outlen;
+             memcpy (newp->bytes, outbuf, outlen);
+
+             add_bytes (rettbl, in, newp);
+           }
+
+         /* Clear any possible state left behind.  */
+         (void) iconv (cd, NULL, NULL, NULL, NULL);
+       }
+    }
+
+  iconv_close (cd);
+
+  return rettbl;
+}
+
+
+static struct convtable *
+use_to_charmap (const char *from_code, struct charmap_t *to_charmap)
+{
+  /* We iterate over all entries in the to_charmap and for those which
+     have a known UCS4 representation we use an iconv() call to determine
+     the mapping to the from_code charset.  */
+  struct convtable *rettbl;
+  iconv_t cd;
+  void *ptr = NULL;
+  const void *key;
+  size_t keylen;
+  void *data;
+
+  /* Note that the conversion we use here is the reverse direction.  Without
+     exhaustive search we cannot figure out which input yields the UCS4
+     character we are looking for.  Therefore we determine it the other
+     way round.  */
+  cd = iconv_open (from_code, "WCHAR_T");
+  if (cd == (iconv_t) -1)
+    /* We cannot do anything.  */
+    return NULL;
+
+  rettbl = allocate_table ();
+
+  while (iterate_table (&to_charmap->char_table, &ptr, &key, &keylen, &data)
+        >= 0)
+    {
+      struct charseq *out = (struct charseq *) data;
+
+      if (out->ucs4 != UNINITIALIZED_CHAR_VALUE)
+       {
+         /* There is a chance.  Try the iconv module.  */
+         wchar_t inbuf[1] = { out->ucs4 };
+         unsigned char outbuf[64];
+         char *inptr = (char *) inbuf;
+         size_t inlen = sizeof (inbuf);
+         char *outptr = (char *) outbuf;
+         size_t outlen = sizeof (outbuf);
+
+         (void) iconv (cd, &inptr, &inlen, &outptr, &outlen);
+
+         if (outptr != (char *) outbuf)
+           {
+             /* We got some output.  Good, use it.  */
+             struct charseq *newp;
+
+             outlen = sizeof (outbuf) - outlen;
+             assert ((char *) outbuf + outlen == outptr);
+
+             newp = (struct charseq *) xmalloc (sizeof (struct charseq)
+                                                + outlen);
+             newp->name = out->name;
+             newp->ucs4 = out->ucs4;
+             newp->nbytes = outlen;
+             memcpy (newp->bytes, outbuf, outlen);
+
+             add_bytes (rettbl, newp, out);
+           }
+
+         /* Clear any possible state left behind.  */
+         (void) iconv (cd, NULL, NULL, NULL, NULL);
+       }
+    }
+
+  iconv_close (cd);
+
+  return rettbl;
+}
+
+
+static struct convtable *
+use_both_charmaps (struct charmap_t *from_charmap,
+                  struct charmap_t *to_charmap)
+{
+  /* In this case we iterate over all the entries in the from_charmap,
+     determine the internal name, and find an appropriate entry in the
+     to_charmap (if it exists).  */
+  struct convtable *rettbl = allocate_table ();
+  void *ptr = NULL;
+  const void *key;
+  size_t keylen;
+  void *data;
+
+  while (iterate_table (&from_charmap->char_table, &ptr, &key, &keylen, &data)
+        >= 0)
+    {
+      struct charseq *in = (struct charseq *) data;
+      struct charseq *out = charmap_find_value (to_charmap, key, keylen);
+
+      if (out != NULL)
+       add_bytes (rettbl, in, out);
+    }
+
+  return rettbl;
+}
+
+
+static int
+process_block (struct convtable *tbl, char *addr, size_t len, FILE *output)
+{
+  size_t n = 0;
+
+  while (n < len)
+    {
+      struct convtable *cur = tbl;
+      unsigned char *curp = (unsigned char *) addr;
+      unsigned int byte = *curp;
+      int cnt;
+      struct charseq *out;
+
+      while (! is_term (cur, byte))
+       if (cur->val[byte].sub == NULL)
+         {
+           /* This is a invalid sequence.  Skip the first byte if we are
+              ignoring errors.  Otherwise punt.  */
+           if (! omit_invalid)
+             {
+               error (0, 0, _("illegal input sequence at position %Zd"), n);
+               return -1;
+             }
+
+           n -= curp - (unsigned char *) addr;
+
+           byte = *(curp = (unsigned char *) ++addr);
+           if (++n >= len)
+             /* All converted.  */
+             return 0;
+
+           cur = tbl;
+         }
+       else
+         {
+           cur = cur->val[byte].sub;
+
+           if (++n >= len)
+             {
+               error (0, 0, _("\
+incomplete character or shift sequence at end of buffer"));
+               return -1;
+             }
+
+           byte = *++curp;
+         }
+
+      /* We found a final byte.  Write the output bytes.  */
+      out = cur->val[byte].out;
+      for (cnt = 0; cnt < out->nbytes; ++cnt)
+       fputc_unlocked (out->bytes[cnt], output);
+
+      addr = (char *) curp + 1;
+      ++n;
+    }
+
+  return 0;
+}
+
+
+static int
+process_fd (struct convtable *tbl, int fd, FILE *output)
+{
+  /* we have a problem with reading from a desriptor since we must not
+     provide the iconv() function an incomplete character or shift
+     sequence at the end of the buffer.  Since we have to deal with
+     arbitrary encodings we must read the whole text in a buffer and
+     process it in one step.  */
+  static char *inbuf = NULL;
+  static size_t maxlen = 0;
+  char *inptr = NULL;
+  size_t actlen = 0;
+
+  while (actlen < maxlen)
+    {
+      ssize_t n = read (fd, inptr, maxlen - actlen);
+
+      if (n == 0)
+       /* No more text to read.  */
+       break;
+
+      if (n == -1)
+       {
+         /* Error while reading.  */
+         error (0, errno, _("error while reading the input"));
+         return -1;
+       }
+
+      inptr += n;
+      actlen += n;
+    }
+
+  if (actlen == maxlen)
+    while (1)
+      {
+       ssize_t n;
+
+       /* Increase the buffer.  */
+       maxlen += 32768;
+       inbuf = realloc (inbuf, maxlen);
+       if (inbuf == NULL)
+         error (0, errno, _("unable to allocate buffer for input"));
+       inptr = inbuf + actlen;
+
+       do
+         {
+           n = read (fd, inptr, maxlen - actlen);
+
+           if (n == 0)
+             /* No more text to read.  */
+             break;
+
+           if (n == -1)
+             {
+               /* Error while reading.  */
+               error (0, errno, _("error while reading the input"));
+               return -1;
+             }
+
+           inptr += n;
+           actlen += n;
+         }
+       while (actlen < maxlen);
+
+       if (n == 0)
+         /* Break again so we leave both loops.  */
+         break;
+      }
+
+  /* Now we have all the input in the buffer.  Process it in one run.  */
+  return process_block (tbl, inbuf, actlen, output);
+}
+
+
+static int
+process_file (struct convtable *tbl, FILE *input, FILE *output)
+{
+  /* This should be safe since we use this function only for `stdin' and
+     we haven't read anything so far.  */
+  return process_fd (tbl, fileno (input), output);
+}
index 6b9930e..24521c0 100644 (file)
@@ -36,7 +36,9 @@
 #ifdef _POSIX_MAPPED_FILES
 # include <sys/mman.h>
 #endif
+#include <charmap.h>
 #include <gconv_int.h>
+#include "iconv_prog.h"
 
 /* Get libc version number.  */
 #include "../version.h"
@@ -94,13 +96,13 @@ static const char *to_code;
 static const char *output_file;
 
 /* Nonzero if verbose ouput is wanted.  */
-static int verbose;
+int verbose;
 
 /* Nonzero if list of all coded character sets is wanted.  */
 static int list;
 
 /* If nonzero omit invalid character from output.  */
-static int omit_invalid;
+int omit_invalid;
 
 /* Prototypes for the functions doing the actual work.  */
 static int process_block (iconv_t cd, char *addr, size_t len, FILE *output);
@@ -117,6 +119,8 @@ main (int argc, char *argv[])
   FILE *output;
   iconv_t cd;
   const char *orig_to_code;
+  struct charmap_t *from_charmap = NULL;
+  struct charmap_t *to_charmap = NULL;
 
   /* Set locale via LC_ALL.  */
   setlocale (LC_ALL, "");
@@ -179,18 +183,23 @@ main (int argc, char *argv[])
       to_code = newp;
     }
 
-  /* Let's see whether we have these coded character sets.  */
-  cd = iconv_open (to_code, from_code);
-  if (cd == (iconv_t) -1)
-    {
-      if (errno == EINVAL)
-       error (EXIT_FAILURE, 0,
-              _("conversion from `%s' to `%s' not supported"),
-              from_code, orig_to_code);
-      else
-       error (EXIT_FAILURE, errno,
-              _("failed to start conversion processing"));
-    }
+  /* POSIX 1003.2b introduces a silly thing: the arguments to -t anf -f
+     can be file names of charmaps.  In this case iconv will have to read
+     those charmaps and use them to do the conversion.  But there are
+     holes in the specification.  There is nothing said that if -f is a
+     charmap filename that -t must be, too.  And vice versa.  There is
+     also no word about the symbolic names used.  What if they don't
+     match?  */
+  if (strchr (from_code, '/') != NULL)
+    /* The from-name might be a charmap file name.  Try reading the
+       file.  */
+    from_charmap = charmap_read (from_code, /*0, 1*/1, 0, 0);
+
+  if (strchr (orig_to_code, '/') != NULL)
+    /* The to-name might be a charmap file name.  Try reading the
+       file.  */
+    to_charmap = charmap_read (orig_to_code, /*0, 1,*/1,0, 0);
+
 
   /* Determine output file.  */
   if (output_file != NULL && strcmp (output_file, "-") != 0)
@@ -202,92 +211,117 @@ main (int argc, char *argv[])
   else
     output = stdout;
 
-  /* Now process the remaining files.  Write them to stdout or the file
-     specified with the `-o' parameter.  If we have no file given as
-     the parameter process all from stdin.  */
-  if (remaining == argc)
-    {
-      if (process_file (cd, stdin, output) != 0)
-       status = EXIT_FAILURE;
-    }
+  /* At this point we have to handle two cases.  The first one is
+     where a charmap is used for the from- or to-charset, or both.  We
+     handle this special since it is very different from the sane way of
+     doing things.  The other case allows converting using the iconv()
+     function.  */
+  if (from_charmap != NULL || to_charmap != NULL)
+    /* Construct the conversion table and do the conversion.  */
+    status = charmap_conversion (from_code, from_charmap, to_code, to_charmap,
+                                argc, remaining, argv, output);
   else
-    do
-      {
-       struct stat st;
-       char *addr;
-       int fd;
-
+    {
+      /* Let's see whether we have these coded character sets.  */
+      cd = iconv_open (to_code, from_code);
+      if (cd == (iconv_t) -1)
+       {
+         if (errno == EINVAL)
+           error (EXIT_FAILURE, 0,
+                  _("conversion from `%s' to `%s' not supported"),
+                  from_code, orig_to_code);
+         else
+           error (EXIT_FAILURE, errno,
+                  _("failed to start conversion processing"));
+       }
 
-       if (verbose)
-         printf ("%s:\n", argv[remaining]);
-       if (strcmp (argv[remaining], "-") == 0)
-         fd = 0;
-       else
+      /* Now process the remaining files.  Write them to stdout or the file
+        specified with the `-o' parameter.  If we have no file given as
+        the parameter process all from stdin.  */
+      if (remaining == argc)
+       {
+         if (process_file (cd, stdin, output) != 0)
+           status = EXIT_FAILURE;
+       }
+      else
+       do
          {
-           fd = open (argv[remaining], O_RDONLY);
-
-           if (fd == -1)
+           struct stat st;
+           char *addr;
+           int fd;
+
+           if (verbose)
+             printf ("%s:\n", argv[remaining]);
+           if (strcmp (argv[remaining], "-") == 0)
+             fd = 0;
+           else
              {
-               error (0, errno, _("cannot open input file `%s'"),
-                      argv[remaining]);
-               status = EXIT_FAILURE;
-               continue;
+               fd = open (argv[remaining], O_RDONLY);
+
+               if (fd == -1)
+                 {
+                   error (0, errno, _("cannot open input file `%s'"),
+                          argv[remaining]);
+                   status = EXIT_FAILURE;
+                   continue;
+                 }
              }
-         }
 
 #ifdef _POSIX_MAPPED_FILES
-       /* We have possibilities for reading the input file.  First try
-          to mmap() it since this will provide the fastest solution.  */
-       if (fstat (fd, &st) == 0
-           && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0))
-               != MAP_FAILED))
-         {
-           /* Yes, we can use mmap().  The descriptor is not needed
-               anymore.  */
-           if (close (fd) != 0)
-             error (EXIT_FAILURE, errno, _("error while closing input `%s'"),
-                    argv[remaining]);
-
-           if (process_block (cd, addr, st.st_size, output) < 0)
+           /* We have possibilities for reading the input file.  First try
+              to mmap() it since this will provide the fastest solution.  */
+           if (fstat (fd, &st) == 0
+               && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE,
+                                 fd, 0)) != MAP_FAILED))
              {
-               /* Something went wrong.  */
-               status = EXIT_FAILURE;
+               /* Yes, we can use mmap().  The descriptor is not needed
+                  anymore.  */
+               if (close (fd) != 0)
+                 error (EXIT_FAILURE, errno,
+                        _("error while closing input `%s'"),
+                        argv[remaining]);
+
+               if (process_block (cd, addr, st.st_size, output) < 0)
+                 {
+                   /* Something went wrong.  */
+                   status = EXIT_FAILURE;
+
+                   /* We don't need the input data anymore.  */
+                   munmap ((void *) addr, st.st_size);
+
+                   /* We cannot go on with producing output since it might
+                      lead to problem because the last output might leave
+                      the output stream in an undefined state.  */
+                   break;
+                 }
 
                /* We don't need the input data anymore.  */
                munmap ((void *) addr, st.st_size);
-
-               /* We cannot go on with producing output since it might
-                  lead to problem because the last output might leave
-                  the output stream in an undefined state.  */
-               break;
              }
-
-           /* We don't need the input data anymore.  */
-           munmap ((void *) addr, st.st_size);
-         }
-       else
+           else
 #endif /* _POSIX_MAPPED_FILES */
-         {
-           /* Read the file in pieces.  */
-           if (process_fd (cd, fd, output) != 0)
              {
-               /* Something went wrong.  */
-               status = EXIT_FAILURE;
-
-               /* We don't need the input file anymore.  */
+               /* Read the file in pieces.  */
+               if (process_fd (cd, fd, output) != 0)
+                 {
+                   /* Something went wrong.  */
+                   status = EXIT_FAILURE;
+
+                   /* We don't need the input file anymore.  */
+                   close (fd);
+
+                   /* We cannot go on with producing output since it might
+                      lead to problem because the last output might leave
+                      the output stream in an undefined state.  */
+                   break;
+                 }
+
+               /* Now close the file.  */
                close (fd);
-
-               /* We cannot go on with producing output since it might
-                  lead to problem because the last output might leave
-                  the output stream in an undefined state.  */
-               break;
              }
-
-           /* Now close the file.  */
-           close (fd);
          }
-      }
-    while (++remaining < argc);
+       while (++remaining < argc);
+    }
 
   /* Close the output file now.  */
   if (fclose (output))
@@ -402,7 +436,7 @@ conversion stopped due to problem in writing the output"));
              character sets we have to flush the state now.  */
          outptr = outbuf;
          outlen = OUTBUF_SIZE;
-         n = iconv (cd, NULL, NULL, &outptr, &outlen);
+         (void) iconv (cd, NULL, NULL, &outptr, &outlen);
 
          if (outptr != outbuf)
            {
diff --git a/iconv/iconv_prog.h b/iconv/iconv_prog.h
new file mode 100644 (file)
index 0000000..dbb4a0b
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _ICONV_PROG_H
+#define _ICONV_PROG_H  1
+
+#include <stdio.h>
+#include <charmap.h>
+
+
+/* Nonzero if verbose ouput is wanted.  */
+extern int verbose;
+
+/* If nonzero omit invalid character from output.  */
+extern int omit_invalid;
+
+/* Perform the conversion using a charmap or two.  */
+extern int charmap_conversion (const char *from_code,
+                              struct charmap_t *from_charmap,
+                              const char *to_code,
+                              struct charmap_t *to_charmap,
+                              int argc, int remaining, char *argv[],
+                              FILE *output);
+
+
+#endif /* iconv_prog.h */
index e20d196..3388e80 100755 (executable)
@@ -59,13 +59,10 @@ while read from to subset targets; do
   if test -n "$targets"; then
     for t in $targets; do
       if test -f testdata/$from; then
-       echo $ac_n "test data: $from -> $t $ac_c"
+       echo $ac_n "   test data: $from -> $t $ac_c"
        $PROG -f $from -t $t testdata/$from > $temp1 ||
          { if test $? -gt 128; then exit 1; fi
-           echo "FAILED"
-           failed=1
-           continue
-         }
+           echo "FAILED"; failed=1; continue; }
        echo $ac_n "OK$ac_c"
        if test -s testdata/$from..$t; then
          cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
@@ -75,10 +72,7 @@ while read from to subset targets; do
        echo $ac_n " -> $from $ac_c"
        $PROG -f $t -t $to -o $temp2 $temp1 ||
          { if test $? -gt 128; then exit 1; fi
-           echo "FAILED"
-           failed=1
-           continue
-         }
+           echo "FAILED"; failed=1; continue; }
        echo $ac_n "OK$ac_c"
        test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
          { echo "/FAILED"; failed=1; continue; }
@@ -90,21 +84,45 @@ while read from to subset targets; do
       # of the coded character set we convert the text to this coded character
       # set.  Otherwise we convert to all the TARGETS.
       if test $subset = Y; then
-       echo $ac_n "   suntzu: $from -> $t -> $to $ac_c"
+       echo $ac_n "      suntzu: $from -> $t -> $to $ac_c"
        $PROG -f $from -t $t testdata/suntzus |
        $PROG -f $t -t $to > $temp1 ||
          { if test $? -gt 128; then exit 1; fi
-           echo "FAILED"
-           failed=1
-           continue
-         }
+           echo "FAILED"; failed=1; continue; }
        echo $ac_n "OK$ac_c"
        cmp testdata/suntzus $temp1 ||
-         { echo "/FAILED";
-           failed=1; continue; }
+         { echo "/FAILED"; failed=1; continue; }
        echo "/OK"
       fi
       rm -f $temp1
+
+      # And tests where iconv(1) has to handle charmaps.
+      if test "$t" = UTF8; then tc=UTF-8; else tc="$t"; fi
+      if test -f ../localedata/charmaps/$from &&
+         test -f ../localedata/charmaps/$tc &&
+        test -f testdata/$from; then
+       echo $ac_n "test charmap: $from -> $t $ac_c"
+       $PROG -f ../localedata/charmaps/$from -t ../localedata/charmaps/$tc \
+             testdata/$from > $temp1 ||
+         { if test $? -gt 128; then exit 1; fi
+           echo "FAILED"; failed=1; continue; }
+       echo $ac_n "OK$ac_c"
+       if test -s testdata/$from..$t; then
+         cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
+           { echo "/FAILED"; failed=1; continue; }
+         echo $ac_n "/OK$ac_c"
+       fi
+       echo $ac_n " -> $from $ac_c"
+       $PROG -t ../localedata/charmaps/$from -f ../localedata/charmaps/$tc \
+             -o $temp2 $temp1 ||
+         { if test $? -gt 128; then exit 1; fi
+           echo "FAILED"; failed=1; continue; }
+       echo $ac_n "OK$ac_c"
+       test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
+         { echo "/FAILED"; failed=1; continue; }
+       echo "/OK"
+       rm -f $temp1 $temp2
+      fi
     done
   fi
 
@@ -113,14 +131,10 @@ while read from to subset targets; do
     $PROG -f ASCII -t $to testdata/suntzus |
     $PROG -f $to -t ASCII > $temp1 ||
       { if test $? -gt 128; then exit 1; fi
-       echo "FAILED"
-       failed=1
-       continue
-      }
+       echo "FAILED"; failed=1; continue; }
     echo $ac_n "OK$ac_c"
     cmp testdata/suntzus $temp1 ||
-      { echo "/FAILED";
-       failed=1; continue; }
+      { echo "/FAILED"; failed=1; continue; }
     echo "/OK"
   fi
 done < TESTS
index 59f317a..14cb4f4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
@@ -34,7 +34,6 @@
 #include "linereader.h"
 #include "charmap.h"
 #include "charmap-dir.h"
-#include "locfile.h"
 #include "repertoire.h"
 
 #include <assert.h>
@@ -47,7 +46,8 @@
 extern void *xmalloc (size_t __n);
 
 /* Prototypes for local functions.  */
-static struct charmap_t *parse_charmap (struct linereader *cmfile);
+static struct charmap_t *parse_charmap (struct linereader *cmfile,
+                                       int verbose, int be_quiet);
 static void new_width (struct linereader *cmfile, struct charmap_t *result,
                       const char *from, const char *to,
                       unsigned long int width);
@@ -55,6 +55,9 @@ static void charmap_new_char (struct linereader *lr, struct charmap_t *cm,
                              int nbytes, char *bytes, const char *from,
                              const char *to, int decimal_ellipsis, int step);
 
+
+static const char *null_pointer;
+
 static struct linereader *
 cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf)
 {
@@ -82,7 +85,7 @@ cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf)
 }
 
 struct charmap_t *
-charmap_read (const char *filename)
+charmap_read (const char *filename, int verbose, int be_quiet, int use_default)
 {
   struct charmap_t *result = NULL;
 
@@ -129,14 +132,14 @@ charmap_read (const char *filename)
 
       if (cmfile != NULL)
        {
-         result = parse_charmap (cmfile);
+         result = parse_charmap (cmfile, verbose, be_quiet);
 
          if (result == NULL && !be_quiet)
            error (0, errno, _("character map file `%s' not found"), filename);
        }
     }
 
-  if (result == NULL && filename != NULL)
+  if (result == NULL && filename != NULL && strchr (filename, '/') == NULL)
     {
       /* OK, one more try.  We also accept the names given to the
         character sets in the files.  Sometimes they differ from the
@@ -170,7 +173,7 @@ charmap_read (const char *filename)
 
                  cmfile = cmlr_open (CHARMAP_PATH, dirent, charmap_hash);
                  if (cmfile != NULL)
-                   result = parse_charmap (cmfile);
+                   result = parse_charmap (cmfile, verbose, be_quiet);
 
                  break;
                }
@@ -180,13 +183,13 @@ charmap_read (const char *filename)
        }
     }
 
-  if (result == NULL)
+  if (result == NULL && DEFAULT_CHARMAP != NULL)
     {
       struct linereader *cmfile;
 
       cmfile = cmlr_open (CHARMAP_PATH, DEFAULT_CHARMAP, charmap_hash);
       if (cmfile != NULL)
-       result = parse_charmap (cmfile);
+       result = parse_charmap (cmfile, verbose, be_quiet);
 
       if (result == NULL)
        error (4, errno, _("default character map file `%s' not found"),
@@ -220,7 +223,7 @@ charmap_read (const char *filename)
      must have the same value as the 'wchar_t' code, which in glibc is the
      same as the Unicode code, which for all of the enumerated characters
      is identical to the ASCII code. */
-  if (result != NULL)
+  if (result != NULL && use_default)
     {
       static const char basic_charset[] =
        {
@@ -256,7 +259,7 @@ character map `%s' is not ASCII compatible, locale not ISO C compliant\n"),
 
 
 static struct charmap_t *
-parse_charmap (struct linereader *cmfile)
+parse_charmap (struct linereader *cmfile, int verbose, int be_quiet)
 {
   struct charmap_t *result;
   int state;
@@ -293,7 +296,7 @@ parse_charmap (struct linereader *cmfile)
   while (1)
     {
       /* What's on?  */
-      struct token *now = lr_token (cmfile, NULL, NULL);
+      struct token *now = lr_token (cmfile, NULL, NULL, verbose);
       enum token_t nowtok = now->tok;
       struct token *arg;
 
@@ -351,7 +354,7 @@ parse_charmap (struct linereader *cmfile)
            }
 
          /* We know that we need an argument.  */
-         arg = lr_token (cmfile, NULL, NULL);
+         arg = lr_token (cmfile, NULL, NULL, verbose);
 
          switch (nowtok)
            {
index 88fd078..7b82c52 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
@@ -65,7 +65,8 @@ struct charseq
 
 
 /* Prototypes for charmap handling functions.  */
-extern struct charmap_t *charmap_read (const char *filename);
+extern struct charmap_t *charmap_read (const char *filename, int verbose,
+                                      int be_quiet, int use_default);
 
 /* Return the value stored under the given key in the hashing table.  */
 extern struct charseq *charmap_find_value (const struct charmap_t *charmap,
index e35305d..a2b17bb 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -434,7 +434,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -460,7 +460,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ignore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -477,7 +477,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (address->cat != NULL)                                           \
@@ -514,7 +514,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_string && arg->tok != tok_number)               \
            goto err_label;                                                   \
          if (address->cat != NULL)                                           \
@@ -552,7 +552,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_number)                                         \
            goto err_label;                                                   \
          else if (address->cat != 0)                                         \
@@ -566,7 +566,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_ADDRESS'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -584,7 +584,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index b228834..2ce4d46 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -508,7 +508,7 @@ read_directions (struct linereader *ldfile, struct token *arg,
        }
 
       if (valid)
-       arg = lr_token (ldfile, charmap, repertoire);
+       arg = lr_token (ldfile, charmap, repertoire, verbose);
 
       if (arg->tok == tok_eof || arg->tok == tok_eol || arg->tok == tok_comma
          || arg->tok == tok_semicolon)
@@ -572,7 +572,7 @@ read_directions (struct linereader *ldfile, struct token *arg,
            }
        }
 
-      arg = lr_token (ldfile, charmap, repertoire);
+      arg = lr_token (ldfile, charmap, repertoire, verbose);
     }
 
   if (nrules == 0)
@@ -697,7 +697,7 @@ insert_weights (struct linereader *ldfile, struct element_t *elem,
 
   weight_cnt = 0;
 
-  arg = lr_token (ldfile, charmap, repertoire);
+  arg = lr_token (ldfile, charmap, repertoire, verbose);
   do
     {
       if (arg->tok == tok_eof || arg->tok == tok_eol)
@@ -867,11 +867,11 @@ insert_weights (struct linereader *ldfile, struct element_t *elem,
          break;
        }
 
-      arg = lr_token (ldfile, charmap, repertoire);
+      arg = lr_token (ldfile, charmap, repertoire, verbose);
       /* This better should be the end of the line or a semicolon.  */
       if (arg->tok == tok_semicolon)
        /* OK, ignore this and read the next token.  */
-       arg = lr_token (ldfile, charmap, repertoire);
+       arg = lr_token (ldfile, charmap, repertoire, verbose);
       else if (arg->tok != tok_eof && arg->tok != tok_eol)
        {
          /* It's a syntax error.  */
@@ -2567,7 +2567,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -2575,18 +2575,19 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
   if (nowtok == tok_copy)
     {
       state = 2;
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       if (now->tok != tok_string)
        {
          SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
 
        skip_category:
          do
-           now = lr_token (ldfile, charmap, NULL);
+           now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok != tok_eof && now->tok != tok_end);
 
          if (now->tok != tok_eof
-             || (now = lr_token (ldfile, charmap, NULL), now->tok == tok_eof))
+             || (now = lr_token (ldfile, charmap, NULL, verbose),
+                 now->tok == tok_eof))
            lr_error (ldfile, _("%s: premature end of file"), "LC_COLLATE");
          else if (now->tok != tok_lc_collate)
            {
@@ -2615,7 +2616,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 
       lr_ignore_rest (ldfile, 1);
 
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
@@ -2636,7 +2637,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -2645,7 +2646,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
        {
        case tok_copy:
          /* Allow copying other locales.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_string)
            goto err_label;
 
@@ -2668,7 +2669,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
          if (state != 0)
            goto err_label;
 
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok != tok_number)
            goto err_label;
          if (collate->col_weight_max != -1)
@@ -2691,7 +2692,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
          if (state != 0)
            goto err_label;
 
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok != tok_bsymbol)
            goto err_label;
          else if (!ignore_content)
@@ -2738,7 +2739,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
          if (state != 0)
            goto err_label;
 
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok != tok_bsymbol)
            goto err_label;
          else
@@ -2747,7 +2748,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
              size_t symbol_len = arg->val.str.lenmb;
 
              /* Next the `from' keyword.  */
-             arg = lr_token (ldfile, charmap, repertoire);
+             arg = lr_token (ldfile, charmap, repertoire, verbose);
              if (arg->tok != tok_from)
                {
                  free ((char *) symbol);
@@ -2758,7 +2759,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
              ldfile->translate_strings = 1;
 
              /* Finally the string with the replacement.  */
-             arg = lr_token (ldfile, charmap, repertoire);
+             arg = lr_token (ldfile, charmap, repertoire, verbose);
 
              ldfile->return_widestr = 0;
              ldfile->translate_strings = 0;
@@ -2807,7 +2808,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
          if (state != 0 && state != 2)
            goto err_label;
 
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok != tok_bsymbol)
            goto err_label;
          else
@@ -2818,12 +2819,12 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
              size_t endsymbol_len = 0;
              enum token_t ellipsis = tok_none;
 
-             arg = lr_token (ldfile, charmap, repertoire);
+             arg = lr_token (ldfile, charmap, repertoire, verbose);
              if (arg->tok == tok_ellipsis2 || arg->tok == tok_ellipsis4)
                {
                  ellipsis = arg->tok;
 
-                 arg = lr_token (ldfile, charmap, repertoire);
+                 arg = lr_token (ldfile, charmap, repertoire, verbose);
                  if (arg->tok != tok_bsymbol)
                    {
                      free (symbol);
@@ -2954,7 +2955,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
          if (state != 0)
            goto err_label;
 
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok != tok_bsymbol)
            goto err_label;
          else
@@ -2965,7 +2966,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
              size_t symname_len;
              struct symbol_t *symval;
 
-             arg = lr_token (ldfile, charmap, repertoire);
+             arg = lr_token (ldfile, charmap, repertoire, verbose);
              if (arg->tok != tok_bsymbol)
                {
                  if (newname != NULL)
@@ -3022,7 +3023,7 @@ error while adding equivalent collating symbol"));
 
        case tok_script:
          /* We get told about the scripts we know.  */
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok != tok_bsymbol)
            goto err_label;
          else
@@ -3074,7 +3075,7 @@ error while adding equivalent collating symbol"));
          /* The 14652 draft does not specify whether all `order_start' lines
             must contain the same number of sort-rules, but 14651 does.  So
             we require this here as well.  */
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok == tok_bsymbol)
            {
              /* This better should be a section name.  */
@@ -3133,7 +3134,7 @@ error while adding equivalent collating symbol"));
                    }
 
                  /* Next should come the end of the line or a semicolon.  */
-                 arg = lr_token (ldfile, charmap, repertoire);
+                 arg = lr_token (ldfile, charmap, repertoire, verbose);
                  if (arg->tok == tok_eol)
                    {
                      uint32_t cnt;
@@ -3156,7 +3157,7 @@ error while adding equivalent collating symbol"));
                    }
 
                  /* Get the next token.  */
-                 arg = lr_token (ldfile, charmap, repertoire);
+                 arg = lr_token (ldfile, charmap, repertoire, verbose);
                }
            }
          else
@@ -3237,7 +3238,7 @@ error while adding equivalent collating symbol"));
            goto err_label;
          state = 3;
 
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok == tok_bsymbol || arg->tok == tok_ucs4)
            {
              /* Find this symbol in the sequence table.  */
@@ -3366,7 +3367,7 @@ error while adding equivalent collating symbol"));
          state = 5;
 
          /* Get the name of the sections we are adding after.  */
-         arg = lr_token (ldfile, charmap, repertoire);
+         arg = lr_token (ldfile, charmap, repertoire, verbose);
          if (arg->tok == tok_bsymbol)
            {
              /* Now find a section with this name.  */
@@ -3399,7 +3400,7 @@ error while adding equivalent collating symbol"));
                    {
                      lr_ignore_rest (ldfile, 0);
 
-                     now = lr_token (ldfile, charmap, NULL);
+                     now = lr_token (ldfile, charmap, NULL, verbose);
                    }
                  while (now->tok == tok_reorder_sections_after
                         || now->tok == tok_reorder_sections_end
@@ -3596,7 +3597,7 @@ error while adding equivalent collating symbol"));
 
                  /* Process the rest of the line which might change
                      the collation rules.  */
-                 arg = lr_token (ldfile, charmap, repertoire);
+                 arg = lr_token (ldfile, charmap, repertoire, verbose);
                  if (arg->tok != tok_eof && arg->tok != tok_eol)
                    read_directions (ldfile, arg, charmap, repertoire,
                                     collate);
@@ -3710,7 +3711,7 @@ error while adding equivalent collating symbol"));
                error (0, 0, _("%s: missing `reorder-sections-end' keyword"),
                       "LC_COLLATE");
            }
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -3727,7 +3728,7 @@ error while adding equivalent collating symbol"));
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index fd427f1..24a5391 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -1878,7 +1878,7 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
 
       /* Next we have one or more transliterations.  They are
         separated by semicolons.  */
-      now = lr_token (ldfile, charmap, repertoire);
+      now = lr_token (ldfile, charmap, repertoire, verbose);
 
       if (!first && (now->tok == tok_semicolon || now->tok == tok_eol))
        {
@@ -1939,7 +1939,7 @@ read_translit_ignore_entry (struct linereader *ldfile,
      single characters, possibly defining a range when an ellipsis is used.  */
   while (1)
     {
-      struct token *now = lr_token (ldfile, charmap, repertoire);
+      struct token *now = lr_token (ldfile, charmap, repertoire, verbose);
       struct translit_ignore_t *newp;
       uint32_t from;
 
@@ -1983,7 +1983,7 @@ read_translit_ignore_entry (struct linereader *ldfile,
 
       /* Now we expect either a semicolon, an ellipsis, or the end of the
         line.  */
-      now = lr_token (ldfile, charmap, repertoire);
+      now = lr_token (ldfile, charmap, repertoire, verbose);
 
       if (now->tok == tok_ellipsis2 || now->tok == tok_ellipsis2_2)
        {
@@ -1992,7 +1992,7 @@ read_translit_ignore_entry (struct linereader *ldfile,
          uint32_t to;
          int step = now->tok == tok_ellipsis2_2 ? 2 : 1;
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
 
          if (now->tok == tok_eol || now->tok == tok_eof)
            {
@@ -2033,7 +2033,7 @@ to-value <U%0*X> of range is smaller than from-value <U%0*X>"),
            }
 
          /* And the next token.  */
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
        }
 
       if (now->tok == tok_eol || now->tok == tok_eof)
@@ -2084,7 +2084,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -2092,18 +2092,19 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
   /* If we see `copy' now we are almost done.  */
   if (nowtok == tok_copy)
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       if (now->tok != tok_string)
        {
          SYNTAX_ERROR (_("%s: syntax error"), "LC_CTYPE");
 
        skip_category:
          do
-           now = lr_token (ldfile, charmap, NULL);
+           now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok != tok_eof && now->tok != tok_end);
 
          if (now->tok != tok_eof
-             || (now = lr_token (ldfile, charmap, NULL), now->tok == tok_eof))
+             || (now = lr_token (ldfile, charmap, NULL, verbose),
+                 now->tok == tok_eof))
            lr_error (ldfile, _("%s: premature end of file"), "LC_CTYPE");
          else if (now->tok != tok_lc_ctype)
            {
@@ -2132,7 +2133,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
 
       lr_ignore_rest (ldfile, 1);
 
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
@@ -2157,7 +2158,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -2165,14 +2166,14 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
       switch (nowtok)
        {
        case tok_charclass:
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok == tok_ident || now->tok == tok_string)
            {
              ctype_class_new (ldfile, ctype, now->val.str.startmb);
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok != tok_semicolon)
                break;
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
            }
          if (now->tok != tok_eol)
            SYNTAX_ERROR (_("\
@@ -2180,14 +2181,14 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
          break;
 
        case tok_charconv:
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok == tok_ident || now->tok == tok_string)
            {
              ctype_map_new (ldfile, ctype, now->val.str.startmb, charmap);
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok != tok_semicolon)
                break;
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
            }
          if (now->tok != tok_eol)
            SYNTAX_ERROR (_("\
@@ -2205,7 +2206,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
 
          /* We simply forget the `class' keyword and use the following
             operand to determine the bit.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok == tok_ident || now->tok == tok_string)
            {
              /* Must can be one of the predefined class names.  */
@@ -2251,7 +2252,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
            }
 
          /* The next character must be a semicolon.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_semicolon)
            goto err_label;
          goto read_charclass;
@@ -2283,7 +2284,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
          last_token = tok_none;
          ellipsis_token = tok_none;
          step = 1;
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok != tok_eol && now->tok != tok_eof)
            {
              uint32_t wch;
@@ -2420,7 +2421,7 @@ with character code range values one must use the absolute ellipsis `...'"));
                }
 
              /* Next we expect a semicolon or the end of the line.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok == tok_eol || now->tok == tok_eof)
                break;
 
@@ -2440,7 +2441,7 @@ with character code range values one must use the absolute ellipsis `...'"));
 
                  ellipsis_token = now->tok;
 
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  continue;
                }
 
@@ -2448,7 +2449,7 @@ with character code range values one must use the absolute ellipsis `...'"));
                goto err_label;
 
              /* And get the next character.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
 
              ellipsis_token = tok_none;
              step = 1;
@@ -2523,7 +2524,7 @@ with character code range values one must use the absolute ellipsis `...'"));
 
          /* We simply forget the `map' keyword and use the following
             operand to determine the mapping.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok == tok_ident || now->tok == tok_string)
            {
              size_t cnt;
@@ -2545,7 +2546,7 @@ with character code range values one must use the absolute ellipsis `...'"));
          else
            mapidx = now->tok - tok_toupper;
 
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          /* This better should be a semicolon.  */
          if (now->tok != tok_semicolon)
            goto err_label;
@@ -2561,7 +2562,7 @@ with character code range values one must use the absolute ellipsis `...'"));
            }
          ctype->tomap_done[mapidx] = 1;
 
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          while (now->tok != tok_eol && now->tok != tok_eof)
            {
              struct charseq *from_seq;
@@ -2574,24 +2575,24 @@ with character code range values one must use the absolute ellipsis `...'"));
                goto err_label;
 
              /* Next comes the from-value.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (get_character (now, charmap, repertoire, &from_seq,
                                 &from_wch) != 0)
                goto err_label;
 
              /* The next is a comma.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok != tok_comma)
                goto err_label;
 
              /* And the other value.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (get_character (now, charmap, repertoire, &to_seq,
                                 &to_wch) != 0)
                goto err_label;
 
              /* And the last thing is the closing brace.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok != tok_close_brace)
                goto err_label;
 
@@ -2613,9 +2614,9 @@ with character code range values one must use the absolute ellipsis `...'"));
                }
 
              /* Now comes a semicolon or the end of the line/file.  */
-             now = lr_token (ldfile, charmap, NULL);
+             now = lr_token (ldfile, charmap, NULL, verbose);
              if (now->tok == tok_semicolon)
-               now = lr_token (ldfile, charmap, NULL);
+               now = lr_token (ldfile, charmap, NULL, verbose);
            }
          break;
 
@@ -2627,7 +2628,7 @@ with character code range values one must use the absolute ellipsis `...'"));
              do
                {
                  lr_ignore_rest (ldfile, 0);
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                }
              while (now->tok != tok_translit_end && now->tok != tok_eof);
 
@@ -2650,7 +2651,7 @@ with character code range values one must use the absolute ellipsis `...'"));
          ldfile->return_widestr = 1;
 
          /* We proceed until we see the `translit_end' token.  */
-         while (now = lr_token (ldfile, charmap, repertoire),
+         while (now = lr_token (ldfile, charmap, repertoire, verbose),
                 now->tok != tok_translit_end && now->tok != tok_eof)
            {
              if (now->tok == tok_eol)
@@ -2664,7 +2665,7 @@ with character code range values one must use the absolute ellipsis `...'"));
                  const char *repertoire_name;
                  struct translit_include_t *include_stmt, **include_ptr;
 
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  /* This should be a string or an identifier.  In any
                     case something to name a locale.  */
                  if (now->tok != tok_string && now->tok != tok_ident)
@@ -2677,12 +2678,12 @@ with character code range values one must use the absolute ellipsis `...'"));
                  locale_name = now->val.str.startmb;
 
                  /* Next should be a semicolon.  */
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  if (now->tok != tok_semicolon)
                    goto translit_syntax;
 
                  /* Now the repertoire name.  */
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  if ((now->tok != tok_string && now->tok != tok_ident)
                      || now->val.str.startmb == NULL)
                    goto translit_syntax;
@@ -2716,7 +2717,7 @@ with character code range values one must use the absolute ellipsis `...'"));
                    {
                      /* We expect a single character or string as the
                         argument.  */
-                     now = lr_token (ldfile, charmap, NULL);
+                     now = lr_token (ldfile, charmap, NULL, verbose);
                      wstr = read_widestring (ldfile, now, charmap,
                                              repertoire);
 
@@ -2746,7 +2747,7 @@ previous definition was here"));
                        break;
 
                      /* Maybe there is another replacement we can use.  */
-                     now = lr_token (ldfile, charmap, NULL);
+                     now = lr_token (ldfile, charmap, NULL, verbose);
                      if (now->tok == tok_eol || now->tok == tok_eof)
                        {
                          /* Nothing found.  We tell the user.  */
@@ -2837,7 +2838,7 @@ previous definition was here"));
 
        case tok_end:
          /* Next we assume `LC_CTYPE'.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok == tok_eof)
            break;
          if (now->tok == tok_eol)
@@ -2856,7 +2857,7 @@ previous definition was here"));
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index bc252a0..12e32f8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -301,7 +301,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -328,7 +328,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ignore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -345,7 +345,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (identification->cat != NULL)                                    \
@@ -386,15 +386,15 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
            }
 
          /* We expect two operands.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok != tok_string && arg->tok != tok_ident)
            goto err_label;
          /* Next is a semicolon.  */
-         cattok = lr_token (ldfile, charmap, NULL);
+         cattok = lr_token (ldfile, charmap, NULL, verbose);
          if (cattok->tok != tok_semicolon)
            goto err_label;
          /* Now a LC_xxx identifier.  */
-         cattok = lr_token (ldfile, charmap, NULL);
+         cattok = lr_token (ldfile, charmap, NULL, verbose);
          switch (cattok->tok)
            {
 #define CATEGORY(lname, uname) \
@@ -430,7 +430,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_IDENTIFICATION'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -448,7 +448,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index f628026..07eb3cb 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -164,7 +164,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -191,7 +191,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -208,7 +208,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_number)                                         \
            goto err_label;                                                   \
          else if (measurement->cat != 0)                                     \
@@ -222,7 +222,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_MEASUREMENT'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -240,7 +240,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index 6ca2d8a..cbf240e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -245,7 +245,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -273,7 +273,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ignore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -297,7 +297,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
              lr_ignore_rest (ldfile, 0);                                     \
              break;                                                          \
            }                                                                 \
-         now = lr_token (ldfile, charmap, repertoire);                       \
+         now = lr_token (ldfile, charmap, repertoire, verbose);              \
          if (now->tok != tok_string)                                         \
            goto syntax_error;                                                \
          else if (!ignore_content && now->val.str.startmb == NULL)           \
@@ -317,7 +317,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_MESSAGES'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -334,7 +334,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index c64daf2..7779e87 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -642,7 +642,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -668,7 +668,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ignore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -685,7 +685,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         now = lr_token (ldfile, charmap, NULL);                             \
+         now = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (now->tok != tok_string)                                         \
            goto err_label;                                                   \
          else if (monetary->cat != NULL)                                     \
@@ -720,7 +720,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
            }                                                                 \
                                                                              \
          ldfile->return_widestr = 1;                                         \
-         now = lr_token (ldfile, charmap, repertoire);                       \
+         now = lr_token (ldfile, charmap, repertoire, verbose);              \
          if (now->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (monetary->cat != NULL)                                          \
@@ -761,7 +761,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         now = lr_token (ldfile, charmap, NULL);                             \
+         now = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (now->tok != tok_minus1 && now->tok != tok_number)               \
            goto err_label;                                                   \
          else if (monetary->cat != -2)                                       \
@@ -813,7 +813,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
              break;
            }
 
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_minus1 && now->tok != tok_number)
            goto err_label;
          else
@@ -861,11 +861,11 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
                    grouping[act++] = now->val.num;
 
                  /* Next must be semicolon.  */
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  if (now->tok != tok_semicolon)
                    break;
 
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                }
              while (now->tok == tok_minus1 || now->tok == tok_number);
 
@@ -891,7 +891,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
              break;
            }
 
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_number)
            goto err_label;
          if (now->val.num == 0)
@@ -908,11 +908,11 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
          if (!ignore_content)
            monetary->conversion_rate[0] = now->val.num;
          /* Next must be a semicolon.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_semicolon)
            goto err_label;
          /* And another number.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_number)
            goto err_label;
          if (now->val.num == 0)
@@ -925,7 +925,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_MONETARY'.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok == tok_eof)
            break;
          if (now->tok == tok_eol)
@@ -942,7 +942,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index 135e9bc..7940c03 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -223,7 +223,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -249,7 +249,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ignore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -266,7 +266,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (name->cat != NULL)                                              \
@@ -291,7 +291,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_NAME'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -308,7 +308,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index 80a557c..77633ef 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -207,7 +207,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -233,7 +233,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -251,7 +251,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
            }                                                                 \
                                                                              \
          ldfile->return_widestr = 1;                                         \
-         now = lr_token (ldfile, charmap, repertoire);                       \
+         now = lr_token (ldfile, charmap, repertoire, verbose);              \
          if (now->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (numeric->cat != NULL)                                           \
@@ -291,7 +291,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
              break;
            }
 
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok != tok_minus1 && now->tok != tok_number)
            goto err_label;
          else
@@ -338,11 +338,11 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
                    grouping[act++] = now->val.num;
 
                  /* Next must be semicolon.  */
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                  if (now->tok != tok_semicolon)
                    break;
 
-                 now = lr_token (ldfile, charmap, NULL);
+                 now = lr_token (ldfile, charmap, NULL, verbose);
                }
              while (now->tok == tok_minus1 || now->tok == tok_number);
 
@@ -361,7 +361,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_NUMERIC'.  */
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          if (now->tok == tok_eof)
            break;
          if (now->tok == tok_eol)
@@ -378,7 +378,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index 2b7c6f4..776c780 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -166,7 +166,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -192,7 +192,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -209,7 +209,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_number)                                         \
            goto err_label;                                                   \
          else if (paper->cat != 0)                                           \
@@ -224,7 +224,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_PAPER'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -241,7 +241,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index 19ba12d..2d59079 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -233,7 +233,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -259,7 +259,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, NULL);
+         now = lr_token (ldfile, charmap, NULL, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -276,7 +276,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         arg = lr_token (ldfile, charmap, NULL);                             \
+         arg = lr_token (ldfile, charmap, NULL, verbose);                    \
          if (arg->tok != tok_string)                                         \
            goto err_label;                                                   \
          if (telephone->cat != NULL)                                         \
@@ -299,7 +299,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_TELEPHONE'.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
          if (arg->tok == tok_eof)
            break;
          if (arg->tok == tok_eol)
@@ -316,7 +316,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
       nowtok = now->tok;
     }
 
index ad4914a..1475953 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -904,7 +904,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
 
   do
     {
-      now = lr_token (ldfile, charmap, repertoire);
+      now = lr_token (ldfile, charmap, repertoire, verbose);
       nowtok = now->tok;
     }
   while (nowtok == tok_eol);
@@ -930,7 +930,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
       /* Ingore empty lines.  */
       if (nowtok == tok_eol)
        {
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          nowtok = now->tok;
          continue;
        }
@@ -949,7 +949,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
                                                                              \
          for (cnt = 0; cnt < max; ++cnt)                                     \
            {                                                                 \
-             now = lr_token (ldfile, charmap, repertoire);                   \
+             now = lr_token (ldfile, charmap, repertoire, verbose);          \
              if (now->tok == tok_eol)                                        \
                {                                                             \
                  if (cnt < min)                                              \
@@ -981,7 +981,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
                }                                                             \
                                                                              \
              /* Match the semicolon.  */                                     \
-             now = lr_token (ldfile, charmap, repertoire);                   \
+             now = lr_token (ldfile, charmap, repertoire, verbose);          \
              if (now->tok != tok_semicolon && now->tok != tok_eol)           \
                break;                                                        \
            }                                                                 \
@@ -995,7 +995,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
                                                                              \
              if (now->tok == tok_semicolon)                                  \
                {                                                             \
-                 now = lr_token (ldfile, charmap, repertoire);               \
+                 now = lr_token (ldfile, charmap, repertoire, verbose);      \
                  if (now->tok == tok_eol)                                    \
                    lr_error (ldfile, _("extra trailing semicolon"));         \
                  else if (now->tok == tok_string)                            \
@@ -1031,7 +1031,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
            }
          do
            {
-             now = lr_token (ldfile, charmap, repertoire);
+             now = lr_token (ldfile, charmap, repertoire, verbose);
              if (now->tok != tok_string)
                goto err_label;
              if (!ignore_content && (now->val.str.startmb == NULL
@@ -1053,7 +1053,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
                                         * sizeof (char *));
                  time->wera[time->num_era++] = now->val.str.startwc;
                }
-             now = lr_token (ldfile, charmap, repertoire);
+             now = lr_token (ldfile, charmap, repertoire, verbose);
              if (now->tok != tok_eol && now->tok != tok_semicolon)
                goto err_label;
            }
@@ -1070,7 +1070,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         now = lr_token (ldfile, charmap, repertoire);                       \
+         now = lr_token (ldfile, charmap, repertoire, verbose);              \
          if (now->tok != tok_string)                                         \
            goto err_label;                                                   \
          else if (time->cat != NULL)                                         \
@@ -1112,7 +1112,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
              break;                                                          \
            }                                                                 \
                                                                              \
-         now = lr_token (ldfile, charmap, repertoire);                       \
+         now = lr_token (ldfile, charmap, repertoire, verbose);              \
          if (now->tok != tok_number)                                         \
            goto err_label;                                                   \
          else if (time->cat != 0)                                            \
@@ -1135,25 +1135,25 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
              break;
            }
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok != tok_number)
            goto err_label;
          time->week_ndays = now->val.num;
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok != tok_semicolon)
            goto err_label;
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok != tok_number)
            goto err_label;
          time->week_1stday = now->val.num;
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok != tok_semicolon)
            goto err_label;
 
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok != tok_number)
            goto err_label;
          time->week_1stweek = now->val.num;
@@ -1163,7 +1163,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
 
        case tok_end:
          /* Next we assume `LC_TIME'.  */
-         now = lr_token (ldfile, charmap, repertoire);
+         now = lr_token (ldfile, charmap, repertoire, verbose);
          if (now->tok == tok_eof)
            break;
          if (now->tok == tok_eol)
@@ -1180,7 +1180,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
        }
 
       /* Prepare for the next round.  */
-      now = lr_token (ldfile, charmap, repertoire);
+      now = lr_token (ldfile, charmap, repertoire, verbose);
       nowtok = now->tok;
     }
 
index 01f5c9d..5dba62f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
 #include "charmap.h"
 #include "error.h"
 #include "linereader.h"
-#include "localedef.h"
+
+/* Prototypes for a few program-wide used functions.  */
+extern void *xmalloc (size_t __n);
+extern void *xrealloc (void *__p, size_t __n);
+extern char *xstrdup (const char *__str);
 
 
 /* Prototypes for local functions.  */
@@ -40,7 +44,8 @@ static struct token *get_symname (struct linereader *lr);
 static struct token *get_ident (struct linereader *lr);
 static struct token *get_string (struct linereader *lr,
                                 const struct charmap_t *charmap,
-                                const struct repertoire_t *repertoire);
+                                const struct repertoire_t *repertoire,
+                                int verbose);
 
 
 struct linereader *
@@ -158,7 +163,7 @@ extern char *program_name;
 
 struct token *
 lr_token (struct linereader *lr, const struct charmap_t *charmap,
-         const struct repertoire_t *repertoire)
+         const struct repertoire_t *repertoire, int verbose)
 {
   int ch;
 
@@ -290,7 +295,7 @@ lr_token (struct linereader *lr, const struct charmap_t *charmap,
       return &lr->token;
 
     case '"':
-      return get_string (lr, charmap, repertoire);
+      return get_string (lr, charmap, repertoire, verbose);
 
     case '-':
       ch = lr_getc (lr);
@@ -563,7 +568,7 @@ get_ident (struct linereader *lr)
 
 static struct token *
 get_string (struct linereader *lr, const struct charmap_t *charmap,
-           const struct repertoire_t *repertoire)
+           const struct repertoire_t *repertoire, int verbose)
 {
   int return_widestr = lr->return_widestr;
   char *buf;
index 77fa61a..94802fc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@gnu.org>.
 
@@ -91,7 +91,8 @@ extern void lr_close (struct linereader *lr);
 extern int lr_next (struct linereader *lr);
 extern struct token *lr_token (struct linereader *lr,
                               const struct charmap_t *charmap,
-                              const struct repertoire_t *repertoire);
+                              const struct repertoire_t *repertoire,
+                              int verbose);
 
 
 #define lr_error(lr, fmt, args...) \
index 197e61e..f57c467 100644 (file)
@@ -190,7 +190,7 @@ main (int argc, char *argv[])
     error (3, 0, _("FATAL: system does not define `_POSIX2_LOCALEDEF'"));
 
   /* Process charmap file.  */
-  charmap = charmap_read (charmap_file);
+  charmap = charmap_read (charmap_file, verbose, be_quiet, 1);
 
   /* Add the first entry in the locale list.  */
   memset (&global, '\0', sizeof (struct localedef_t));
index 0825248..4dafaef 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
@@ -95,7 +95,7 @@ locfile_read (struct localedef_t *result, struct charmap_t *charmap)
     /* Parse locale definition file and store result in RESULT.  */
   while (1)
     {
-      struct token *now = lr_token (ldfile, charmap, NULL);
+      struct token *now = lr_token (ldfile, charmap, NULL, verbose);
       enum token_t nowtok = now->tok;
       struct token *arg;
 
@@ -111,7 +111,7 @@ locfile_read (struct localedef_t *result, struct charmap_t *charmap)
        case tok_escape_char:
        case tok_comment_char:
          /* We need an argument.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
 
          if (arg->tok != tok_ident)
            {
@@ -138,7 +138,7 @@ argument to `%s' must be a single character"),
 
        case tok_repertoiremap:
          /* We need an argument.  */
-         arg = lr_token (ldfile, charmap, NULL);
+         arg = lr_token (ldfile, charmap, NULL, verbose);
 
          if (arg->tok != tok_ident)
            {
index 96e2a11..a259e52 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
@@ -54,7 +54,7 @@ handle_copy (struct linereader *ldfile, struct charmap_t *charmap,
   struct token *now;
   int warned = 0;
 
-  now = lr_token (ldfile, charmap, NULL);
+  now = lr_token (ldfile, charmap, NULL, verbose);
   if (now->tok != tok_string)
     lr_error (ldfile, _("expect string argument for `copy'"));
   else if (!ignore_content)
@@ -74,7 +74,7 @@ locale name should consist only of portable characters"));
 
   /* The rest of the line must be empty and the next keyword must be
      `END xxx'.  */
-  while ((now = lr_token (ldfile, charmap, NULL))->tok != tok_end
+  while ((now = lr_token (ldfile, charmap, NULL, verbose))->tok != tok_end
         && now->tok != tok_eof)
     {
       if (warned == 0)
@@ -90,7 +90,7 @@ no other keyword shall be specified when `copy' is used"));
   if (now->tok != tok_eof)
     {
       /* Handle `END xxx'.  */
-      now = lr_token (ldfile, charmap, NULL);
+      now = lr_token (ldfile, charmap, NULL, verbose);
 
       if (now->tok != token)
        lr_error (ldfile, _("\
index a33ecc7..66bcf74 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -149,7 +149,7 @@ repertoire_read (const char *filename)
   while (1)
     {
       /* What's on?  */
-      struct token *now = lr_token (repfile, NULL, NULL);
+      struct token *now = lr_token (repfile, NULL, NULL, verbose);
       enum token_t nowtok = now->tok;
       struct token *arg;
 
@@ -168,7 +168,7 @@ repertoire_read (const char *filename)
          if (nowtok == tok_escape_char || nowtok == tok_comment_char)
            {
              /* We know that we need an argument.  */
-             arg = lr_token (repfile, NULL, NULL);
+             arg = lr_token (repfile, NULL, NULL, verbose);
 
              if (arg->tok != tok_ident)
                {