+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
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
$(inst_bindir)/iconv: $(objpfx)iconv_prog $(+force)
$(do-install-program)
+
+$(objpfx)iconv_prog: $(iconv_prog-modules:%=$(objpfx)%.o)
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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);
+}
#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"
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);
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, "");
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)
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))
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)
{
--- /dev/null
+/* 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 */
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 ||
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; }
# 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
$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
-/* 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.
#include "linereader.h"
#include "charmap.h"
#include "charmap-dir.h"
-#include "locfile.h"
#include "repertoire.h"
#include <assert.h>
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);
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)
{
}
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;
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
cmfile = cmlr_open (CHARMAP_PATH, dirent, charmap_hash);
if (cmfile != NULL)
- result = parse_charmap (cmfile);
+ result = parse_charmap (cmfile, verbose, be_quiet);
break;
}
}
}
- 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"),
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[] =
{
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;
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;
}
/* We know that we need an argument. */
- arg = lr_token (cmfile, NULL, NULL);
+ arg = lr_token (cmfile, NULL, NULL, verbose);
switch (nowtok)
{
-/* 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.
/* 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,
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ignore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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) \
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
}
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)
}
}
- arg = lr_token (ldfile, charmap, repertoire);
+ arg = lr_token (ldfile, charmap, repertoire, verbose);
}
if (nrules == 0)
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)
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. */
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
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)
{
lr_ignore_rest (ldfile, 1);
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
{
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;
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)
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)
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
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);
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;
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
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);
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
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)
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
/* 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. */
}
/* 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;
}
/* Get the next token. */
- arg = lr_token (ldfile, charmap, repertoire);
+ arg = lr_token (ldfile, charmap, repertoire, verbose);
}
}
else
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. */
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. */
{
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
/* 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);
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
/* 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))
{
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;
/* 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)
{
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)
{
}
/* 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)
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* 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)
{
lr_ignore_rest (ldfile, 1);
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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 (_("\
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 (_("\
/* 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. */
}
/* 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;
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;
}
/* 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;
ellipsis_token = now->tok;
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
continue;
}
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;
/* 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;
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;
}
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;
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;
}
/* 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;
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);
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)
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)
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;
{
/* 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);
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. */
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ignore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
}
/* 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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ignore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ignore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
} \
\
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) \
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) \
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
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);
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)
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)
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ignore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
} \
\
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) \
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
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);
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
continue;
}
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) \
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, NULL);
+ now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok;
}
-/* 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.
do
{
- now = lr_token (ldfile, charmap, repertoire);
+ now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok;
}
while (nowtok == tok_eol);
/* Ingore empty lines. */
if (nowtok == tok_eol)
{
- now = lr_token (ldfile, charmap, repertoire);
+ now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok;
continue;
}
\
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) \
} \
\
/* 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; \
} \
\
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) \
}
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
* 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;
}
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) \
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) \
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;
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)
}
/* Prepare for the next round. */
- now = lr_token (ldfile, charmap, repertoire);
+ now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok;
}
-/* 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. */
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 *
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;
return &lr->token;
case '"':
- return get_string (lr, charmap, repertoire);
+ return get_string (lr, charmap, repertoire, verbose);
case '-':
ch = lr_getc (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;
-/* 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>.
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...) \
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));
-/* 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.
/* 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;
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)
{
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)
{
-/* 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.
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)
/* 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)
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, _("\
-/* 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.
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;
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)
{