* sysdeps/generic/dl-environ.c (unsetenv): Rewritten using strncmp,

no longer wrongly matches arbitrary prefixes of NAME.
	Reported by Jakub Jelinek <jakub@redhat.com>.

2002-09-11  Jakub Jelinek  <jakub@redhat.com>

	* posix/bug-regex11.c (tests): New array.
	(main): Rewritten to run more different tests.

	* nscd/Makefile (CPPFLAGS-nscd, CPPFLAGS-nscd_conf, CPPFLAGS-dbg_log)
	(CPPFLAGS-connections, CPPFLAGS-hstcache): Variables removed.
	Instead, catch all of $(nscd-modules) via cppflags-iterator.mk.
This commit is contained in:
Roland McGrath 2002-09-11 22:04:32 +00:00
parent 2c333cf190
commit 0d35c2426d
4 changed files with 81 additions and 46 deletions

View File

@ -1,5 +1,20 @@
2002-09-11 Roland McGrath <roland@redhat.com>
* sysdeps/generic/dl-environ.c (unsetenv): Rewritten using strncmp,
no longer wrongly matches arbitrary prefixes of NAME.
Reported by Jakub Jelinek <jakub@redhat.com>.
2002-09-11 Jakub Jelinek <jakub@redhat.com>
* posix/bug-regex11.c (tests): New array.
(main): Rewritten to run more different tests.
2002-09-10 Roland McGrath <roland@redhat.com> 2002-09-10 Roland McGrath <roland@redhat.com>
* nscd/Makefile (CPPFLAGS-nscd, CPPFLAGS-nscd_conf, CPPFLAGS-dbg_log)
(CPPFLAGS-connections, CPPFLAGS-hstcache): Variables removed.
Instead, catch all of $(nscd-modules) via cppflags-iterator.mk.
* sysdeps/powerpc/fpu/s_isnan.c: Do macro hackery on __GI___isnanf as * sysdeps/powerpc/fpu/s_isnan.c: Do macro hackery on __GI___isnanf as
well so we don't get it declared by include/math.h's hidden_proto. well so we don't get it declared by include/math.h's hidden_proto.
Then do hidden_proto for __isnanf locally so hidden_def works right. Then do hidden_proto for __isnanf locally so hidden_def works right.

View File

@ -53,11 +53,10 @@ distribute := nscd.h nscd-client.h dbg_log.h \
include ../Rules include ../Rules
CPPFLAGS-nscd = -DNOT_IN_libc # This makes sure -DNOT_IN_libc is passed for all these modules.
CPPFLAGS-nscd_conf = -DNOT_IN_libc cpp-srcs-left := $(nscd-modules:=.c)
CPPFLAGS-dbg_log = -DNOT_IN_libc lib := nscd
CPPFLAGS-connections = -DNOT_IN_libc include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
CPPFLAGS-hstcache = -DNOT_IN_libc
$(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o) $(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o)
$(objpfx)nscd_nischeck: $(objpfx)nscd_nischeck.o $(objpfx)nscd_nischeck: $(objpfx)nscd_nischeck.o

View File

@ -1,4 +1,4 @@
/* Test for newline handling in regex. /* Regular expression tests.
Copyright (C) 2002 Free Software Foundation, Inc. Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -24,37 +24,65 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
struct
{
const char *pattern;
const char *string;
int nmatch;
regmatch_t rm[4];
} tests[] = {
/* Test for newline handling in regex. */
{ "[^~]*~", "\nx~y", 2, { { 0, 3 }, { -1, -1 } } },
/* Other tests. */
{ ".*|\\([KIO]\\)\\([^|]*\\).*|?[KIO]", "10~.~|P|K0|I10|O16|?KSb", 3,
{ { 0, 21 }, { 15, 16 }, { 16, 18 } } },
{ ".*|\\([KIO]\\)\\([^|]*\\).*|?\\1", "10~.~|P|K0|I10|O16|?KSb", 3,
{ { 0, 21 }, { 8, 9 }, { 9, 10 } } }
};
int int
main (void) main (void)
{ {
regex_t re; regex_t re;
regmatch_t rm[2]; regmatch_t rm[4];
int n; int n, i, ret = 0;
mtrace (); mtrace ();
n = regcomp (&re, "[^~]*~", 0); for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
if (n != 0)
{ {
char buf[500]; n = regcomp (&re, tests[i].pattern, 0);
regerror (n, &re, buf, sizeof (buf)); if (n != 0)
printf ("regcomp failed: %s\n", buf); {
exit (1); char buf[500];
} regerror (n, &re, buf, sizeof (buf));
printf ("regcomp %d failed: %s\n", i, buf);
ret = 1;
continue;
}
if (regexec (&re, "\nx~y", 2, rm, 0)) if (regexec (&re, tests[i].string, tests[i].nmatch, rm, 0))
{ {
puts ("regexec failed"); printf ("regexec %d failed\n", i);
exit (2); ret = 1;
} regfree (&re);
if (rm[0].rm_so != 0 || rm[0].rm_eo != 3) continue;
{ }
printf ("regexec match failure: %d %d\n",
rm[0].rm_so, rm[0].rm_eo);
exit (3);
}
regfree (&re); for (n = 0; n < tests[i].nmatch; ++n)
if (rm[n].rm_so != tests[i].rm[n].rm_so
|| rm[n].rm_eo != tests[i].rm[n].rm_eo)
{
if (tests[i].rm[n].rm_so == -1 && tests[i].rm[n].rm_eo == -1)
break;
printf ("regexec match failure rm[%d] %d..%d\n",
n, rm[n].rm_so, rm[n].rm_eo);
ret = 1;
break;
}
regfree (&re);
}
return 0; return 0;
} }

View File

@ -57,30 +57,23 @@ extern char **__environ attribute_hidden;
int int
unsetenv (const char *name) unsetenv (const char *name)
{ {
const size_t len = strlen (name);
char **ep; char **ep;
ep = __environ; ep = __environ;
while (*ep != NULL) while (*ep != NULL)
{ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
size_t cnt = 0; {
/* Found it. Remove this pointer by moving later ones back. */
char **dp = ep;
while ((*ep)[cnt] == name[cnt] && name[cnt] != '\0') do
++cnt; dp[0] = dp[1];
while (*dp++);
if ((*ep)[cnt] == '=') /* Continue the loop in case NAME appears again. */
{ }
/* Found it. Remove this pointer by moving later ones to else
the front. */ ++ep;
char **dp = ep;
do
dp[0] = dp[1];
while (*dp++);
/* Continue the loop in case NAME appears again. */
}
else
++ep;
}
return 0; return 0;
} }