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.
This commit is contained in:
Ulrich Drepper 2001-02-05 05:57:24 +00:00
parent 377c725f8e
commit 93693c4d82
27 changed files with 1056 additions and 302 deletions

View file

@ -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> 2001-02-03 Ulrich Drepper <drepper@redhat.com>
* iconv/iconv_prog.c (main): If output file name is "-" write to * iconv/iconv_prog.c (main): If output file name is "-" write to

View file

@ -34,9 +34,19 @@ CFLAGS-gconv_db.c = -DSTATIC_GCONV
CFLAGS-gconv_simple.c = -DSTATIC_GCONV CFLAGS-gconv_simple.c = -DSTATIC_GCONV
endif 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 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 others = iconv_prog
install-others = $(inst_bindir)/iconv install-others = $(inst_bindir)/iconv
@ -47,3 +57,5 @@ include ../Rules
$(inst_bindir)/iconv: $(objpfx)iconv_prog $(+force) $(inst_bindir)/iconv: $(objpfx)iconv_prog $(+force)
$(do-install-program) $(do-install-program)
$(objpfx)iconv_prog: $(iconv_prog-modules:%=$(objpfx)%.o)

37
iconv/dummy-repertoire.c Normal file
View file

@ -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;
}

563
iconv/iconv_charmap.c Normal file
View file

@ -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);
}

View file

