{
unsigned long seed;
unsigned long pid = (unsigned long) getpid();
+ boolean no_seed = TRUE;
#ifdef DEV_RANDOM
FILE *fptr = NULL;
fptr = fopen(DEV_RANDOM, "r");
if (fptr) {
fread(&seed, sizeof(long), 1, fptr);
- has_strong_rngseed = TRUE;
- }
- fclose(fptr);
-#else
- seed = (unsigned long) getnow(); /* time((TIME_type) 0) */
- /* Quick dirty band-aid to prevent PRNG prediction */
- if (pid) {
- if (!(pid & 3L))
- pid -= 1L;
- seed *= pid;
+ has_strong_rngseed = TRUE; /* decl.c */
+ no_seed = FALSE;
+ fclose(fptr);
+ } else {
+ /* leaves clue, doesn't exit */
+ paniclog("sys_random_seed", "falling back to weak seed");
}
#endif
+ if (no_seed) {
+ seed = (unsigned long) getnow(); /* time((TIME_type) 0) */
+ /* Quick dirty band-aid to prevent PRNG prediction */
+ if (pid) {
+ if (!(pid & 3L))
+ pid -= 1L;
+ seed *= pid;
+ }
+ }
return seed;
}