Use more portable random seed generation.

The new function md_random_seed() has replaced time() + getpid() and
similar methods.  Putting everything in mdport.c slightly reduces the
warnings and workarounds.
This commit is contained in:
John "Elwin" Edwards 2017-01-28 15:49:41 -05:00
parent c194ec3dc9
commit 62047972cc
29 changed files with 123 additions and 81 deletions

View file

@ -49,8 +49,6 @@ int
main(int argc, char *argv[], char *envp[])
{
register char *env;
int lowtime;
time_t now;
char *roguedir;
roguedir = md_getroguedir();
@ -100,7 +98,7 @@ main(int argc, char *argv[], char *envp[])
strucpy(whoami, md_getusername(), strlen(md_getusername()));
if (env == NULL || fruit[0] == '\0') {
md_srand((long)(getpid()+time(0)));
md_srand(md_random_seed());
strcpy(fruit, funfruit[rnd(NFRUIT)]);
}
@ -177,10 +175,9 @@ main(int argc, char *argv[], char *envp[])
else if (argc == 2)
if (!restore(argv[1], envp)) /* Note: restore will never return */
exit(1);
lowtime = (int) time(&now);
dnum = (wizard && getenv("SEED") != NULL ?
atoi(getenv("SEED")) :
lowtime + getpid());
md_random_seed());
if (wizard)
printf("Hello %s, welcome to dungeon #%d\n", whoami, dnum);
else

View file

@ -78,6 +78,7 @@
#include <limits.h>
#include <sys/stat.h>
#include <signal.h>
#include <time.h>
#define MOD_MOVE(c) (toupper(c) )
@ -1232,3 +1233,16 @@ md_readchar(WINDOW *win)
return(ch & 0x7F);
}
unsigned int
md_random_seed(void)
{
unsigned int seed;
seed = (unsigned int) time((time_t *) NULL);
#ifdef _WIN32
seed += _getpid();
#else
seed += getpid();
#endif
return seed;
}

View file

@ -1198,6 +1198,7 @@ extern int md_srand(int seed);
extern int md_rand(void);
extern int md_erasechar(void);
extern int md_killchar(void);
extern unsigned int md_random_seed(void);
/*
* Now all the global variables

View file

@ -255,7 +255,7 @@ restore(char *file, char **envp)
setup();
clearok(curscr, TRUE);
touchwin(cw);
srand(getpid());
srand(md_random_seed());
playit();
/*NOTREACHED*/
return(FALSE);