From 9162c01d09c327ae2e7c3a5148307e8018792c51 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 5 Mar 2015 12:58:49 -0800 Subject: [PATCH] Avoid re-exec-self in bug-setlocale1. --- ChangeLog | 7 +++++++ Makeconfig | 5 +++++ Rules | 8 +++++--- localedata/ChangeLog | 11 ++++++++++ localedata/Makefile | 4 ++-- localedata/bug-setlocale1.c | 40 ++----------------------------------- 6 files changed, 32 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2a2c866d0b..b9cf4583b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-03-05 Roland McGrath + + * 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 [BZ #18082] diff --git a/Makeconfig b/Makeconfig index 509b5bd3df..4e336a4ed8 100644 --- a/Makeconfig +++ b/Makeconfig @@ -611,6 +611,11 @@ endif ifndef test-wrapper-env test-wrapper-env = $(test-wrapper) env endif +# Likewise, but the program's environment will be empty except for any +# explicit = 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. ifndef run-built-tests diff --git a/Rules b/Rules index cb4e1fb767..829beac487 100644 --- a/Rules +++ b/Rules @@ -186,9 +186,11 @@ ifneq "$(strip $(tests) $(xtests) $(test-srcs))" "" # These are the implicit rules for making test outputs # from the test programs and whatever input files are present. -make-test-out = $(test-wrapper-env) \ - $(run-program-env) \ - $($*-ENV) $(host-test-program-cmd) $($*-ARGS) +define make-test-out +$(if $($*-ENV-only),$(test-wrapper-env-only) $($*-ENV-only),\ + $(test-wrapper-env) $(run-program-env) $($*-ENV)) \ +$(host-test-program-cmd) $($*-ARGS) +endef $(objpfx)%.out: %.input $(objpfx)% $(make-test-out) > $@ < $(word 1,$^); \ $(evaluate-test) diff --git a/localedata/ChangeLog b/localedata/ChangeLog index ceb373f1be..61857f57a2 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,14 @@ +2015-03-04 Roland McGrath + + * 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 * unicode-gen/ctype_compatibility.py: Use date ranges in diff --git a/localedata/Makefile b/localedata/Makefile index d1218f5784..0f67725800 100644 --- a/localedata/Makefile +++ b/localedata/Makefile @@ -237,8 +237,8 @@ $(objpfx)mtrace-tst-leaks.out: $(objpfx)tst-leaks.out $(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@; \ $(evaluate-test) -bug-setlocale1-ARGS = -- $(host-test-program-cmd) -bug-setlocale1-static-ARGS = $(bug-setlocale1-ARGS) +bug-setlocale1-ENV-only = LOCPATH=$(objpfx) LC_CTYPE=de_DE.UTF-8 +bug-setlocale1-static-ENV-only = $(bug-setlocale1-ENV-only) $(objdir)/iconvdata/gconv-modules: $(MAKE) -C ../iconvdata subdir=iconvdata $@ diff --git a/localedata/bug-setlocale1.c b/localedata/bug-setlocale1.c index dc7f6f3f08..546ea7beb8 100644 --- a/localedata/bug-setlocale1.c +++ b/localedata/bug-setlocale1.c @@ -7,44 +7,8 @@ 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; char *a = setlocale (LC_ALL, ""); @@ -128,5 +92,5 @@ do_test (int argc, char *argv[]) return result; } -#define TEST_FUNCTION do_test (argc, argv) +#define TEST_FUNCTION do_test () #include "../test-skeleton.c"