diff --git a/main.c b/main.c index b015da3..58f9a0d 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/** $MirOS: src/bin/mksh/main.c,v 1.7 2005/05/25 23:31:07 tg Exp $ */ +/** $MirOS: src/bin/mksh/main.c,v 1.8 2005/05/26 23:01:30 tg Exp $ */ /* $OpenBSD: main.c,v 1.38 2005/03/30 17:16:37 deraadt Exp $ */ /* $OpenBSD: tty.c,v 1.8 2005/03/30 17:16:37 deraadt Exp $ */ /* $OpenBSD: io.c,v 1.21 2005/03/30 17:16:37 deraadt Exp $ */ @@ -10,7 +10,7 @@ #include #include -__RCSID("$MirOS: src/bin/mksh/main.c,v 1.7 2005/05/25 23:31:07 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/main.c,v 1.8 2005/05/26 23:01:30 tg Exp $"); extern char **environ; @@ -200,7 +200,7 @@ main(int argc, char *argv[]) setstr(pwd_v, current_wd, KSH_RETURN_ERROR); } ppid = getppid(); -#if !defined(__gnu_linux__) && !defined(__INTERIX) && !defined(__sun__) +#if !HAVE_ARC4RANDOM srand((*((long *)kshname)) ^ ((long)time(NULL) * kshpid * ppid)); #endif setint(global("PPID"), (long) ppid); diff --git a/sh.h b/sh.h index 0a79a54..3e49bb3 100644 --- a/sh.h +++ b/sh.h @@ -1,4 +1,4 @@ -/** $MirOS: src/bin/mksh/sh.h,v 1.8 2005/05/25 23:31:08 tg Exp $ */ +/** $MirOS: src/bin/mksh/sh.h,v 1.9 2005/05/26 23:01:30 tg Exp $ */ /* $OpenBSD: sh.h,v 1.27 2005/03/28 21:33:04 deraadt Exp $ */ /* $OpenBSD: shf.h,v 1.5 2005/03/30 17:16:37 deraadt Exp $ */ /* $OpenBSD: table.h,v 1.6 2004/12/18 20:55:52 millert Exp $ */ @@ -1340,4 +1340,12 @@ size_t confstr(int, char *, size_t); } while (0) #endif +#ifndef HAVE_ARC4RANDOM +#if defined(__gnu_linux__) || defined(__INTERIX) || defined(__sun__) \ + || defined(__NetBSD__) +#define HAVE_ARC4RANDOM 0 +#else +#define HAVE_ARC4RANDOM 1 +#endif + #endif diff --git a/var.c b/var.c index 9343c18..a940c04 100644 --- a/var.c +++ b/var.c @@ -1,4 +1,4 @@ -/** $MirOS: src/bin/mksh/var.c,v 1.4 2005/05/25 13:46:02 tg Exp $ */ +/** $MirOS: src/bin/mksh/var.c,v 1.5 2005/05/26 23:01:30 tg Exp $ */ /* $OpenBSD: var.c,v 1.26 2005/03/30 17:16:37 deraadt Exp $ */ #include "sh.h" @@ -6,7 +6,7 @@ #include #include -__RCSID("$MirOS: src/bin/mksh/var.c,v 1.4 2005/05/25 13:46:02 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/var.c,v 1.5 2005/05/26 23:01:30 tg Exp $"); /* * Variables @@ -855,11 +855,7 @@ makenv(void) * Someone has set the srand() value, therefore from now on * we return values from rand() instead of arc4random() */ -#if !defined(__gnu_linux__) && !defined(__INTERIX) && !defined(__sun__) -int use_rand = 0; -#else -int use_rand = 1; -#endif +int use_rand = !HAVE_ARC4RANDOM; /* * Called after a fork in parent to bump the random number generator. @@ -919,7 +915,7 @@ getspec(struct tbl *vp) vp->flag &= ~SPECIAL; if (use_rand) setint(vp, (long) (rand() & 0x7fff)); -#if !defined(__gnu_linux__) && !defined(__INTERIX) && !defined(__sun__) +#if HAVE_ARC4RANDOM else setint(vp, (long) (arc4random() & 0x7fff)); #endif