From 0b9fbf003af00a2a22164333bbe709aa9abbcdc9 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 21 Jan 2000 05:18:41 +0000 Subject: [PATCH] Update. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * 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 * 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. --- ChangeLog | 11 +++++++ linuxthreads_db/ChangeLog | 4 +++ linuxthreads_db/td_thr_getgregs.c | 2 +- locale/programs/ld-collate.c | 66 ++++++++++++++++++++++++--------------- manual/getopt.texi | 2 +- sunrpc/clnt_perr.c | 2 +- 6 files changed, 58 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6bd4c82..8f144c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2000-01-20 Ulrich Drepper + * 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 + + * 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/test-misc.c: New file. diff --git a/linuxthreads_db/ChangeLog b/linuxthreads_db/ChangeLog index 72f8fc4..3c182ea 100644 --- a/linuxthreads_db/ChangeLog +++ b/linuxthreads_db/ChangeLog @@ -1,3 +1,7 @@ +2000-01-20 Andreas Jaeger + + * td_thr_getgregs.c (td_thr_getgregs): Fix typo. + 2000-01-19 Ulrich Drepper * td_thr_getgregs.c: Correct size parameter of memset call. diff --git a/linuxthreads_db/td_thr_getgregs.c b/linuxthreads_db/td_thr_getgregs.c index c485686..a4d8619 100644 --- a/linuxthreads_db/td_thr_getgregs.c +++ b/linuxthreads_db/td_thr_getgregs.c @@ -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 (pds.p_terminated) - memset (gregs, '\0', sizeof (prgrepset_t)); + memset (gregs, '\0', sizeof (prgregset_t)); /* Otherwise get the register content through the callback. */ else if (ps_lgetregs (th->th_ta_p->ph, pds.p_pid, gregs) != PS_OK) return TD_ERR; diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index bd07f70..226bf23 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -112,6 +112,7 @@ struct element_t /* Next element in wide character output list. */ struct element_t *wcnext; + struct element_t *wclast; }; /* Special element value. */ @@ -1669,6 +1670,7 @@ Computing table size for collation table might take a while..."), if (runp->wcs != NULL) { struct element_t **eptr; + struct element_t *lastp = NULL; size_t idx; /* Find a free index. */ @@ -1712,11 +1714,15 @@ Computing table size for collation table might take a while..."), } /* To the next entry. */ + lastp = *eptr; eptr = &(*eptr)->wcnext; } /* Set the pointers. */ runp->wcnext = *eptr; + runp->wclast = lastp; + if (*eptr != NULL) + (*eptr)->wclast = runp; *eptr = runp; dont_insertwc: } @@ -2286,19 +2292,18 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, int32_t weightidx; 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 one consecutive entry. */ 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])) + && (runp->wcs[runp->nwcs - 1] + == runp->wcnext->wcs[runp->nwcs - 1] + 1)) { int i; + struct element_t *series_startp = runp; + struct element_t *curp; /* Now add first the initial byte sequence. */ 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; 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) if (sizeof (int32_t) == sizeof (int)) - obstack_int_grow_fast (&extrapool, runp->wcs[i]); + obstack_int_grow_fast (&extrapool, curp->wcs[i]); 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 add all the indeces in the indirect pool. */ - while (1) + do { + weightidx = output_weightwc (&weightpool, collate, curp); if (sizeof (int32_t) == sizeof (int)) obstack_int_grow (&extrapool, weightidx); else obstack_grow (&extrapool, &weightidx, sizeof (int32_t)); - runp = runp->next; - 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); + curp = curp->wclast; } + 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 time. */ @@ -2358,12 +2375,6 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, obstack_int_grow (&extrapool, runp->wcs[i]); else 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 { @@ -2372,6 +2383,9 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, tested for). */ int i; + /* Output the weight info. */ + weightidx = output_weightwc (&weightpool, collate, runp); + added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); if (sizeof (int) == sizeof (int32_t)) obstack_make_room (&extrapool, added); diff --git a/manual/getopt.texi b/manual/getopt.texi index aefb034..f388c99 100644 --- a/manual/getopt.texi +++ b/manual/getopt.texi @@ -85,7 +85,7 @@ written to expect this. @item If the @var{options} argument string begins with a hyphen (@samp{-}), this 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 POSIX demands the following behaviour: The first non-option stops option diff --git a/sunrpc/clnt_perr.c b/sunrpc/clnt_perr.c index 7896499..ba95d07 100644 --- a/sunrpc/clnt_perr.c +++ b/sunrpc/clnt_perr.c @@ -241,7 +241,7 @@ static const struct rpc_errtab rpc_errlist[] = { RPC_VERSMISMATCH, RPC_VERSMISMATCH_IDX }, { RPC_AUTHERROR, RPC_AUTHERROR_IDX }, { RPC_PROGUNAVAIL, RPC_PROGUNAVAIL_IDX }, - { RPC_PROGVERSMISMATCH, RPC_PROGVERSMISMATCH }, + { RPC_PROGVERSMISMATCH, RPC_PROGVERSMISMATCH_IDX }, { RPC_PROCUNAVAIL, RPC_PROCUNAVAIL_IDX }, { RPC_CANTDECODEARGS, RPC_CANTDECODEARGS_IDX }, { RPC_SYSTEMERROR, RPC_SYSTEMERROR_IDX }, -- 2.7.4