* manual/getopt.texi (Using the getopt function): Fix description of
	return value for format string starting with '-' (PR libc/1551).
	Patch by Ral Nez de Arenas Coronado <dervishd@jazzfree.com>

	* sunrpc/clnt_perr.c (rpc_errlist): Fix index for RPC_PROGVERSMISMATCH.
	Patch by jens.moeller@westgeo.com (PR libc/1550).

	* locale/programs/ld-collate.c (struct element_t): Add wclast
	and compute it where necessary.
	(collate_output): Insert indirect references in the right order.
This commit is contained in:
Ulrich Drepper 2000-01-21 05:18:41 +00:00
parent 9861985faf
commit 0b9fbf003a
6 changed files with 58 additions and 29 deletions

View File

@ -1,5 +1,16 @@
2000-01-20 Ulrich Drepper <drepper@cygnus.com> 2000-01-20 Ulrich Drepper <drepper@cygnus.com>
* manual/getopt.texi (Using the getopt function): Fix description of
return value for format string starting with '-' (PR libc/1551).
Patch by Raúl Núñez de Arenas Coronado <dervishd@jazzfree.com>
* sunrpc/clnt_perr.c (rpc_errlist): Fix index for RPC_PROGVERSMISMATCH.
Patch by jens.moeller@westgeo.com (PR libc/1550).
* locale/programs/ld-collate.c (struct element_t): Add wclast
and compute it where necessary.
(collate_output): Insert indirect references in the right order.
* math/Makefile (tests): Add test-misc. * math/Makefile (tests): Add test-misc.
* math/test-misc.c: New file. * math/test-misc.c: New file.

View File

@ -1,3 +1,7 @@
2000-01-20 Andreas Jaeger <aj@suse.de>
* td_thr_getgregs.c (td_thr_getgregs): Fix typo.
2000-01-19 Ulrich Drepper <drepper@cygnus.com> 2000-01-19 Ulrich Drepper <drepper@cygnus.com>
* td_thr_getgregs.c: Correct size parameter of memset call. * td_thr_getgregs.c: Correct size parameter of memset call.

View File

@ -35,7 +35,7 @@ td_thr_getgregs (const td_thrhandle_t *th, prgregset_t gregs)
/* If the thread already terminated we return all zeroes. */ /* If the thread already terminated we return all zeroes. */
if (pds.p_terminated) if (pds.p_terminated)
memset (gregs, '\0', sizeof (prgrepset_t)); memset (gregs, '\0', sizeof (prgregset_t));
/* Otherwise get the register content through the callback. */ /* Otherwise get the register content through the callback. */
else if (ps_lgetregs (th->th_ta_p->ph, pds.p_pid, gregs) != PS_OK) else if (ps_lgetregs (th->th_ta_p->ph, pds.p_pid, gregs) != PS_OK)
return TD_ERR; return TD_ERR;

View File

