--- variables.c +++ variables.c Wed Aug 21 12:14:18 2002 @@ -1035,6 +1035,7 @@ return v; } +#if !defined(linux) /* The random number seed. You can change this by setting RANDOM. */ static unsigned long rseed = 1; static int last_random_value; @@ -1060,6 +1061,21 @@ last_random_value = 0; } +#else + +static int last_sbrand_pid; + +static int brand () +{ + return random() & 32767; +} + +static void sbrand (unsigned long seed) +{ + srandom(seed); +} +#endif + static SHELL_VAR * assign_random (self, value, unused) SHELL_VAR *self; @@ -1075,6 +1091,7 @@ { int rv; +#if !defined(linux) /* Reset for command and process substitution. */ if (subshell_environment) sbrand (rseed + getpid() + NOW); @@ -1082,6 +1099,18 @@ do rv = brand (); while (rv == last_random_value); +#else + if (subshell_environment) + { + int mypid = getpid(); + if (mypid != last_sbrand_pid) + { + last_sbrand_pid = mypid; + sbrand (mypid + NOW); + } + } + rv = brand(); +#endif return rv; } @@ -1093,7 +1122,9 @@ char *p; rv = get_random_number (); +#if !defined(linux) last_random_value = rv; +#endif p = itos (rv); FREE (value_cell (var));