mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-29 00:01:12 +00:00
* 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:
parent
2c333cf190
commit
0d35c2426d
15
ChangeLog
15
ChangeLog
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user