@ -112,6 +112,7 @@ struct element_t
/* Next element in wide character output list. */ /* Next element in wide character output list. */
struct element_t *wcnext; struct element_t *wcnext;
struct element_t *wclast;
}; };
/* Special element value. */ /* Special element value. */
@ -1669,6 +1670,7 @@ Computing table size for collation table might take a while..."),
if (runp->wcs != NULL) if (runp->wcs != NULL)
{ {
struct element_t **eptr; struct element_t **eptr;
struct element_t *lastp = NULL;
size_t idx; size_t idx;
/* Find a free index. */ /* Find a free index. */
@ -1712,11 +1714,15 @@ Computing table size for collation table might take a while..."),
} }
/* To the next entry. */ /* To the next entry. */
lastp = *eptr;
eptr = &(*eptr)->wcnext; eptr = &(*eptr)->wcnext;
} }
/* Set the pointers. */ /* Set the pointers. */
runp->wcnext = *eptr; runp->wcnext = *eptr;
runp->wclast = lastp;
if (*eptr != NULL)
(*eptr)->wclast = runp;
*eptr = runp; *eptr = runp;
dont_insertwc: dont_insertwc:
} }
@ -2286,19 +2292,18 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
int32_t weightidx; int32_t weightidx;
int added; int added;
/* Output the weight info. */
weightidx = output_weightwc (&weightpool, collate, runp);
/* Find out wether this is a single entry or we have more than /* Find out wether this is a single entry or we have more than
one consecutive entry. */ one consecutive entry. */
if (runp->wcnext != NULL if (runp->wcnext != NULL
&& runp->nwcs == runp->wcnext->nwcs && runp->nwcs == runp->wcnext->nwcs
&& wmemcmp ((wchar_t *) runp->wcs, && wmemcmp ((wchar_t *) runp->wcs,
(wchar_t *)runp->wcnext->wcs, runp->nwcs - 1) == 0 (wchar_t *)runp->wcnext->wcs, runp->nwcs - 1) == 0
&& (runp->wcs[runp->nwcs - 1] + 1 && (runp->wcs[runp->nwcs - 1]
== runp->wcnext->wcs[runp->nwcs - 1])) == runp->wcnext->wcs[runp->nwcs - 1] + 1))
{ {
int i; int i;
struct element_t *series_startp = runp;
struct element_t *curp;
/* Now add first the initial byte sequence. */ /* Now add first the initial byte sequence. */
added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t); added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t);
@ -2322,34 +2327,46 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
i = runp->nwcs - 1; i = runp->nwcs - 1;
obstack_grow (&extrapool, &i, sizeof (int32_t)); obstack_grow (&extrapool, &i, sizeof (int32_t));
} }
do
runp = runp->wcnext;
while (runp->wcnext != NULL
&& runp->nwcs == runp->wcnext->nwcs
&& wmemcmp ((wchar_t *) runp->wcs,
(wchar_t *)runp->wcnext->wcs,
runp->nwcs - 1) == 0
&& (runp->wcs[runp->nwcs - 1]
== runp->wcnext->wcs[runp->nwcs - 1] + 1));
/* Now walk backward from here to the beginning. */
curp = runp;
for (i = 1; i < runp->nwcs; ++i) for (i = 1; i < runp->nwcs; ++i)
if (sizeof (int32_t) == sizeof (int)) if (sizeof (int32_t) == sizeof (int))
obstack_int_grow_fast (&extrapool, runp->wcs[i]); obstack_int_grow_fast (&extrapool, curp->wcs[i]);
else else
obstack_grow (&extrapool, &runp->wcs[i], sizeof (int32_t)); obstack_grow (&extrapool, &curp->wcs[i], sizeof (int32_t));
/* Now find the end of the consecutive sequence and /* Now find the end of the consecutive sequence and
add all the indeces in the indirect pool. */ add all the indeces in the indirect pool. */
while (1) do
{ {
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 (&extrapool, weightidx);
else else
obstack_grow (&extrapool, &weightidx, sizeof (int32_t)); obstack_grow (&extrapool, &weightidx, sizeof (int32_t));
runp = runp->next; curp = curp->wclast;
if (runp->wcnext == NULL
|| runp->nwcs != runp->wcnext->nwcs
|| wmemcmp ((wchar_t *) runp->wcs,
(wchar_t *) runp->wcnext->wcs,
runp->nwcs - 1) != 0
|| (runp->wcs[runp->nwcs - 1] + 1
!= runp->wcnext->wcs[runp->nwcs - 1]))
break;
/* Insert the weight. */
weightidx = output_weightwc (&weightpool, collate, runp);
} }
while (curp != series_startp);
/* Add the final weight. */
weightidx = output_weightwc (&weightpool, collate, curp);
if (sizeof (int32_t) == sizeof (int))
obstack_int_grow (&indirectpool, weightidx);
else
obstack_grow (&indirectpool, &weightidx, sizeof (int32_t));
/* And add the end byte sequence. Without length this /* And add the end byte sequence. Without length this
time. */ time. */
@ -2358,12 +2375,6 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
obstack_int_grow (&extrapool, runp->wcs[i]); obstack_int_grow (&extrapool, runp->wcs[i]);
else else
obstack_grow (&extrapool, &runp->wcs[i], sizeof (int32_t)); obstack_grow (&extrapool, &runp->wcs[i], sizeof (int32_t));
weightidx = output_weightwc (&weightpool, collate, runp);
if (sizeof (int32_t) == sizeof (int))
obstack_int_grow (&extrapool, weightidx);
else
obstack_grow (&extrapool, &weightidx, sizeof (int32_t));
} }
else else
{ {
@ -2372,6 +2383,9 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
tested for). */ tested for). */
int i; int i;
/* Output the weight info. */
weightidx = output_weightwc (&weightpool, collate, runp);
added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t);
if (sizeof (int) == sizeof (int32_t)) if (sizeof (int) == sizeof (int32_t))
obstack_make_room (&extrapool, added); obstack_make_room (&extrapool, added);

View File

@ -85,7 +85,7 @@ written to expect this.
@item @item
If the @var{options} argument string begins with a hyphen (@samp{-}), this If the @var{options} argument string begins with a hyphen (@samp{-}), this
is treated specially. It permits arguments that are not options to be is treated specially. It permits arguments that are not options to be
returned as if they were associated with option character @samp{\0}. returned as if they were associated with option character @samp{\1}.
@item @item
POSIX demands the following behaviour: The first non-option stops option POSIX demands the following behaviour: The first non-option stops option

View File

@ -241,7 +241,7 @@ static const struct rpc_errtab rpc_errlist[] =
{ RPC_VERSMISMATCH, RPC_VERSMISMATCH_IDX }, { RPC_VERSMISMATCH, RPC_VERSMISMATCH_IDX },
{ RPC_AUTHERROR, RPC_AUTHERROR_IDX }, { RPC_AUTHERROR, RPC_AUTHERROR_IDX },
{ RPC_PROGUNAVAIL, RPC_PROGUNAVAIL_IDX }, { RPC_PROGUNAVAIL, RPC_PROGUNAVAIL_IDX },
{ RPC_PROGVERSMISMATCH, RPC_PROGVERSMISMATCH }, { RPC_PROGVERSMISMATCH, RPC_PROGVERSMISMATCH_IDX },
{ RPC_PROCUNAVAIL, RPC_PROCUNAVAIL_IDX }, { RPC_PROCUNAVAIL, RPC_PROCUNAVAIL_IDX },
{ RPC_CANTDECODEARGS, RPC_CANTDECODEARGS_IDX }, { RPC_CANTDECODEARGS, RPC_CANTDECODEARGS_IDX },
{ RPC_SYSTEMERROR, RPC_SYSTEMERROR_IDX }, { RPC_SYSTEMERROR, RPC_SYSTEMERROR_IDX },