summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-10-09 18:59:39 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2009-10-09 18:59:39 (GMT)
commit20b3d144e9449c2fa3858e8a4edd4397932dff97 (patch)
tree46982b0c2251c38438eba443b78679110c8192d2
parent3ea2e82dc7b32703f5043c3b30b049905a0d07aa (diff)
downloadbusybox-20b3d144e9449c2fa3858e8a4edd4397932dff97.tar.gz
busybox-20b3d144e9449c2fa3858e8a4edd4397932dff97.tar.bz2
hush: add support for $RANDOM. If on:
function old new delta hush_main 983 1024 +41 get_local_var_value 72 104 +32 block_signals 155 161 +6 reset_traps_to_defaults 211 214 +3 builtin_wait 268 271 +3 pseudo_exec_argv 198 200 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 6/0 up/down: 87/0) Total: 87 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/hush.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 3028d79..b80b6c7 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -86,6 +86,9 @@
#endif
#include "math.h"
#include "match.h"
+#if ENABLE_ASH_RANDOM_SUPPORT
+# include "random.h"
+#endif
#ifndef PIPE_BUF
# define PIPE_BUF 4096 /* amount of buffering in a pipe */
#endif
@@ -486,6 +489,9 @@ struct globals {
pid_t root_pid;
pid_t root_ppid;
pid_t last_bg_pid;
+#if ENABLE_HUSH_RANDOM_SUPPORT
+ random_t random_gen;
+#endif
#if ENABLE_HUSH_JOB
int run_list_level;
int last_jobid;
@@ -1311,6 +1317,10 @@ static const char *get_local_var_value(const char *name)
if (strcmp(name, "PPID") == 0)
return utoa(G.root_ppid);
// bash compat: UID? EUID?
+#if ENABLE_HUSH_RANDOM_SUPPORT
+ if (strcmp(name, "RANDOM") == 0)
+ return utoa(next_random(&G.random_gen));
+#endif
return NULL;
}
@@ -6595,6 +6605,9 @@ int hush_main(int argc, char **argv)
if (!G.root_pid) {
G.root_pid = getpid();
G.root_ppid = getppid();
+#if ENABLE_HUSH_RANDOM_SUPPORT
+ INIT_RANDOM_T(&G.random_gen, G.root_pid, monotonic_us());
+#endif
}
G.global_argv = argv + optind;
G.global_argc = argc - optind;
@@ -6683,6 +6696,9 @@ int hush_main(int argc, char **argv)
G.root_pid = getpid();
G.root_ppid = getppid();
}
+#if ENABLE_HUSH_RANDOM_SUPPORT
+ INIT_RANDOM_T(&G.random_gen, G.root_pid, monotonic_us());
+#endif
/* If we are login shell... */
if (argv[0] && argv[0][0] == '-') {