mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-18 12:16:13 +08:00
Update.
2000-01-17 Ulrich Drepper <drepper@cygnus.com> * locale/programs/repertoire.c (repertoire_read): Don't print error message when repertoire map is missing. (repertoire_complain): Print error message for missing map, but only once. * locale/programs/repertoire.h (repertoire_complain): Add prototype. * locale/programs/linereader.c (get_string): Prefer getting names from charseq entries. Try finding Uxxxxxxxx names in charmap before trying to map from repertoire.
This commit is contained in:
parent
ebf282c9cf
commit
3c83337805
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
||||
2000-01-17 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* locale/programs/repertoire.c (repertoire_read): Don't print
|
||||
error message when repertoire map is missing.
|
||||
(repertoire_complain): Print error message for missing map, but only
|
||||
once.
|
||||
* locale/programs/repertoire.h (repertoire_complain): Add prototype.
|
||||
|
||||
* locale/programs/linereader.c (get_string): Prefer getting names
|
||||
from charseq entries. Try finding Uxxxxxxxx names in charmap
|
||||
before trying to map from repertoire.
|
||||
|
||||
2000-01-16 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/i386/getgroups.c: Fix missing brace
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
|
||||
|
||||
@ -1514,7 +1514,7 @@ collate_finish (struct localedef_t *locale, struct charmap_t *charmap)
|
||||
to symbols with the same byte sequence. It is
|
||||
of course an error. */
|
||||
error_at_line (0, 0, (*eptr)->file, (*eptr)->line,
|
||||
_("symbol `%s' has same encoding as"),
|
||||
_("symbol `%s' has the same encoding as"),
|
||||
(*eptr)->name);
|
||||
error_at_line (0, 0, runp->file, runp->line,
|
||||
_("symbol `%s'"), runp->name);
|
||||
@ -1691,7 +1691,7 @@ Computing table size for collation table might take a while..."),
|
||||
to symbols with the same byte sequence. It is
|
||||
of course an error. */
|
||||
error_at_line (0, 0, (*eptr)->file, (*eptr)->line,
|
||||
_("symbol `%s' has same encoding as"),
|
||||
_("symbol `%s' has the same encoding as"),
|
||||
(*eptr)->name);
|
||||
error_at_line (0, 0, runp->file, runp->line,
|
||||
_("symbol `%s'"), runp->name);
|
||||
|
@ -154,7 +154,6 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result,
|
||||
struct charmap_t *charmap, const char *repertoire_name,
|
||||
int ignore_content)
|
||||
{
|
||||
struct repertoire_t *repertoire = NULL;
|
||||
struct locale_measurement_t *measurement;
|
||||
struct token *now;
|
||||
struct token *arg;
|
||||
|
@ -651,6 +651,7 @@ non-symbolic character value should not be used"));
|
||||
|
||||
if (cp == &buf[bufact])
|
||||
{
|
||||
char utmp[10];
|
||||
const char *symbol = NULL;
|
||||
|
||||
/* Yes, it is. */
|
||||
@ -663,49 +664,80 @@ non-symbolic character value should not be used"));
|
||||
if (return_widestr)
|
||||
ADDWC (wch);
|
||||
|
||||
/* Now determine from the repertoire the name of the
|
||||
character and find it in the charmap. */
|
||||
if (repertoire != NULL)
|
||||
symbol = repertoire_find_symbol (repertoire, wch);
|
||||
/* See whether the charmap contains the Uxxxxxxxx names. */
|
||||
snprintf (utmp, sizeof (utmp), "U%08X", wch);
|
||||
seq = charmap_find_value (charmap, utmp, 9);
|
||||
|
||||
if (symbol == NULL)
|
||||
if (seq == NULL)
|
||||
{
|
||||
/* We cannot generate a string since we cannot map
|
||||
from the Unicode number to the character symbol. */
|
||||
lr_error (lr,
|
||||
_("character <U%0*X> not in repertoire map"),
|
||||
wch > 0xffff ? 8 : 4, wch);
|
||||
/* No, this isn't the case. Now determine from
|
||||
the repertoire the name of the character and
|
||||
find it in the charmap. */
|
||||
if (repertoire != NULL)
|
||||
symbol = repertoire_find_symbol (repertoire, wch);
|
||||
|
||||
illegal_string = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
seq = charmap_find_value (charmap, symbol,
|
||||
strlen (symbol));
|
||||
|
||||
if (seq == NULL)
|
||||
if (symbol == NULL)
|
||||
{
|
||||
/* Not a known name. */
|
||||
lr_error (lr,
|
||||
_("symbol `%s' not in charmap"), symbol);
|
||||
/* We cannot generate a string since we
|
||||
cannot map from the Unicode number to the
|
||||
character symbol. */
|
||||
lr_error (lr, _("\
|
||||
character <U%0*X> not in repertoire map"),
|
||||
wch > 0xffff ? 8 : 4, wch);
|
||||
|
||||
illegal_string = 1;
|
||||
}
|
||||
else
|
||||
ADDS (seq->bytes, seq->nbytes);
|
||||
{
|
||||
seq = charmap_find_value (charmap, symbol,
|
||||
strlen (symbol));
|
||||
|
||||
if (seq == NULL)
|
||||
{
|
||||
/* Not a known name. */
|
||||
lr_error (lr,
|
||||
_("symbol `%s' not in charmap"),
|
||||
symbol);
|
||||
illegal_string = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (seq != NULL)
|
||||
ADDS (seq->bytes, seq->nbytes);
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* We now have the symbolic name in buf[startidx] to
|
||||
buf[bufact-1]. Now find out the value for this character
|
||||
in the charmap as well as in the repertoire map (in this
|
||||
order). */
|
||||
seq = charmap_find_value (charmap, &buf[startidx],
|
||||
bufact - startidx);
|
||||
|
||||
if (seq == NULL)
|
||||
{
|
||||
/* This name is not in the charmap. */
|
||||
lr_error (lr, _("symbol `%.*s' not in charmap"),
|
||||
(int) (bufact - startidx), &buf[startidx]);
|
||||
illegal_string = 1;
|
||||
}
|
||||
|
||||
if (return_widestr)
|
||||
{
|
||||
/* We now have the symbolic name in buf[startidx] to
|
||||
buf[bufact-1]. Now find out the value for this
|
||||
character in the repertoire map as well as in the
|
||||
charmap (in this order). */
|
||||
wch = repertoire_find_value (repertoire, &buf[startidx],
|
||||
bufact - startidx);
|
||||
/* Now the same for the multibyte representation. */
|
||||
if (seq != NULL && seq->ucs4 != UNINITIALIZED_CHAR_VALUE)
|
||||
wch = seq->ucs4;
|
||||
else
|
||||
{
|
||||
wch = repertoire_find_value (repertoire, &buf[startidx],
|
||||
bufact - startidx);
|
||||
if (seq != NULL)
|
||||
seq->ucs4 = wch;
|
||||
}
|
||||
|
||||
if (wch == ILLEGAL_CHAR_VALUE)
|
||||
{
|
||||
/* This name is not in the repertoire map. */
|
||||
@ -717,27 +749,12 @@ non-symbolic character value should not be used"));
|
||||
ADDWC (wch);
|
||||
}
|
||||
|
||||
/* Now the same for the multibyte representation. */
|
||||
seq = charmap_find_value (charmap, &buf[startidx],
|
||||
bufact - startidx);
|
||||
/* Now forget about the name we just added. */
|
||||
bufact = startidx;
|
||||
|
||||
if (seq == NULL)
|
||||
{
|
||||
/* This name is not in the charmap. */
|
||||
lr_error (lr, _("symbol `%.*s' not in charmap"),
|
||||
(int) (bufact - startidx), &buf[startidx]);
|
||||
illegal_string = 1;
|
||||
|
||||
/* Now forget about the name we just added. */
|
||||
bufact = startidx;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Now forget about the name we just added. */
|
||||
bufact = startidx;
|
||||
|
||||
ADDS (seq->bytes, seq->nbytes);
|
||||
}
|
||||
/* And copy the bytes. */
|
||||
if (seq != NULL)
|
||||
ADDS (seq->bytes, seq->nbytes);
|
||||
}
|
||||
|
||||
if (ch == '\n' || ch == EOF)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
@ -49,6 +49,10 @@ static int repertoire_compare (const void *p1, const void *p2);
|
||||
/* Already known repertoire maps. */
|
||||
static void *known;
|
||||
|
||||
/* List of repertoire maps which are not available and which have been
|
||||
reported to not be. */
|
||||
static void *unavailable;
|
||||
|
||||
|
||||
struct repertoire_t *
|
||||
repertoire_read (const char *filename)
|
||||
@ -115,10 +119,7 @@ repertoire_read (const char *filename)
|
||||
}
|
||||
|
||||
if (repfile == NULL)
|
||||
{
|
||||
error (0, errno, _("repertoire map file `%s' not found"), filename);
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* We don't want symbolic names in string to be translated. */
|
||||
@ -333,6 +334,19 @@ argument to <%s> must be a single character"),
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
repertoire_complain (const char *name)
|
||||
{
|
||||
if (tfind (name, &unavailable, (__compar_fn_t) strcmp) == NULL)
|
||||
{
|
||||
error (0, errno, _("repertoire map file `%s' not found"), name);
|
||||
|
||||
/* Remember that we reported this map. */
|
||||
tsearch (name, &unavailable, (__compar_fn_t) strcmp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
repertoire_compare (const void *p1, const void *p2)
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
@ -48,6 +48,9 @@ struct repertoire_t
|
||||
/* Prototypes for repertoire map handling functions. */
|
||||
extern struct repertoire_t *repertoire_read (const char *filename);
|
||||
|
||||
/* Report missing repertoire map. */
|
||||
extern void repertoire_complain (const char *name);
|
||||
|
||||
/* Return UCS4 value of character with given NAME. */
|
||||
extern uint32_t repertoire_find_value (const struct repertoire_t *repertoire,
|
||||
const char *name, size_t len);
|
||||
|
Loading…
Reference in New Issue
Block a user