From 76ace254e171ee9ca7a13f36335ccad9cc6ae6e1 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 12 Oct 2009 15:25:01 +0200 Subject: ash,hush: fix $RANDOM in children being repeated function old new delta next_random 46 68 +22 forkshell 248 263 +15 expand_vars_to_list 2118 2131 +13 run_pipe 1775 1782 +7 popstring 134 140 +6 builtin_umask 123 121 -2 ash_main 1356 1336 -20 get_local_var_value 125 104 -21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 5/3 up/down: 63/-43) Total: 20 bytes Signed-off-by: Denys Vlasenko --- shell/ash.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) (limited to 'shell/ash.c') diff --git a/shell/ash.c b/shell/ash.c index cc2677126..d81dbd3f5 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -4725,10 +4725,12 @@ forkshell(struct job *jp, union node *n, int mode) freejob(jp); ash_msg_and_raise_error("can't fork"); } - if (pid == 0) + if (pid == 0) { + CLEAR_RANDOM_T(&random_gen); /* or else $RANDOM repeats in child */ forkchild(jp, n, mode); - else + } else { forkparent(jp, n, mode, pid); + } return pid; } @@ -10079,12 +10081,6 @@ setcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) static void FAST_FUNC change_random(const char *value) { - /* Galois LFSR parameter */ - /* Taps at 32 31 29 1: */ - enum { MASK = 0x8000000b }; - /* Another example - taps at 32 31 30 10: */ - /* MASK = 0x00400007 */ - uint32_t t; if (value == NULL) { @@ -13268,11 +13264,6 @@ int ash_main(int argc UNUSED_PARAM, char **argv) #endif rootpid = getpid(); -#if ENABLE_ASH_RANDOM_SUPPORT - /* Can use monotonic_ns() for better randomness but for now it is - * not used anywhere else in busybox... so avoid bloat */ - INIT_RANDOM_T(&random_gen, rootpid, monotonic_us()); -#endif init(); setstackmark(&smark); procargs(argv); -- cgit v1.2.3