Avoid re-exec-self in bug-setlocale1.

This commit is contained in:
Roland McGrath 2015-03-05 12:58:49 -08:00
parent 209826bcf2
commit 9162c01d09
6 changed files with 32 additions and 43 deletions

View File

@ -1,3 +1,10 @@
2015-03-05 Roland McGrath <roland@hack.frob.com>
* Makeconfig (test-wrapper-env-only): New variable.
* Rules (make-test-out): If variable $*-ENV-only is nonempty,
then use that with $(test-wrapper-env-only) rather than using
$(test-wrapper-env) $(run-program-env) $($*-ENV).
2015-03-05 H.J. Lu <hongjiu.lu@intel.com> 2015-03-05 H.J. Lu <hongjiu.lu@intel.com>
[BZ #18082] [BZ #18082]

View File

@ -611,6 +611,11 @@ endif
ifndef test-wrapper-env ifndef test-wrapper-env
test-wrapper-env = $(test-wrapper) env test-wrapper-env = $(test-wrapper) env
endif endif
# Likewise, but the program's environment will be empty except for any
# explicit <variable>=<value> assignments preceding the program name.
ifndef test-wrapper-env-only
test-wrapper-env-only = $(test-wrapper) env -i
endif
# Whether to run test programs built for the library's host system. # Whether to run test programs built for the library's host system.
ifndef run-built-tests ifndef run-built-tests

8
Rules
View File

@ -186,9 +186,11 @@ ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
# These are the implicit rules for making test outputs # These are the implicit rules for making test outputs
# from the test programs and whatever input files are present. # from the test programs and whatever input files are present.
make-test-out = $(test-wrapper-env) \ define make-test-out
$(run-program-env) \ $(if $($*-ENV-only),$(test-wrapper-env-only) $($*-ENV-only),\
$($*-ENV) $(host-test-program-cmd) $($*-ARGS) $(test-wrapper-env) $(run-program-env) $($*-ENV)) \
$(host-test-program-cmd) $($*-ARGS)
endef
$(objpfx)%.out: %.input $(objpfx)% $(objpfx)%.out: %.input $(objpfx)%
$(make-test-out) > $@ < $(word 1,$^); \ $(make-test-out) > $@ < $(word 1,$^); \
$(evaluate-test) $(evaluate-test)

View File

@ -1,3 +1,14 @@
2015-03-04 Roland McGrath <roland@hack.frob.com>
* bug-setlocale1.c (do_test): Remove argument handling and
self-exec'ing logic. Just expect to be run with the right
variables (and nothing else) directly in the environment instead.
(TEST_FUNCTION): Don't pass arguments to do_test.
* Makefile (bug-setlocale1-ARGS, bug-setlocale1-static-ARGS):
Variables removed.
(bug-setlocale1-ENV-only, bug-setlocale1-static-ENV-only):
New variables.
2015-02-23 Alexandre Oliva <aoliva@redhat.com> 2015-02-23 Alexandre Oliva <aoliva@redhat.com>
* unicode-gen/ctype_compatibility.py: Use date ranges in * unicode-gen/ctype_compatibility.py: Use date ranges in

View File

@ -237,8 +237,8 @@ $(objpfx)mtrace-tst-leaks.out: $(objpfx)tst-leaks.out
$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@; \ $(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@; \
$(evaluate-test) $(evaluate-test)
bug-setlocale1-ARGS = -- $(host-test-program-cmd) bug-setlocale1-ENV-only = LOCPATH=$(objpfx) LC_CTYPE=de_DE.UTF-8
bug-setlocale1-static-ARGS = $(bug-setlocale1-ARGS) bug-setlocale1-static-ENV-only = $(bug-setlocale1-ENV-only)
$(objdir)/iconvdata/gconv-modules: $(objdir)/iconvdata/gconv-modules:
$(MAKE) -C ../iconvdata subdir=iconvdata $@ $(MAKE) -C ../iconvdata subdir=iconvdata $@

View File

@ -7,44 +7,8 @@
static int static int
do_test (int argc, char *argv[]) do_test (void)
{ {
if (argc > 1)
{
char *newargv[5];
int i;
if (argc != 2 && argc != 5)
{
printf ("wrong number of arguments (%d)\n", argc);
return 1;
}
for (i = 0; i < (argc == 5 ? 4 : 1); i++)
newargv[i] = argv[i + 1];
newargv[i] = NULL;
char *env[3];
env[0] = (char *) "LC_CTYPE=de_DE.UTF-8";
char *loc = getenv ("LOCPATH");
if (loc == NULL || loc[0] == '\0')
{
puts ("LOCPATH not set");
return 1;
}
asprintf (&env[1], "LOCPATH=%s", loc);
if (env[1] == NULL)
{
puts ("asprintf failed");
return 1;
}
env[2] = NULL;
execve (newargv[0], newargv, env);
puts ("execve returned");
return 1;
}
int result = 0; int result = 0;
char *a = setlocale (LC_ALL, ""); char *a = setlocale (LC_ALL, "");
@ -128,5 +92,5 @@ do_test (int argc, char *argv[])
return result; return result;
} }
#define TEST_FUNCTION do_test (argc, argv) #define TEST_FUNCTION do_test ()
#include "../test-skeleton.c" #include "../test-skeleton.c"