mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 22:40:05 +00:00
Update.
2000-02-08 Shinya Hanataka <hanataka@abyss.rim.or.jp> * locale/weightwc.h: Fix problem with collating-element. * locale/programs/ld-collate.c (collate_finish): Output wide character collating-symbol, which has no wide strings. * locale/programs/ld-collate.c (collate_output): Fix problem with wide character collating-element.
This commit is contained in:
parent
f9a7302fd1
commit
740c223996
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2000-02-08 Shinya Hanataka <hanataka@abyss.rim.or.jp>
|
||||||
|
|
||||||
|
* locale/weightwc.h: Fix problem with collating-element.
|
||||||
|
|
||||||
|
* locale/programs/ld-collate.c (collate_finish): Output wide
|
||||||
|
character collating-symbol, which has no wide strings.
|
||||||
|
|
||||||
|
* locale/programs/ld-collate.c (collate_output): Fix problem with
|
||||||
|
wide character collating-element.
|
||||||
|
|
||||||
2000-02-09 Andreas Jaeger <aj@suse.de>
|
2000-02-09 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* time/strptime.c (strptime_internal): Fix pointer dereference.
|
* time/strptime.c (strptime_internal): Fix pointer dereference.
|
||||||
|
@ -2329,14 +2329,14 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
if (sizeof (int32_t) == sizeof (int))
|
if (sizeof (int32_t) == sizeof (int))
|
||||||
{
|
{
|
||||||
obstack_int_grow_fast (&extrapool,
|
obstack_int_grow_fast (&extrapool,
|
||||||
obstack_object_size (&indirectpool)
|
-(obstack_object_size (&indirectpool)
|
||||||
/ sizeof (int32_t));
|
/ sizeof (int32_t)));
|
||||||
obstack_int_grow_fast (&extrapool, runp->nwcs - 1);
|
obstack_int_grow_fast (&extrapool, runp->nwcs - 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int32_t i = (obstack_object_size (&indirectpool)
|
int32_t i = -(obstack_object_size (&indirectpool)
|
||||||
/ sizeof (int32_t));
|
/ sizeof (int32_t));
|
||||||
obstack_grow (&extrapool, &i, sizeof (int32_t));
|
obstack_grow (&extrapool, &i, sizeof (int32_t));
|
||||||
i = runp->nwcs - 1;
|
i = runp->nwcs - 1;
|
||||||
obstack_grow (&extrapool, &i, sizeof (int32_t));
|
obstack_grow (&extrapool, &i, sizeof (int32_t));
|
||||||
@ -2367,9 +2367,10 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
{
|
{
|
||||||
weightidx = output_weightwc (&weightpool, collate, curp);
|
weightidx = output_weightwc (&weightpool, collate, curp);
|
||||||
if (sizeof (int32_t) == sizeof (int))
|
if (sizeof (int32_t) == sizeof (int))
|
||||||
obstack_int_grow (&extrapool, weightidx);
|
obstack_int_grow (&indirectpool, weightidx);
|
||||||
else
|
else
|
||||||
obstack_grow (&extrapool, &weightidx, sizeof (int32_t));
|
obstack_grow (&indirectpool, &weightidx,
|
||||||
|
sizeof (int32_t));
|
||||||
|
|
||||||
curp = curp->wclast;
|
curp = curp->wclast;
|
||||||
}
|
}
|
||||||
@ -2384,11 +2385,11 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
|
|||||||
|
|
||||||
/* And add the end byte sequence. Without length this
|
/* And add the end byte sequence. Without length this
|
||||||
time. */
|
time. */
|
||||||
for (i = 1; i < runp->nwcs; ++i)
|
for (i = 1; i < curp->nwcs; ++i)
|
||||||
if (sizeof (int32_t) == sizeof (int))
|
if (sizeof (int32_t) == sizeof (int))
|
||||||
obstack_int_grow (&extrapool, runp->wcs[i]);
|
obstack_int_grow (&extrapool, curp->wcs[i]);
|
||||||
else
|
else
|
||||||
obstack_grow (&extrapool, &runp->wcs[i], sizeof (int32_t));
|
obstack_grow (&extrapool, &curp->wcs[i], sizeof (int32_t));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Written by Ulrich Drepper, <drepper@cygnus.com>.
|
Written by Ulrich Drepper, <drepper@cygnus.com>.
|
||||||
|
|
||||||
@ -51,8 +51,8 @@ findidx (const wint_t **cpp)
|
|||||||
const wint_t *usrc = *cpp;
|
const wint_t *usrc = *cpp;
|
||||||
|
|
||||||
/* The first thing is the index. */
|
/* The first thing is the index. */
|
||||||
i = *((int32_t *) cp);
|
i = cp;
|
||||||
cp += sizeof (int32_t);
|
++cp;
|
||||||
|
|
||||||
/* Next is the length of the byte sequence. These are always
|
/* Next is the length of the byte sequence. These are always
|
||||||
short byte sequences so there is no reason to call any
|
short byte sequences so there is no reason to call any
|
||||||
@ -87,47 +87,36 @@ findidx (const wint_t **cpp)
|
|||||||
/* This is a range of characters. First decide whether the
|
/* This is a range of characters. First decide whether the
|
||||||
current byte sequence lies in the range. */
|
current byte sequence lies in the range. */
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
size_t offset = 0;
|
size_t offset;
|
||||||
|
|
||||||
for (cnt = 0; cnt < nhere; ++cnt)
|
for (cnt = 0; cnt < nhere - 1; ++cnt)
|
||||||
if (cp[cnt] != usrc[cnt])
|
if (cp[cnt] != usrc[cnt])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (cnt != nhere)
|
if (cnt < nhere - 1)
|
||||||
{
|
{
|
||||||
if (cp[cnt] > usrc[cnt])
|
cp += 2 * nhere;
|
||||||
{
|
continue;
|
||||||
/* Cannot be in this range. */
|
|
||||||
cp += 2 * nhere;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Test against the end of the range. */
|
|
||||||
for (cnt = 0; cnt < nhere; ++cnt)
|
|
||||||
if (cp[nhere + cnt] != usrc[cnt])
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (cnt != nhere && cp[nhere + cnt] < usrc[cnt])
|
|
||||||
{
|
|
||||||
/* Cannot be in this range. */
|
|
||||||
cp += 2 * nhere;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This range matches the next characters. Now find
|
|
||||||
the offset in the indirect table. */
|
|
||||||
for (cnt = 0; cp[cnt] == usrc[cnt]; ++cnt);
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
offset <<= 8;
|
|
||||||
offset += usrc[cnt] - cp[cnt];
|
|
||||||
}
|
|
||||||
while (++cnt < nhere);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cp[nhere - 1] > usrc[nhere -1])
|
||||||
|
{
|
||||||
|
cp += 2 * nhere;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cp[2 * nhere - 1] < usrc[nhere -1])
|
||||||
|
{
|
||||||
|
cp += 2 * nhere;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This range matches the next characters. Now find
|
||||||
|
the offset in the indirect table. */
|
||||||
|
offset = usrc[nhere - 1] - cp[nhere - 1];
|
||||||
*cpp += nhere;
|
*cpp += nhere;
|
||||||
return offset;
|
|
||||||
|
return indirect[-i + offset];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user