@ -36,7 +36,9 @@
#ifdef _POSIX_MAPPED_FILES #ifdef _POSIX_MAPPED_FILES
# include <sys/mman.h> # include <sys/mman.h>
#endif #endif
#include <charmap.h>
#include <gconv_int.h> #include <gconv_int.h>
#include "iconv_prog.h"
/* Get libc version number. */ /* Get libc version number. */
#include "../version.h" #include "../version.h"
@ -94,13 +96,13 @@ static const char *to_code;
static const char *output_file; static const char *output_file;
/* Nonzero if verbose ouput is wanted. */ /* Nonzero if verbose ouput is wanted. */
static int verbose; int verbose;
/* Nonzero if list of all coded character sets is wanted. */ /* Nonzero if list of all coded character sets is wanted. */
static int list; static int list;
/* If nonzero omit invalid character from output. */ /* If nonzero omit invalid character from output. */
static int omit_invalid; int omit_invalid;
/* Prototypes for the functions doing the actual work. */ /* Prototypes for the functions doing the actual work. */
static int process_block (iconv_t cd, char *addr, size_t len, FILE *output); 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; FILE *output;
iconv_t cd; iconv_t cd;
const char *orig_to_code; const char *orig_to_code;
struct charmap_t *from_charmap = NULL;
struct charmap_t *to_charmap = NULL;
/* Set locale via LC_ALL. */ /* Set locale via LC_ALL. */
setlocale (LC_ALL, ""); setlocale (LC_ALL, "");
@ -179,18 +183,23 @@ main (int argc, char *argv[])
to_code = newp; to_code = newp;
} }
/* Let's see whether we have these coded character sets. */ /* POSIX 1003.2b introduces a silly thing: the arguments to -t anf -f
cd = iconv_open (to_code, from_code); can be file names of charmaps. In this case iconv will have to read
if (cd == (iconv_t) -1) 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
if (errno == EINVAL) charmap filename that -t must be, too. And vice versa. There is
error (EXIT_FAILURE, 0, also no word about the symbolic names used. What if they don't
_("conversion from `%s' to `%s' not supported"), match? */
from_code, orig_to_code); if (strchr (from_code, '/') != NULL)
else /* The from-name might be a charmap file name. Try reading the
error (EXIT_FAILURE, errno, file. */
_("failed to start conversion processing")); 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. */ /* Determine output file. */
if (output_file != NULL && strcmp (output_file, "-") != 0) if (output_file != NULL && strcmp (output_file, "-") != 0)
@ -202,92 +211,117 @@ main (int argc, char *argv[])
else else
output = stdout; output = stdout;
/* Now process the remaining files. Write them to stdout or the file /* At this point we have to handle two cases. The first one is
specified with the `-o' parameter. If we have no file given as where a charmap is used for the from- or to-charset, or both. We
the parameter process all from stdin. */ handle this special since it is very different from the sane way of
if (remaining == argc) doing things. The other case allows converting using the iconv()
{ function. */
if (process_file (cd, stdin, output) != 0) if (from_charmap != NULL || to_charmap != NULL)
status = EXIT_FAILURE; /* Construct the conversion table and do the conversion. */
} status = charmap_conversion (from_code, from_charmap, to_code, to_charmap,
argc, remaining, argv, output);
else else
do {
{ /* Let's see whether we have these coded character sets. */
struct stat st; cd = iconv_open (to_code, from_code);
char *addr; if (cd == (iconv_t) -1)
int fd; {
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"));
}
/* Now process the remaining files. Write them to stdout or the file
if (verbose) specified with the `-o' parameter. If we have no file given as
printf ("%s:\n", argv[remaining]); the parameter process all from stdin. */
if (strcmp (argv[remaining], "-") == 0) if (remaining == argc)
fd = 0; {
else if (process_file (cd, stdin, output) != 0)
status = EXIT_FAILURE;
}
else
do
{ {
fd = open (argv[remaining], O_RDONLY); struct stat st;
char *addr;
int fd;
if (fd == -1) if (verbose)
printf ("%s:\n", argv[remaining]);
if (strcmp (argv[remaining], "-") == 0)
fd = 0;
else
{ {
error (0, errno, _("cannot open input file `%s'"), fd = open (argv[remaining], O_RDONLY);
argv[remaining]);
status = EXIT_FAILURE; if (fd == -1)
continue; {
error (0, errno, _("cannot open input file `%s'"),
argv[remaining]);
status = EXIT_FAILURE;
continue;
}
} }
}
#ifdef _POSIX_MAPPED_FILES #ifdef _POSIX_MAPPED_FILES
/* We have possibilities for reading the input file. First try /* We have possibilities for reading the input file. First try
to mmap() it since this will provide the fastest solution. */ to mmap() it since this will provide the fastest solution. */
if (fstat (fd, &st) == 0 if (fstat (fd, &st) == 0
&& ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE,
!= MAP_FAILED)) 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)
{ {
/* Something went wrong. */ /* Yes, we can use mmap(). The descriptor is not needed
status = EXIT_FAILURE; 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. */ /* We don't need the input data anymore. */
munmap ((void *) addr, st.st_size); 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;
} }
else
/* We don't need the input data anymore. */
munmap ((void *) addr, st.st_size);
}
else
#endif /* _POSIX_MAPPED_FILES */ #endif /* _POSIX_MAPPED_FILES */
{
/* Read the file in pieces. */
if (process_fd (cd, fd, output) != 0)
{ {
/* Something went wrong. */ /* Read the file in pieces. */
status = EXIT_FAILURE; if (process_fd (cd, fd, output) != 0)
{
/* Something went wrong. */
status = EXIT_FAILURE;
/* We don't need the input file anymore. */ /* 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); 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. */ /* Close the output file now. */
if (fclose (output)) 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. */ character sets we have to flush the state now. */
outptr = outbuf; outptr = outbuf;
outlen = OUTBUF_SIZE; outlen = OUTBUF_SIZE;
n = iconv (cd, NULL, NULL, &outptr, &outlen); (void) iconv (cd, NULL, NULL, &outptr, &outlen);
if (outptr != outbuf) if (outptr != outbuf)
{ {

42
iconv/iconv_prog.h Normal file
View file

@ -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 */

View file

@ -59,13 +59,10 @@ while read from to subset targets; do
if test -n "$targets"; then if test -n "$targets"; then
for t in $targets; do for t in $targets; do
if test -f testdata/$from; then 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 || $PROG -f $from -t $t testdata/$from > $temp1 ||
{ if test $? -gt 128; then exit 1; fi { if test $? -gt 128; then exit 1; fi
echo "FAILED" echo "FAILED"; failed=1; continue; }
failed=1
continue
}
echo $ac_n "OK$ac_c" echo $ac_n "OK$ac_c"
if test -s testdata/$from..$t; then if test -s testdata/$from..$t; then
cmp $temp1 testdata/$from..$t > /dev/null 2>&1 || 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" echo $ac_n " -> $from $ac_c"
$PROG -f $t -t $to -o $temp2 $temp1 || $PROG -f $t -t $to -o $temp2 $temp1 ||
{ if test $? -gt 128; then exit 1; fi { if test $? -gt 128; then exit 1; fi
echo "FAILED" echo "FAILED"; failed=1; continue; }
failed=1
continue
}
echo $ac_n "OK$ac_c" echo $ac_n "OK$ac_c"
test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 || test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
{ echo "/FAILED"; failed=1; continue; } { 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 # of the coded character set we convert the text to this coded character
# set. Otherwise we convert to all the TARGETS. # set. Otherwise we convert to all the TARGETS.
if test $subset = Y; then 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 $from -t $t testdata/suntzus |
$PROG -f $t -t $to > $temp1 || $PROG -f $t -t $to > $temp1 ||
{ if test $? -gt 128; then exit 1; fi { if test $? -gt 128; then exit 1; fi
echo "FAILED" echo "FAILED"; failed=1; continue; }
failed=1
continue
}
echo $ac_n "OK$ac_c" echo $ac_n "OK$ac_c"
cmp testdata/suntzus $temp1 || cmp testdata/suntzus $temp1 ||
{ echo "/FAILED"; { echo "/FAILED"; failed=1; continue; }
failed=1; continue; }
echo "/OK" echo "/OK"
fi fi
rm -f $temp1 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 done
fi fi
@ -113,14 +131,10 @@ while read from to subset targets; do
$PROG -f ASCII -t $to testdata/suntzus | $PROG -f ASCII -t $to testdata/suntzus |
$PROG -f $to -t ASCII > $temp1 || $PROG -f $to -t ASCII > $temp1 ||
{ if test $? -gt 128; then exit 1; fi { if test $? -gt 128; then exit 1; fi
echo "FAILED" echo "FAILED"; failed=1; continue; }
failed=1
continue
}
echo $ac_n "OK$ac_c" echo $ac_n "OK$ac_c"
cmp testdata/suntzus $temp1 || cmp testdata/suntzus $temp1 ||
{ echo "/FAILED"; { echo "/FAILED"; failed=1; continue; }
failed=1; continue; }
echo "/OK" echo "/OK"
fi fi
done < TESTS done < TESTS

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@ -34,7 +34,6 @@
#include "linereader.h" #include "linereader.h"
#include "charmap.h" #include "charmap.h"
#include "charmap-dir.h" #include "charmap-dir.h"
#include "locfile.h"
#include "repertoire.h" #include "repertoire.h"
#include <assert.h> #include <assert.h>
@ -47,7 +46,8 @@
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t __n);
/* Prototypes for local functions. */ /* 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, static void new_width (struct linereader *cmfile, struct charmap_t *result,
const char *from, const char *to, const char *from, const char *to,
unsigned long int width); 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, int nbytes, char *bytes, const char *from,
const char *to, int decimal_ellipsis, int step); const char *to, int decimal_ellipsis, int step);
static const char *null_pointer;
static struct linereader * static struct linereader *
cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf) 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 * 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; struct charmap_t *result = NULL;
@ -129,14 +132,14 @@ charmap_read (const char *filename)
if (cmfile != NULL) if (cmfile != NULL)
{ {
result = parse_charmap (cmfile); result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL && !be_quiet) if (result == NULL && !be_quiet)
error (0, errno, _("character map file `%s' not found"), filename); 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 /* OK, one more try. We also accept the names given to the
character sets in the files. Sometimes they differ from 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); cmfile = cmlr_open (CHARMAP_PATH, dirent, charmap_hash);
if (cmfile != NULL) if (cmfile != NULL)
result = parse_charmap (cmfile); result = parse_charmap (cmfile, verbose, be_quiet);
break; break;
} }
@ -180,13 +183,13 @@ charmap_read (const char *filename)
} }
} }
if (result == NULL) if (result == NULL && DEFAULT_CHARMAP != NULL)
{ {
struct linereader *cmfile; struct linereader *cmfile;
cmfile = cmlr_open (CHARMAP_PATH, DEFAULT_CHARMAP, charmap_hash); cmfile = cmlr_open (CHARMAP_PATH, DEFAULT_CHARMAP, charmap_hash);
if (cmfile != NULL) if (cmfile != NULL)
result = parse_charmap (cmfile); result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL) if (result == NULL)
error (4, errno, _("default character map file `%s' not found"), 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 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 same as the Unicode code, which for all of the enumerated characters
is identical to the ASCII code. */ is identical to the ASCII code. */
if (result != NULL) if (result != NULL && use_default)
{ {
static const char basic_charset[] = 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 * static struct charmap_t *
parse_charmap (struct linereader *cmfile) parse_charmap (struct linereader *cmfile, int verbose, int be_quiet)
{ {
struct charmap_t *result; struct charmap_t *result;
int state; int state;
@ -293,7 +296,7 @@ parse_charmap (struct linereader *cmfile)
while (1) while (1)
{ {
/* What's on? */ /* 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; enum token_t nowtok = now->tok;
struct token *arg; struct token *arg;
@ -351,7 +354,7 @@ parse_charmap (struct linereader *cmfile)
} }
/* We know that we need an argument. */ /* We know that we need an argument. */
arg = lr_token (cmfile, NULL, NULL); arg = lr_token (cmfile, NULL, NULL, verbose);
switch (nowtok) switch (nowtok)
{ {

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@ -65,7 +65,8 @@ struct charseq
/* Prototypes for charmap handling functions. */ /* 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. */ /* Return the value stored under the given key in the hashing table. */
extern struct charseq *charmap_find_value (const struct charmap_t *charmap, extern struct charseq *charmap_find_value (const struct charmap_t *charmap,

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -434,7 +434,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -460,7 +460,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
/* Ignore empty lines. */ /* Ignore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -477,7 +477,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_string) \ if (arg->tok != tok_string) \
goto err_label; \ goto err_label; \
if (address->cat != NULL) \ if (address->cat != NULL) \
@ -514,7 +514,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_string && arg->tok != tok_number) \ if (arg->tok != tok_string && arg->tok != tok_number) \
goto err_label; \ goto err_label; \
if (address->cat != NULL) \ if (address->cat != NULL) \
@ -552,7 +552,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_number) \ if (arg->tok != tok_number) \
goto err_label; \ goto err_label; \
else if (address->cat != 0) \ else if (address->cat != 0) \
@ -566,7 +566,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_ADDRESS'. */ /* Next we assume `LC_ADDRESS'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -584,7 +584,7 @@ address_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -508,7 +508,7 @@ read_directions (struct linereader *ldfile, struct token *arg,
} }
if (valid) 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 if (arg->tok == tok_eof || arg->tok == tok_eol || arg->tok == tok_comma
|| arg->tok == tok_semicolon) || 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) if (nrules == 0)
@ -697,7 +697,7 @@ insert_weights (struct linereader *ldfile, struct element_t *elem,
weight_cnt = 0; weight_cnt = 0;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
do do
{ {
if (arg->tok == tok_eof || arg->tok == tok_eol) if (arg->tok == tok_eof || arg->tok == tok_eol)
@ -867,11 +867,11 @@ insert_weights (struct linereader *ldfile, struct element_t *elem,
break; 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. */ /* This better should be the end of the line or a semicolon. */
if (arg->tok == tok_semicolon) if (arg->tok == tok_semicolon)
/* OK, ignore this and read the next token. */ /* 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) else if (arg->tok != tok_eof && arg->tok != tok_eol)
{ {
/* It's a syntax error. */ /* It's a syntax error. */
@ -2567,7 +2567,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -2575,18 +2575,19 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (nowtok == tok_copy) if (nowtok == tok_copy)
{ {
state = 2; state = 2;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_string) if (now->tok != tok_string)
{ {
SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE"); SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
skip_category: skip_category:
do do
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
while (now->tok != tok_eof && now->tok != tok_end); while (now->tok != tok_eof && now->tok != tok_end);
if (now->tok != tok_eof 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"); lr_error (ldfile, _("%s: premature end of file"), "LC_COLLATE");
else if (now->tok != tok_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); lr_ignore_rest (ldfile, 1);
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
@ -2636,7 +2637,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -2645,7 +2646,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
{ {
case tok_copy: case tok_copy:
/* Allow copying other locales. */ /* Allow copying other locales. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_string) if (now->tok != tok_string)
goto err_label; goto err_label;
@ -2668,7 +2669,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (state != 0) if (state != 0)
goto err_label; goto err_label;
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok != tok_number) if (arg->tok != tok_number)
goto err_label; goto err_label;
if (collate->col_weight_max != -1) if (collate->col_weight_max != -1)
@ -2691,7 +2692,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (state != 0) if (state != 0)
goto err_label; goto err_label;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
goto err_label; goto err_label;
else if (!ignore_content) else if (!ignore_content)
@ -2738,7 +2739,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (state != 0) if (state != 0)
goto err_label; goto err_label;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
goto err_label; goto err_label;
else else
@ -2747,7 +2748,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
size_t symbol_len = arg->val.str.lenmb; size_t symbol_len = arg->val.str.lenmb;
/* Next the `from' keyword. */ /* Next the `from' keyword. */
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_from) if (arg->tok != tok_from)
{ {
free ((char *) symbol); free ((char *) symbol);
@ -2758,7 +2759,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
ldfile->translate_strings = 1; ldfile->translate_strings = 1;
/* Finally the string with the replacement. */ /* Finally the string with the replacement. */
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
ldfile->return_widestr = 0; ldfile->return_widestr = 0;
ldfile->translate_strings = 0; ldfile->translate_strings = 0;
@ -2807,7 +2808,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (state != 0 && state != 2) if (state != 0 && state != 2)
goto err_label; goto err_label;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
goto err_label; goto err_label;
else else
@ -2818,12 +2819,12 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
size_t endsymbol_len = 0; size_t endsymbol_len = 0;
enum token_t ellipsis = tok_none; 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) if (arg->tok == tok_ellipsis2 || arg->tok == tok_ellipsis4)
{ {
ellipsis = arg->tok; ellipsis = arg->tok;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
{ {
free (symbol); free (symbol);
@ -2954,7 +2955,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (state != 0) if (state != 0)
goto err_label; goto err_label;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
goto err_label; goto err_label;
else else
@ -2965,7 +2966,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
size_t symname_len; size_t symname_len;
struct symbol_t *symval; struct symbol_t *symval;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok != tok_bsymbol) if (arg->tok != tok_bsymbol)
{ {
if (newname != NULL) if (newname != NULL)
@ -3022,7 +3023,7 @@ error while adding equivalent collating symbol"));
case tok_script: case tok_script:
/* We get told about the scripts we know. */ /* 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) if (arg->tok != tok_bsymbol)
goto err_label; goto err_label;
else else
@ -3074,7 +3075,7 @@ error while adding equivalent collating symbol"));
/* The 14652 draft does not specify whether all `order_start' lines /* The 14652 draft does not specify whether all `order_start' lines
must contain the same number of sort-rules, but 14651 does. So must contain the same number of sort-rules, but 14651 does. So
we require this here as well. */ we require this here as well. */
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok == tok_bsymbol) if (arg->tok == tok_bsymbol)
{ {
/* This better should be a section name. */ /* 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. */ /* 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) if (arg->tok == tok_eol)
{ {
uint32_t cnt; uint32_t cnt;
@ -3156,7 +3157,7 @@ error while adding equivalent collating symbol"));
} }
/* Get the next token. */ /* Get the next token. */
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
} }
} }
else else
@ -3237,7 +3238,7 @@ error while adding equivalent collating symbol"));
goto err_label; goto err_label;
state = 3; state = 3;
arg = lr_token (ldfile, charmap, repertoire); arg = lr_token (ldfile, charmap, repertoire, verbose);
if (arg->tok == tok_bsymbol || arg->tok == tok_ucs4) if (arg->tok == tok_bsymbol || arg->tok == tok_ucs4)
{ {
/* Find this symbol in the sequence table. */ /* Find this symbol in the sequence table. */
@ -3366,7 +3367,7 @@ error while adding equivalent collating symbol"));
state = 5; state = 5;
/* Get the name of the sections we are adding after. */ /* 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) if (arg->tok == tok_bsymbol)
{ {
/* Now find a section with this name. */ /* Now find a section with this name. */
@ -3399,7 +3400,7 @@ error while adding equivalent collating symbol"));
{ {
lr_ignore_rest (ldfile, 0); 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 while (now->tok == tok_reorder_sections_after
|| now->tok == tok_reorder_sections_end || 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 /* Process the rest of the line which might change
the collation rules. */ 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) if (arg->tok != tok_eof && arg->tok != tok_eol)
read_directions (ldfile, arg, charmap, repertoire, read_directions (ldfile, arg, charmap, repertoire,
collate); collate);
@ -3710,7 +3711,7 @@ error while adding equivalent collating symbol"));
error (0, 0, _("%s: missing `reorder-sections-end' keyword"), error (0, 0, _("%s: missing `reorder-sections-end' keyword"),
"LC_COLLATE"); "LC_COLLATE");
} }
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -3727,7 +3728,7 @@ error while adding equivalent collating symbol"));
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. 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 /* Next we have one or more transliterations. They are
separated by semicolons. */ 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)) 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. */ single characters, possibly defining a range when an ellipsis is used. */
while (1) while (1)
{ {
struct token *now = lr_token (ldfile, charmap, repertoire); struct token *now = lr_token (ldfile, charmap, repertoire, verbose);
struct translit_ignore_t *newp; struct translit_ignore_t *newp;
uint32_t from; 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 /* Now we expect either a semicolon, an ellipsis, or the end of the
line. */ line. */
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok == tok_ellipsis2 || now->tok == tok_ellipsis2_2) if (now->tok == tok_ellipsis2 || now->tok == tok_ellipsis2_2)
{ {
@ -1992,7 +1992,7 @@ read_translit_ignore_entry (struct linereader *ldfile,
uint32_t to; uint32_t to;
int step = now->tok == tok_ellipsis2_2 ? 2 : 1; 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) 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. */ /* 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) if (now->tok == tok_eol || now->tok == tok_eof)
@ -2084,7 +2084,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); 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 we see `copy' now we are almost done. */
if (nowtok == tok_copy) if (nowtok == tok_copy)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_string) if (now->tok != tok_string)
{ {
SYNTAX_ERROR (_("%s: syntax error"), "LC_CTYPE"); SYNTAX_ERROR (_("%s: syntax error"), "LC_CTYPE");
skip_category: skip_category:
do do
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
while (now->tok != tok_eof && now->tok != tok_end); while (now->tok != tok_eof && now->tok != tok_end);
if (now->tok != tok_eof 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"); lr_error (ldfile, _("%s: premature end of file"), "LC_CTYPE");
else if (now->tok != tok_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); lr_ignore_rest (ldfile, 1);
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
@ -2157,7 +2158,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -2165,14 +2166,14 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
switch (nowtok) switch (nowtok)
{ {
case tok_charclass: 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) while (now->tok == tok_ident || now->tok == tok_string)
{ {
ctype_class_new (ldfile, ctype, now->val.str.startmb); 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) if (now->tok != tok_semicolon)
break; break;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
} }
if (now->tok != tok_eol) if (now->tok != tok_eol)
SYNTAX_ERROR (_("\ SYNTAX_ERROR (_("\
@ -2180,14 +2181,14 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
break; break;
case tok_charconv: 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) while (now->tok == tok_ident || now->tok == tok_string)
{ {
ctype_map_new (ldfile, ctype, now->val.str.startmb, charmap); 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) if (now->tok != tok_semicolon)
break; break;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
} }
if (now->tok != tok_eol) if (now->tok != tok_eol)
SYNTAX_ERROR (_("\ 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 /* We simply forget the `class' keyword and use the following
operand to determine the bit. */ 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) if (now->tok == tok_ident || now->tok == tok_string)
{ {
/* Must can be one of the predefined class names. */ /* 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. */ /* 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) if (now->tok != tok_semicolon)
goto err_label; goto err_label;
goto read_charclass; goto read_charclass;
@ -2283,7 +2284,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result,
last_token = tok_none; last_token = tok_none;
ellipsis_token = tok_none; ellipsis_token = tok_none;
step = 1; step = 1;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
while (now->tok != tok_eol && now->tok != tok_eof) while (now->tok != tok_eol && now->tok != tok_eof)
{ {
uint32_t wch; 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. */ /* 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) if (now->tok == tok_eol || now->tok == tok_eof)
break; break;
@ -2440,7 +2441,7 @@ with character code range values one must use the absolute ellipsis `...'"));
ellipsis_token = now->tok; ellipsis_token = now->tok;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
continue; continue;
} }
@ -2448,7 +2449,7 @@ with character code range values one must use the absolute ellipsis `...'"));
goto err_label; goto err_label;
/* And get the next character. */ /* And get the next character. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
ellipsis_token = tok_none; ellipsis_token = tok_none;
step = 1; 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 /* We simply forget the `map' keyword and use the following
operand to determine the mapping. */ 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) if (now->tok == tok_ident || now->tok == tok_string)
{ {
size_t cnt; size_t cnt;
@ -2545,7 +2546,7 @@ with character code range values one must use the absolute ellipsis `...'"));
else else
mapidx = now->tok - tok_toupper; mapidx = now->tok - tok_toupper;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
/* This better should be a semicolon. */ /* This better should be a semicolon. */
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
goto err_label; goto err_label;
@ -2561,7 +2562,7 @@ with character code range values one must use the absolute ellipsis `...'"));
} }
ctype->tomap_done[mapidx] = 1; 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) while (now->tok != tok_eol && now->tok != tok_eof)
{ {
struct charseq *from_seq; struct charseq *from_seq;
@ -2574,24 +2575,24 @@ with character code range values one must use the absolute ellipsis `...'"));
goto err_label; goto err_label;
/* Next comes the from-value. */ /* 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, if (get_character (now, charmap, repertoire, &from_seq,
&from_wch) != 0) &from_wch) != 0)
goto err_label; goto err_label;
/* The next is a comma. */ /* The next is a comma. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_comma) if (now->tok != tok_comma)
goto err_label; goto err_label;
/* And the other value. */ /* 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, if (get_character (now, charmap, repertoire, &to_seq,
&to_wch) != 0) &to_wch) != 0)
goto err_label; goto err_label;
/* And the last thing is the closing brace. */ /* 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) if (now->tok != tok_close_brace)
goto err_label; 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 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) if (now->tok == tok_semicolon)
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
} }
break; break;
@ -2627,7 +2628,7 @@ with character code range values one must use the absolute ellipsis `...'"));
do do
{ {
lr_ignore_rest (ldfile, 0); 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); 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; ldfile->return_widestr = 1;
/* We proceed until we see the `translit_end' token. */ /* 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) now->tok != tok_translit_end && now->tok != tok_eof)
{ {
if (now->tok == tok_eol) if (now->tok == tok_eol)
@ -2664,7 +2665,7 @@ with character code range values one must use the absolute ellipsis `...'"));
const char *repertoire_name; const char *repertoire_name;
struct translit_include_t *include_stmt, **include_ptr; 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 /* This should be a string or an identifier. In any
case something to name a locale. */ case something to name a locale. */
if (now->tok != tok_string && now->tok != tok_ident) 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; locale_name = now->val.str.startmb;
/* Next should be a semicolon. */ /* Next should be a semicolon. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
goto translit_syntax; goto translit_syntax;
/* Now the repertoire name. */ /* 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) if ((now->tok != tok_string && now->tok != tok_ident)
|| now->val.str.startmb == NULL) || now->val.str.startmb == NULL)
goto translit_syntax; 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 /* We expect a single character or string as the
argument. */ argument. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
wstr = read_widestring (ldfile, now, charmap, wstr = read_widestring (ldfile, now, charmap,
repertoire); repertoire);
@ -2746,7 +2747,7 @@ previous definition was here"));
break; break;
/* Maybe there is another replacement we can use. */ /* 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) if (now->tok == tok_eol || now->tok == tok_eof)
{ {
/* Nothing found. We tell the user. */ /* Nothing found. We tell the user. */
@ -2837,7 +2838,7 @@ previous definition was here"));
case tok_end: case tok_end:
/* Next we assume `LC_CTYPE'. */ /* Next we assume `LC_CTYPE'. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok == tok_eof) if (now->tok == tok_eof)
break; break;
if (now->tok == tok_eol) if (now->tok == tok_eol)
@ -2856,7 +2857,7 @@ previous definition was here"));
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -301,7 +301,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -328,7 +328,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
/* Ignore empty lines. */ /* Ignore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -345,7 +345,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_string) \ if (arg->tok != tok_string) \
goto err_label; \ goto err_label; \
if (identification->cat != NULL) \ if (identification->cat != NULL) \
@ -386,15 +386,15 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* We expect two operands. */ /* 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) if (arg->tok != tok_string && arg->tok != tok_ident)
goto err_label; goto err_label;
/* Next is a semicolon. */ /* Next is a semicolon. */
cattok = lr_token (ldfile, charmap, NULL); cattok = lr_token (ldfile, charmap, NULL, verbose);
if (cattok->tok != tok_semicolon) if (cattok->tok != tok_semicolon)
goto err_label; goto err_label;
/* Now a LC_xxx identifier. */ /* Now a LC_xxx identifier. */
cattok = lr_token (ldfile, charmap, NULL); cattok = lr_token (ldfile, charmap, NULL, verbose);
switch (cattok->tok) switch (cattok->tok)
{ {
#define CATEGORY(lname, uname) \ #define CATEGORY(lname, uname) \
@ -430,7 +430,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_IDENTIFICATION'. */ /* Next we assume `LC_IDENTIFICATION'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -448,7 +448,7 @@ identification_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -164,7 +164,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -191,7 +191,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -208,7 +208,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_number) \ if (arg->tok != tok_number) \
goto err_label; \ goto err_label; \
else if (measurement->cat != 0) \ else if (measurement->cat != 0) \
@ -222,7 +222,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_MEASUREMENT'. */ /* Next we assume `LC_MEASUREMENT'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -240,7 +240,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -245,7 +245,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -273,7 +273,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
/* Ignore empty lines. */ /* Ignore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -297,7 +297,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
lr_ignore_rest (ldfile, 0); \ lr_ignore_rest (ldfile, 0); \
break; \ break; \
} \ } \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok != tok_string) \ if (now->tok != tok_string) \
goto syntax_error; \ goto syntax_error; \
else if (!ignore_content && now->val.str.startmb == NULL) \ 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: case tok_end:
/* Next we assume `LC_MESSAGES'. */ /* Next we assume `LC_MESSAGES'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -334,7 +334,7 @@ messages_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -642,7 +642,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -668,7 +668,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
/* Ignore empty lines. */ /* Ignore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -685,7 +685,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
now = lr_token (ldfile, charmap, NULL); \ now = lr_token (ldfile, charmap, NULL, verbose); \
if (now->tok != tok_string) \ if (now->tok != tok_string) \
goto err_label; \ goto err_label; \
else if (monetary->cat != NULL) \ else if (monetary->cat != NULL) \
@ -720,7 +720,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
} \ } \
\ \
ldfile->return_widestr = 1; \ ldfile->return_widestr = 1; \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok != tok_string) \ if (now->tok != tok_string) \
goto err_label; \ goto err_label; \
if (monetary->cat != NULL) \ if (monetary->cat != NULL) \
@ -761,7 +761,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
now = lr_token (ldfile, charmap, NULL); \ now = lr_token (ldfile, charmap, NULL, verbose); \
if (now->tok != tok_minus1 && now->tok != tok_number) \ if (now->tok != tok_minus1 && now->tok != tok_number) \
goto err_label; \ goto err_label; \
else if (monetary->cat != -2) \ else if (monetary->cat != -2) \
@ -813,7 +813,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
break; break;
} }
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_minus1 && now->tok != tok_number) if (now->tok != tok_minus1 && now->tok != tok_number)
goto err_label; goto err_label;
else else
@ -861,11 +861,11 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
grouping[act++] = now->val.num; grouping[act++] = now->val.num;
/* Next must be semicolon. */ /* Next must be semicolon. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
break; break;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
} }
while (now->tok == tok_minus1 || now->tok == tok_number); while (now->tok == tok_minus1 || now->tok == tok_number);
@ -891,7 +891,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
break; break;
} }
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_number) if (now->tok != tok_number)
goto err_label; goto err_label;
if (now->val.num == 0) if (now->val.num == 0)
@ -908,11 +908,11 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
if (!ignore_content) if (!ignore_content)
monetary->conversion_rate[0] = now->val.num; monetary->conversion_rate[0] = now->val.num;
/* Next must be a semicolon. */ /* Next must be a semicolon. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
goto err_label; goto err_label;
/* And another number. */ /* And another number. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_number) if (now->tok != tok_number)
goto err_label; goto err_label;
if (now->val.num == 0) if (now->val.num == 0)
@ -925,7 +925,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_MONETARY'. */ /* Next we assume `LC_MONETARY'. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok == tok_eof) if (now->tok == tok_eof)
break; break;
if (now->tok == tok_eol) if (now->tok == tok_eol)
@ -942,7 +942,7 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -223,7 +223,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -249,7 +249,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
/* Ignore empty lines. */ /* Ignore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -266,7 +266,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_string) \ if (arg->tok != tok_string) \
goto err_label; \ goto err_label; \
if (name->cat != NULL) \ if (name->cat != NULL) \
@ -291,7 +291,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_NAME'. */ /* Next we assume `LC_NAME'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -308,7 +308,7 @@ name_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -207,7 +207,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -233,7 +233,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -251,7 +251,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
} \ } \
\ \
ldfile->return_widestr = 1; \ ldfile->return_widestr = 1; \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok != tok_string) \ if (now->tok != tok_string) \
goto err_label; \ goto err_label; \
if (numeric->cat != NULL) \ if (numeric->cat != NULL) \
@ -291,7 +291,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
break; break;
} }
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_minus1 && now->tok != tok_number) if (now->tok != tok_minus1 && now->tok != tok_number)
goto err_label; goto err_label;
else else
@ -338,11 +338,11 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
grouping[act++] = now->val.num; grouping[act++] = now->val.num;
/* Next must be semicolon. */ /* Next must be semicolon. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
break; break;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
} }
while (now->tok == tok_minus1 || now->tok == tok_number); 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: case tok_end:
/* Next we assume `LC_NUMERIC'. */ /* Next we assume `LC_NUMERIC'. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok == tok_eof) if (now->tok == tok_eof)
break; break;
if (now->tok == tok_eol) if (now->tok == tok_eol)
@ -378,7 +378,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -166,7 +166,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -192,7 +192,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -209,7 +209,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_number) \ if (arg->tok != tok_number) \
goto err_label; \ goto err_label; \
else if (paper->cat != 0) \ else if (paper->cat != 0) \
@ -224,7 +224,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_PAPER'. */ /* Next we assume `LC_PAPER'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -241,7 +241,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -233,7 +233,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -259,7 +259,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -276,7 +276,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
arg = lr_token (ldfile, charmap, NULL); \ arg = lr_token (ldfile, charmap, NULL, verbose); \
if (arg->tok != tok_string) \ if (arg->tok != tok_string) \
goto err_label; \ goto err_label; \
if (telephone->cat != NULL) \ if (telephone->cat != NULL) \
@ -299,7 +299,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_TELEPHONE'. */ /* Next we assume `LC_TELEPHONE'. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok == tok_eof) if (arg->tok == tok_eof)
break; break;
if (arg->tok == tok_eol) if (arg->tok == tok_eol)
@ -316,7 +316,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -904,7 +904,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
do do
{ {
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok; nowtok = now->tok;
} }
while (nowtok == tok_eol); while (nowtok == tok_eol);
@ -930,7 +930,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
/* Ingore empty lines. */ /* Ingore empty lines. */
if (nowtok == tok_eol) if (nowtok == tok_eol)
{ {
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok; nowtok = now->tok;
continue; continue;
} }
@ -949,7 +949,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
\ \
for (cnt = 0; cnt < max; ++cnt) \ 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 (now->tok == tok_eol) \
{ \ { \
if (cnt < min) \ if (cnt < min) \
@ -981,7 +981,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
} \ } \
\ \
/* Match the semicolon. */ \ /* 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) \ if (now->tok != tok_semicolon && now->tok != tok_eol) \
break; \ break; \
} \ } \
@ -995,7 +995,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
\ \
if (now->tok == tok_semicolon) \ if (now->tok == tok_semicolon) \
{ \ { \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok == tok_eol) \ if (now->tok == tok_eol) \
lr_error (ldfile, _("extra trailing semicolon")); \ lr_error (ldfile, _("extra trailing semicolon")); \
else if (now->tok == tok_string) \ else if (now->tok == tok_string) \
@ -1031,7 +1031,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
} }
do do
{ {
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_string) if (now->tok != tok_string)
goto err_label; goto err_label;
if (!ignore_content && (now->val.str.startmb == NULL if (!ignore_content && (now->val.str.startmb == NULL
@ -1053,7 +1053,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
* sizeof (char *)); * sizeof (char *));
time->wera[time->num_era++] = now->val.str.startwc; 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) if (now->tok != tok_eol && now->tok != tok_semicolon)
goto err_label; goto err_label;
} }
@ -1070,7 +1070,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok != tok_string) \ if (now->tok != tok_string) \
goto err_label; \ goto err_label; \
else if (time->cat != NULL) \ else if (time->cat != NULL) \
@ -1112,7 +1112,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break; \ break; \
} \ } \
\ \
now = lr_token (ldfile, charmap, repertoire); \ now = lr_token (ldfile, charmap, repertoire, verbose); \
if (now->tok != tok_number) \ if (now->tok != tok_number) \
goto err_label; \ goto err_label; \
else if (time->cat != 0) \ else if (time->cat != 0) \
@ -1135,25 +1135,25 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
break; break;
} }
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_number) if (now->tok != tok_number)
goto err_label; goto err_label;
time->week_ndays = now->val.num; time->week_ndays = now->val.num;
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
goto err_label; goto err_label;
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_number) if (now->tok != tok_number)
goto err_label; goto err_label;
time->week_1stday = now->val.num; time->week_1stday = now->val.num;
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_semicolon) if (now->tok != tok_semicolon)
goto err_label; goto err_label;
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok != tok_number) if (now->tok != tok_number)
goto err_label; goto err_label;
time->week_1stweek = now->val.num; time->week_1stweek = now->val.num;
@ -1163,7 +1163,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
case tok_end: case tok_end:
/* Next we assume `LC_TIME'. */ /* Next we assume `LC_TIME'. */
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
if (now->tok == tok_eof) if (now->tok == tok_eof)
break; break;
if (now->tok == tok_eol) if (now->tok == tok_eol)
@ -1180,7 +1180,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare for the next round. */ /* Prepare for the next round. */
now = lr_token (ldfile, charmap, repertoire); now = lr_token (ldfile, charmap, repertoire, verbose);
nowtok = now->tok; nowtok = now->tok;
} }

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@ -31,7 +31,11 @@
#include "charmap.h" #include "charmap.h"
#include "error.h" #include "error.h"
#include "linereader.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. */ /* 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_ident (struct linereader *lr);
static struct token *get_string (struct linereader *lr, static struct token *get_string (struct linereader *lr,
const struct charmap_t *charmap, const struct charmap_t *charmap,
const struct repertoire_t *repertoire); const struct repertoire_t *repertoire,
int verbose);
struct linereader * struct linereader *
@ -158,7 +163,7 @@ extern char *program_name;
struct token * struct token *
lr_token (struct linereader *lr, const struct charmap_t *charmap, lr_token (struct linereader *lr, const struct charmap_t *charmap,
const struct repertoire_t *repertoire) const struct repertoire_t *repertoire, int verbose)
{ {
int ch; int ch;
@ -290,7 +295,7 @@ lr_token (struct linereader *lr, const struct charmap_t *charmap,
return &lr->token; return &lr->token;
case '"': case '"':
return get_string (lr, charmap, repertoire); return get_string (lr, charmap, repertoire, verbose);
case '-': case '-':
ch = lr_getc (lr); ch = lr_getc (lr);
@ -563,7 +568,7 @@ get_ident (struct linereader *lr)
static struct token * static struct token *
get_string (struct linereader *lr, const struct charmap_t *charmap, 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; int return_widestr = lr->return_widestr;
char *buf; char *buf;

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.org>. 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 int lr_next (struct linereader *lr);
extern struct token *lr_token (struct linereader *lr, extern struct token *lr_token (struct linereader *lr,
const struct charmap_t *charmap, const struct charmap_t *charmap,
const struct repertoire_t *repertoire); const struct repertoire_t *repertoire,
int verbose);
#define lr_error(lr, fmt, args...) \ #define lr_error(lr, fmt, args...) \

View file

@ -190,7 +190,7 @@ main (int argc, char *argv[])
error (3, 0, _("FATAL: system does not define `_POSIX2_LOCALEDEF'")); error (3, 0, _("FATAL: system does not define `_POSIX2_LOCALEDEF'"));
/* Process charmap file. */ /* 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. */ /* Add the first entry in the locale list. */
memset (&global, '\0', sizeof (struct localedef_t)); memset (&global, '\0', sizeof (struct localedef_t));

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. 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. */ /* Parse locale definition file and store result in RESULT. */
while (1) 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; enum token_t nowtok = now->tok;
struct token *arg; struct token *arg;
@ -111,7 +111,7 @@ locfile_read (struct localedef_t *result, struct charmap_t *charmap)
case tok_escape_char: case tok_escape_char:
case tok_comment_char: case tok_comment_char:
/* We need an argument. */ /* We need an argument. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok != tok_ident) if (arg->tok != tok_ident)
{ {
@ -138,7 +138,7 @@ argument to `%s' must be a single character"),
case tok_repertoiremap: case tok_repertoiremap:
/* We need an argument. */ /* We need an argument. */
arg = lr_token (ldfile, charmap, NULL); arg = lr_token (ldfile, charmap, NULL, verbose);
if (arg->tok != tok_ident) if (arg->tok != tok_ident)
{ {

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@ -54,7 +54,7 @@ handle_copy (struct linereader *ldfile, struct charmap_t *charmap,
struct token *now; struct token *now;
int warned = 0; int warned = 0;
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != tok_string) if (now->tok != tok_string)
lr_error (ldfile, _("expect string argument for `copy'")); lr_error (ldfile, _("expect string argument for `copy'"));
else if (!ignore_content) 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 /* The rest of the line must be empty and the next keyword must be
`END xxx'. */ `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) && now->tok != tok_eof)
{ {
if (warned == 0) if (warned == 0)
@ -90,7 +90,7 @@ no other keyword shall be specified when `copy' is used"));
if (now->tok != tok_eof) if (now->tok != tok_eof)
{ {
/* Handle `END xxx'. */ /* Handle `END xxx'. */
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL, verbose);
if (now->tok != token) if (now->tok != token)
lr_error (ldfile, _("\ lr_error (ldfile, _("\

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -149,7 +149,7 @@ repertoire_read (const char *filename)
while (1) while (1)
{ {
/* What's on? */ /* 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; enum token_t nowtok = now->tok;
struct token *arg; struct token *arg;
@ -168,7 +168,7 @@ repertoire_read (const char *filename)
if (nowtok == tok_escape_char || nowtok == tok_comment_char) if (nowtok == tok_escape_char || nowtok == tok_comment_char)
{ {
/* We know that we need an argument. */ /* 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) if (arg->tok != tok_ident)
{ {