aboutsummaryrefslogtreecommitdiff
path: root/coreutils/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils/test.c')
-rw-r--r--coreutils/test.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/coreutils/test.c b/coreutils/test.c
index 96462d3a2..ad777953f 100644
--- a/coreutils/test.c
+++ b/coreutils/test.c
@@ -426,7 +426,7 @@ struct test_statics {
426 /* set only by check_operator(), either to bogus struct 426 /* set only by check_operator(), either to bogus struct
427 * or points to matching operator_t struct. Never NULL. */ 427 * or points to matching operator_t struct. Never NULL. */
428 const struct operator_t *last_operator; 428 const struct operator_t *last_operator;
429 struct cached_groupinfo groupinfo; 429 struct cached_groupinfo *groupinfo;
430#if BASH_TEST2 430#if BASH_TEST2
431 bool bash_test2; 431 bool bash_test2;
432#endif 432#endif
@@ -447,7 +447,6 @@ extern struct test_statics *BB_GLOBAL_CONST test_ptr_to_statics;
447 XZALLOC_CONST_PTR(&test_ptr_to_statics, sizeof(S)); \ 447 XZALLOC_CONST_PTR(&test_ptr_to_statics, sizeof(S)); \
448} while (0) 448} while (0)
449#define DEINIT_S() do { \ 449#define DEINIT_S() do { \
450 free(groupinfo.supplementary_array); \
451 free(test_ptr_to_statics); \ 450 free(test_ptr_to_statics); \
452} while (0) 451} while (0)
453 452
@@ -642,7 +641,7 @@ static int is_a_group_member(gid_t gid)
642 if (gid == getgid() || gid == getegid()) 641 if (gid == getgid() || gid == getegid())
643 return 1; 642 return 1;
644 643
645 return is_in_supplementary_groups(&groupinfo, gid); 644 return is_in_supplementary_groups(groupinfo, gid);
646} 645}
647 646
648/* 647/*
@@ -878,7 +877,7 @@ static number_t primary(enum token n)
878} 877}
879 878
880 879
881int test_main(int argc, char **argv) 880int FAST_FUNC test_main2(struct cached_groupinfo *pgroupinfo, int argc, char **argv)
882{ 881{
883 int res; 882 int res;
884 const char *arg0; 883 const char *arg0;
@@ -911,6 +910,7 @@ int test_main(int argc, char **argv)
911 910
912 /* We must do DEINIT_S() prior to returning */ 911 /* We must do DEINIT_S() prior to returning */
913 INIT_S(); 912 INIT_S();
913 groupinfo = pgroupinfo;
914 914
915#if BASH_TEST2 915#if BASH_TEST2
916 bash_test2 = bt2; 916 bash_test2 = bt2;
@@ -1013,3 +1013,16 @@ int test_main(int argc, char **argv)
1013 DEINIT_S(); 1013 DEINIT_S();
1014 return res; 1014 return res;
1015} 1015}
1016
1017int test_main(int argc, char **argv)
1018{
1019 struct cached_groupinfo info;
1020 int r;
1021
1022 info.ngroups = 0;
1023 info.supplementary_array = NULL;
1024 r = test_main2(&info, argc, argv);
1025 free(info.supplementary_array);
1026
1027 return r;
1028}