We have to support a seed, but if we don't start with one, use
arc4random() instead.

This also makes the linker warnings a little nicer and more localized:
update.o(.text+0xbfd): In function `setseed':
: warning: srandom() seed choices are invariably poor
update.o(.text+0x259): In function `addplane':
: warning: random() isn't random; consider using arc4random()

Index: extern.h
===================================================================
RCS file: /cvs/src/games/atc/extern.h,v
retrieving revision 1.7
diff -u -p -r1.7 extern.h
--- extern.h    25 Oct 2013 21:57:10 -0000      1.7
+++ extern.h    13 Jul 2014 13:21:46 -0000
@@ -102,6 +102,7 @@ void                quit(int);
 int            read_file(const char *);
 void           redraw(void);
 void           rezero(void);
+void           setseed(const char *);
 void           setup_screen(const C_SCREEN *);
 int            too_close(const PLANE *p1, const PLANE *p2, int);
 void           update(int);
Index: main.c
===================================================================
RCS file: /cvs/src/games/atc/main.c,v
retrieving revision 1.22
diff -u -p -r1.22 main.c
--- main.c      13 Jul 2014 13:00:40 -0000      1.22
+++ main.c      13 Jul 2014 13:21:46 -0000
@@ -111,10 +111,8 @@ main(int ac, char *av[])
                        ptr++;
                }
        }
-       if (seed != NULL)
-               srandom(atol(seed));
-       else
-               srandomdev();
+       if (seed != NULL)
+               setseed(seed);
 
        if (f_usage)
                fprintf(stderr, 
Index: update.c
===================================================================
RCS file: /cvs/src/games/atc/update.c,v
retrieving revision 1.13
diff -u -p -r1.13 update.c
--- update.c    13 Jul 2014 13:00:40 -0000      1.13
+++ update.c    13 Jul 2014 13:21:46 -0000
@@ -43,6 +43,23 @@
 
 #include "include.h"
 
+int seeded;
+void
+setseed(const char *seed)
+{
+       seeded = 1;
+       srandom(atol(seed));
+}
+
+uint32_t
+atcrandom()
+{
+       if (seeded)
+               return random();
+       else
+               return arc4random();
+}
+
 void
 update(int dummy)
 {
@@ -196,7 +213,7 @@ update(int dummy)
         * Otherwise, prop jobs show up *on* entrance.  Remember that
         * we don't update props on odd updates.
         */
-       if ((random() % sp->newplane_time) == 0)
+       if ((atcrandom() % sp->newplane_time) == 0)
                addplane();
 }
 
@@ -292,10 +309,10 @@ addplane(void)
        memset(&p, 0, sizeof (p));
 
        p.status = S_MARKED;
-       p.plane_type = random() % 2;
+       p.plane_type = atcrandom() % 2;
 
        num_starts = sp->num_exits + sp->num_airports;
-       rnd = random() % num_starts;
+       rnd = atcrandom() % num_starts;
 
        if (rnd < sp->num_exits) {
                p.dest_type = T_EXIT;
@@ -308,7 +325,7 @@ addplane(void)
        /* loop until we get a plane not near another */
        for (i = 0; i < num_starts; i++) {
                /* loop till we get a different start point */
-               while ((rnd2 = random() % num_starts) == rnd)
+               while ((rnd2 = atcrandom() % num_starts) == rnd)
                        ;
                if (rnd2 < sp->num_exits) {
                        p.orig_type = T_EXIT;

Reply via email to