aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--linuxthreads_db/ChangeLog4
-rw-r--r--linuxthreads_db/td_thr_getgregs.c2
-rw-r--r--locale/programs/ld-collate.c66
-rw-r--r--manual/getopt.texi2
-rw-r--r--sunrpc/clnt_perr.c2
6 files changed, 58 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 6bd4c821ec..8f144c4bb4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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/test-misc.c: New file.
diff --git a/linuxthreads_db/ChangeLog b/linuxthreads_db/ChangeLog
index 72f8fc466e..3c182ea2cc 100644
--- a/linuxthreads_db/ChangeLog
+++ b/linuxthreads_db/ChangeLog
@@ -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>
* 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 c485686afd..a4d861970e 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 bd07f70612..226bf23b4a 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 aefb034566..f388c99394 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 7896499f82..ba95d07ce8 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 },