From ec484e17a74de4d2c50b532a05ef97cdd8faddb1 Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Tue, 23 Oct 2007 03:05:56 +0000 Subject: [PATCH] (main, init_server, emp_server.6): Add -R command line option to set a seed for the random function. (nightlybuild.sh): Add the -R 1 for the server. (nightlybuild.sh): Switch to -R 1 for the fairland as 1 is safer. Some systems might generate lousy randomness from a zero seed. (prng.patch): Not required anymore, -R 1 is used instead. (main, emp_server.6): Rename -r and -R to -u and -U. "-R" is now used for random seed. --- include/prototypes.h | 2 +- man/emp_server.6 | 18 +- src/scripts/nightly/nightlybuild.sh | 4 +- src/scripts/nightly/patches/All/prng.patch | 455 --------------------- src/server/main.c | 27 +- 5 files changed, 31 insertions(+), 475 deletions(-) delete mode 100644 src/scripts/nightly/patches/All/prng.patch diff --git a/include/prototypes.h b/include/prototypes.h index ef148761..476da596 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -46,7 +46,7 @@ /* src/server/main.c */ extern void shutdwn(int sig); -extern void init_server(void); +extern void init_server(unsigned); extern void start_server(int); extern void finish_server(void); diff --git a/man/emp_server.6 b/man/emp_server.6 index 1e9979df..15ef79e4 100644 --- a/man/emp_server.6 +++ b/man/emp_server.6 @@ -26,10 +26,13 @@ emp_server \- Empire server .br .B emp_server [ -.B \-r +.B \-u | -.BI \-R " service-name" +.BI \-U " service-name" ]\} +[ +.BI \-R " random-seed" +] .SH DESCRIPTION .B emp_server is a daemon which listens to the Empire port for players connecting to @@ -61,15 +64,18 @@ Install as a Windows Service with the specified name.\} Threading debug mode. Implies \fB-d\fR. .if \nw \{\ .TP -.B \-r -Remove the Windows Service called "Empire Server". +.B \-u +Uninstall the Windows Service called "Empire Server". .TP -.BI \-R " service-name" -Remove the Windows Service with the specified name.\} +.BI \-U " service-name" +Uninstall the Windows Service with the specified name.\} .TP .B \-s Enable thread stack checking. .TP +.B \-R " random-seed" +Set the seed for random function. +.TP .B \-v Print version information and exit. .SH OPERANDS diff --git a/src/scripts/nightly/nightlybuild.sh b/src/scripts/nightly/nightlybuild.sh index c0af07c1..a042aaa0 100755 --- a/src/scripts/nightly/nightlybuild.sh +++ b/src/scripts/nightly/nightlybuild.sh @@ -259,7 +259,7 @@ do echo "Running files and fairland" echo y | ./files || warn "Error running files" - ./fairland -R 0 10 30 >/dev/null || { warn "Error running fairland" ; break ; } + ./fairland -R 1 10 30 >/dev/null || { warn "Error running fairland" ; break ; } [ -s "newcap_script" ] || { warn "fairland did not produce newcap_script" ; break ; } echo "Done (files & fairland)." echo "" @@ -279,7 +279,7 @@ do *) echo "Starting server with -d in the background" - ./emp_server -d & + ./emp_server -R 1 -d & PID="$!" sleep 1 kill -0 "${PID}" || { warn "emp_server not running ?" ; break ; } diff --git a/src/scripts/nightly/patches/All/prng.patch b/src/scripts/nightly/patches/All/prng.patch deleted file mode 100644 index 1dc2591d..00000000 --- a/src/scripts/nightly/patches/All/prng.patch +++ /dev/null @@ -1,455 +0,0 @@ -Index: empserver/include/damage.h ---- empserver/include/damage.h 16 Mar 2005 21:51:57 -0000 1.3 -+++ empserver/include/damage.h 17 Mar 2005 10:01:13 -0000 -@@ -39,10 +39,10 @@ - #define DPERCENT_DAMAGE(x) ((double)(100.0 * (x) / ((x) + 100.0))) - #define DMINE_HITCHANCE(x) ((double) ( (x) / ((x)+20.0) ) ) - #define DMINE_LHITCHANCE(x) ((double) ( (x) / ((x)+35.0) ) ) --#define MINE_DAMAGE() (22 + random()%21) --#define MINE_LDAMAGE() (10 + random()%11) -+#define MINE_DAMAGE() (22 + emp_random()%21) -+#define MINE_LDAMAGE() (10 + emp_random()%11) - #define DTORP_HITCHANCE(range, vis) ((double)(0.9/((range)+1)+(((vis)<6)?(5-(vis))*0.03:0))) --#define TORP_DAMAGE() (torpedo_damage + (random() % torpedo_damage) + \ -- (random() % torpedo_damage)) -+#define TORP_DAMAGE() (torpedo_damage + (emp_random() % torpedo_damage) + \ -+ (emp_random() % torpedo_damage)) - - #endif /* _DAMAGE_H_ */ -Index: empserver/include/prototypes.h ---- empserver/include/prototypes.h 13 Nov 2005 23:18:37 -0000 1.98 -+++ empserver/include/prototypes.h 14 Nov 2005 16:34:10 -0000 -@@ -397,6 +397,9 @@ - extern s_char *splur(int n); - extern s_char *iesplur(int n); - extern char *plurize(char *buf, int max_len, int n); -+/* chance.c */ -+extern void emp_srandom(unsigned int); -+extern long emp_random(void); - /* more in misc.h */ - - /* -Index: empserver/src/lib/commands/anti.c ---- empserver/src/lib/commands/anti.c 16 Mar 2005 21:56:00 -0000 1.10 -+++ empserver/src/lib/commands/anti.c 17 Mar 2005 10:01:14 -0000 -@@ -130,7 +130,7 @@ - sect.sct_mobil = 0; - } - sect.sct_loyal = sect.sct_loyal * 0.5; -- n_cheleft = (random() % 4); -+ n_cheleft = (emp_random() % 4); - /* 75% chance some che will get left */ - if (n_cheleft) { - /* Ok, now leave anywhere from 16% to 25% of the che */ -Index: empserver/src/lib/commands/laun.c ---- empserver/src/lib/commands/laun.c 16 Mar 2005 21:56:01 -0000 1.10 -+++ empserver/src/lib/commands/laun.c 17 Mar 2005 10:01:14 -0000 -@@ -420,7 +420,7 @@ - } - i = pp->pln_tech + pp->pln_effic; - if (chance(1.0 - (i / (i + 50.0)))) { -- dir = (random() % 6) + 1; -+ dir = (emp_random() % 6) + 1; - sx += diroff[dir][0]; - sy += diroff[dir][1]; - pr("Your trajectory was a little off.\n"); -Index: empserver/src/lib/commands/mfir.c ---- empserver/src/lib/commands/mfir.c 27 Oct 2005 21:33:17 -0000 1.26 -+++ empserver/src/lib/commands/mfir.c 14 Nov 2005 16:31:28 -0000 -@@ -559,7 +559,7 @@ - /* dam = (int)((double)dam / 2.0);*/ - dam = - (int)((double)dam * -- (double)((double)(90 - (random() % 11)) / -+ (double)((double)(90 - (emp_random() % 11)) / - 100.0)); - if (dam < 0) - dam = 0; -Index: empserver/src/lib/commands/new.c ---- empserver/src/lib/commands/new.c 23 Oct 2005 20:52:46 -0000 1.24 -+++ empserver/src/lib/commands/new.c 24 Oct 2005 15:30:24 -0000 -@@ -102,8 +102,8 @@ - } else { - for (i = 0; i < 300 && !player->aborted; i++) { - /* Both x and y should be either odd or even */ -- x = (random() % WORLD_X) - (WORLD_X / 2); -- y = (((random() % WORLD_Y) - (WORLD_Y / 2)) & ~1) | (x & 1); -+ x = (emp_random() % WORLD_X) - (WORLD_X / 2); -+ y = (((emp_random() % WORLD_Y) - (WORLD_Y / 2)) & ~1) | (x & 1); - /* - * If either of the two potential - * sanctuary sectors are already -Index: empserver/src/lib/commands/news.c ---- empserver/src/lib/commands/news.c 16 Mar 2005 21:56:02 -0000 1.9 -+++ empserver/src/lib/commands/news.c 17 Mar 2005 10:01:14 -0000 -@@ -188,7 +188,7 @@ - /* - * vary the order of the printing of "%d times " - */ -- if ((random() & 3) == 0 && np->nws_ntm > 1) { -+ if ((emp_random() & 3) == 0 && np->nws_ntm > 1) { - sprintf(cp, "%s times ", ptr); - cp += strlen(cp); - np->nws_ntm = 1; -@@ -198,7 +198,7 @@ - *cp++ = ' '; - if (np->nws_vrb < 1 || np->nws_vrb > N_MAX_VERB) - np->nws_vrb = 0; -- sprintf(cp, rpt[(int)np->nws_vrb].r_newstory[random() % NUM_RPTS], -+ sprintf(cp, rpt[(int)np->nws_vrb].r_newstory[emp_random() % NUM_RPTS], - cname(np->nws_vno)); - cp += strlen(cp); - if (np->nws_ntm != 1) { -Index: empserver/src/lib/commands/sabo.c ---- empserver/src/lib/commands/sabo.c 16 Mar 2005 21:56:03 -0000 1.11 -+++ empserver/src/lib/commands/sabo.c 17 Mar 2005 10:01:14 -0000 -@@ -87,10 +87,10 @@ - dam = landgun(3 * land.lnd_effic, 7); - if (sect.sct_item[I_SHELL] > 20) - dam += seagun(land.lnd_effic, -- random() % (sect.sct_item[I_SHELL] / 10)); -+ emp_random() % (sect.sct_item[I_SHELL] / 10)); - if (sect.sct_item[I_PETROL] > 100) - dam += seagun(land.lnd_effic, -- random() % (sect.sct_item[I_PETROL] / 50)); -+ emp_random() % (sect.sct_item[I_PETROL] / 50)); - - pr("Explosion in %s causes %d damage.\n", - xyas(land.lnd_x, land.lnd_y, land.lnd_own), dam); -Index: empserver/src/lib/common/damage.c ---- empserver/src/lib/common/damage.c 16 Mar 2005 21:56:04 -0000 1.11 -+++ empserver/src/lib/common/damage.c 17 Mar 2005 10:01:14 -0000 -@@ -177,7 +177,7 @@ - return 0; - tmp = amt * pct; - lost = tmp / 100; -- if ((random() % 100) < (tmp % 100)) -+ if ((emp_random() % 100) < (tmp % 100)) - lost++; - return amt - lost; - } -Index: empserver/src/lib/gen/chance.c ---- empserver/src/lib/gen/chance.c 16 Mar 2005 21:56:05 -0000 1.5 -+++ empserver/src/lib/gen/chance.c 17 Mar 2005 10:01:14 -0000 -@@ -31,14 +31,37 @@ - * - */ - -+#include - #include "gen.h" - -+#ifndef RANDOM -+#ifdef NOSVIDPRNG -+#define RANDOM random -+#define SRANDOM srandom -+#else /* ! NOSVIDPRNG */ -+#define RANDOM lrand48 -+#define SRANDOM srand48 -+#endif /* ! NOSVIDPRNG */ -+#endif /* ! RANDOM */ -+ -+void -+emp_srandom(unsigned int n) -+{ -+ SRANDOM(1); -+} -+ -+long -+emp_random(void) -+{ -+ return (RANDOM()); /* 5/28/91 by bailey@mcs.kent.edu */ -+} -+ - int - chance(double d) - { - double roll; - -- roll = (random() & 0x7fff); -+ roll = (emp_random() & 0x7fff); - - if (d > roll / 32768.0) - return 1; -@@ -48,7 +71,7 @@ - int - roll(int n) - { -- return (random() % n) + 1; -+ return (emp_random() % n) + 1; - } - - /* -Index: empserver/src/lib/subs/attsub.c ---- empserver/src/lib/subs/attsub.c 2 Oct 2005 14:35:18 -0000 1.30 -+++ empserver/src/lib/subs/attsub.c 4 Oct 2005 14:57:37 -0000 -@@ -1863,12 +1863,12 @@ - * recalculate the odds every 8-50 casualties, not every cacsualty, - * since a single dead guy normally wouldn't cause a commander to - * rethink his strategies, but 50 dead guys might. */ -- odds = odds + (double)((double)((random() % 11) - 5) / 100.0); -+ odds = odds + (double)((double)((emp_random() % 11) - 5) / 100.0); - if (odds < 0.0) - odds = 0.1; - if (odds > 1.0) - odds = 1.0; -- recalctime = 8 + (random() % 43); -+ recalctime = 8 + (emp_random() % 43); - while (!success && ototal) { - if (chance(odds)) { - pr("!"); -@@ -1884,9 +1884,9 @@ - if (((a_cas + d_cas) % 70) == 69) - pr("\n"); - if (recalctime-- <= 0) { -- recalctime = 8 + (random() % 43); -+ recalctime = 8 + (emp_random() % 43); - odds = att_calcodds(ototal, dtotal); -- odds = odds + (double)((double)((random() % 11) - 5) / 100.0); -+ odds = odds + (double)((double)((emp_random() % 11) - 5) / 100.0); - if (odds < 0.0) - odds = 0.1; - if (odds > 1.0) -Index: empserver/src/lib/subs/landgun.c ---- empserver/src/lib/subs/landgun.c 16 Mar 2005 21:57:53 -0000 1.5 -+++ empserver/src/lib/subs/landgun.c 17 Mar 2005 10:01:14 -0000 -@@ -40,7 +40,7 @@ - double d; - double g = (double)min(guns, 7); - -- d = ((double)(random() % 30) + 20.0) * ((double)g / 7.0); -+ d = ((double)(emp_random() % 30) + 20.0) * ((double)g / 7.0); - d *= ((double)effic); - d /= 100.0; - return d; -@@ -53,7 +53,7 @@ - - d = 0.0; - while (guns--) -- d += 10.0 + (double)(random() % 6); -+ d += 10.0 + (double)(emp_random() % 6); - d *= ((double)effic) * 0.01; - return d; - } -@@ -65,7 +65,7 @@ - - shots = min(shots, guns); - while (shots-- > 0) -- d += 5.0 + (double)(random() % 6); -+ d += 5.0 + (double)(emp_random() % 6); - d *= ((double)effic) * 0.01; - if (shells < ammo && ammo != 0) - d *= (double)((double)shells / (double)ammo); -Index: empserver/src/lib/subs/shpsub.c ---- empserver/src/lib/subs/shpsub.c 3 Oct 2005 14:47:59 -0000 1.22 -+++ empserver/src/lib/subs/shpsub.c 4 Oct 2005 14:57:37 -0000 -@@ -759,7 +759,7 @@ - - nreport(sp->shp_own, N_HIT_MINE, 0, 1); - -- m = 22.0 + (double)(random() % 21); -+ m = 22.0 + (double)(emp_random() % 21); - if (mcp->m_flags & M_SWEEP) - m /= 2.0; - -Index: empserver/src/lib/subs/takeover.c ---- empserver/src/lib/subs/takeover.c 16 Mar 2005 21:57:55 -0000 1.14 -+++ empserver/src/lib/subs/takeover.c 17 Mar 2005 10:01:14 -0000 -@@ -91,7 +91,7 @@ - if (!(chance(LND_SPY_DETECT_CHANCE(lp->lnd_effic)))) - continue; - } -- n = lp->lnd_effic - (30 + (random() % 100)); -+ n = lp->lnd_effic - (30 + (emp_random() % 100)); - if (n < 0) - n = 0; - lp->lnd_effic = n; -@@ -120,7 +120,7 @@ - * how spunky are these guys? - * n: random number from -25:75 + (50 - loyalty) - */ -- n = (50 - sp->sct_loyal) + ((random() % 100) - 25); -+ n = (50 - sp->sct_loyal) + ((emp_random() % 100) - 25); - che_count = 0; - if (n > 0 && sp->sct_own == sp->sct_oldown) { - che_count = (civ * n / 3000) + 5; -@@ -178,7 +178,7 @@ - * XXX If this was done right, planes could escape, - * flying to a nearby friendly airport. - */ -- n = pp->pln_effic - (30 + (random() % 100)); -+ n = pp->pln_effic - (30 + (emp_random() % 100)); - if (n < 0) - n = 0; - pp->pln_effic = n; -Index: empserver/src/lib/update/human.c -diff -u -r1.18 human.c ---- empserver/src/lib/update/human.c 2 Oct 2005 19:10:16 -0000 1.18 -+++ empserver/src/lib/update/human.c 4 Oct 2005 14:57:37 -0000 -@@ -116,12 +116,12 @@ - nreport(sp->sct_own, N_DIE_FAMINE, 0, 1); - } - sp->sct_work = 0; -- sp->sct_loyal += (random() % 8) + 2; -+ sp->sct_loyal += (emp_random() % 8) + 2; - } - sctwork = 0; - } else { - if (sp->sct_work < 100) -- sctwork = sp->sct_work + 8 + (random() % 15); -+ sctwork = sp->sct_work + 8 + (emp_random() % 15); - if (sctwork > 100) - sctwork = 100; - if (!player->simulation) -Index: empserver/src/lib/update/plague.c ---- empserver/src/lib/update/plague.c 16 Mar 2005 21:57:57 -0000 1.15 -+++ empserver/src/lib/update/plague.c 17 Mar 2005 10:01:15 -0000 -@@ -190,7 +190,7 @@ - } - if (*ptime <= 0) { - *pstage -= 1; -- *ptime = (etus / 2) + (random() % etus); -+ *ptime = (etus / 2) + (emp_random() % etus); - } - return stage; - } -Index: empserver/src/lib/update/populace.c ---- empserver/src/lib/update/populace.c 16 Mar 2005 21:57:57 -0000 1.9 -+++ empserver/src/lib/update/populace.c 17 Mar 2005 10:01:15 -0000 -@@ -85,7 +85,7 @@ - n = roundavg(etu * 0.125); - if (n == 0) - n = 1; -- n = sp->sct_loyal + (random() % n) + 1; -+ n = sp->sct_loyal + (emp_random() % n) + 1; - if (n > 127) - n = 127; - sp->sct_loyal = n; -@@ -93,7 +93,7 @@ - if (sp->sct_loyal > 65 && mil < civ / 20) { - int work_red; - -- work_red = sp->sct_loyal - (50 + (random() % 15)); -+ work_red = sp->sct_loyal - (50 + (emp_random() % 15)); - n = sp->sct_work - work_red; - if (n < 0) - n = 0; -Index: empserver/src/lib/update/revolt.c ---- empserver/src/lib/update/revolt.c 31 Jul 2005 13:55:49 -0000 1.16 -+++ empserver/src/lib/update/revolt.c 11 Aug 2005 09:14:25 -0000 -@@ -70,7 +70,7 @@ - che_uw = 0; - che_civ = 0; - /* che due to civilian unrest */ -- n = 10 - (random() % 20); -+ n = 10 - (emp_random() % 20); - che_civ = 3 + (civ * n / 500); - if (che_civ < 0) - che_civ = 0; -@@ -81,7 +81,7 @@ - che += che_civ; - if (che < CHE_MAX) { - /* che due to uw unrest */ -- n = 10 + (random() % 30); -+ n = 10 + (emp_random() % 30); - che_uw = 5 + (uw * n / 500); - if (che_uw > uw) - che_uw = uw; -@@ -252,7 +252,7 @@ - } - if (mil > 0) { - /* military won. */ -- n = sp->sct_loyal - (random() % 15); -+ n = sp->sct_loyal - (emp_random() % 15); - if (n < 0) - n = 0; - sp->sct_loyal = n; -@@ -271,7 +271,7 @@ - * Note this disrupts work in the sector. - */ - n = 0; -- n = (random() % 10) + (random() % che); -+ n = (emp_random() % 10) + (emp_random() % che); - if (n > 100) - n = 100; - tmp = sp->sct_work - n; -@@ -351,14 +351,14 @@ - /* loyalty drops during recruitment efforts */ - n = sp->sct_loyal; - if (n < 30) -- n += (random() % 5) + 1; -+ n += (emp_random() % 5) + 1; - else if (n < 70) -- n += (random() % 10) + 4; -+ n += (emp_random() % 10) + 4; - if (n > 127) - n = 127; - sp->sct_loyal = n; - if (sp->sct_oldown != sp->sct_own || n > 100) { -- n = civ * (random() % 3) / 200; -+ n = civ * (emp_random() % 3) / 200; - n /= hap_fact(tnat, getnatp(sp->sct_oldown)); - if (n + che > CHE_MAX) - n = CHE_MAX - che; -@@ -366,7 +366,7 @@ - civ -= n; - sp->sct_item[I_CIVIL] = civ; - } -- n = uw * (random() % 3) / 200; -+ n = uw * (emp_random() % 3) / 200; - if (n + che > CHE_MAX) - n = CHE_MAX - che; - che += n; -@@ -399,7 +399,7 @@ - val = roundintby(val, 10); - /* inject a modicum of indeterminism; also - * avoids che preferring certain directions */ -- val += random() % 10 - 5; -+ val += emp_random() % 10 - 5; - if (val >= min_mil) - continue; - nicest_sp = nsp; -Index: empserver/src/server/main.c ---- empserver/src/server/main.c 13 Nov 2005 16:39:26 -0000 1.79 -+++ empserver/src/server/main.c 14 Nov 2005 16:33:18 -0000 -@@ -258,7 +258,7 @@ - void - init_server(void) - { -- srandom(time(NULL)); -+ emp_srandom(time(NULL)); - #if defined(_WIN32) - loc_NTInit(); - #endif -Index: empserver/src/server/update.c ---- empserver/src/server/update.c 16 Mar 2005 21:57:58 -0000 1.18 -+++ empserver/src/server/update.c 17 Mar 2005 10:01:15 -0000 -@@ -70,7 +70,7 @@ - time(&now); - next_update_time(&now, &update_time, &delta); - if (update_window > 0) { -- wind = (random() % update_window); -+ wind = (emp_random() % update_window); - update_time += wind; - delta += wind; - } -Index: empserver/src/util/fairland.c ---- empserver/src/util/fairland.c 16 Mar 2005 22:03:16 -0000 1.25 -+++ empserver/src/util/fairland.c 17 Mar 2005 10:01:15 -0000 -@@ -126,7 +126,7 @@ - #if !defined(_WIN32) - #define max(a,b) (a>b?a:b) - #endif --#define rnd(x) (random() % (x)) -+#define rnd(x) (lrand48() % (x)) - - int secs; /* number of sectors grown */ - int ctot; /* total number of continents and islands grown */ -@@ -229,7 +229,7 @@ - exit(1); - } - } -- srandom(rnd_seed); -+ srand48(rnd_seed); - if (emp_config(config_file)) - exit(1); - diff --git a/src/server/main.c b/src/server/main.c index 7fbe75ad..89a74491 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -106,10 +106,11 @@ print_usage(char *program_name) #endif " -p threading debug mode, implies -d\n" #ifdef _WIN32 - " -r remove service `%s'\n" - " -R NAME remove service NAME\n" + " -u uninstall service `%s'\n" + " -U NAME uninstall service NAME\n" #endif " -s enable stack checking\n" + " -R RANDOM-SEED random seed\n" " -v display version information and exit\n", program_name, dflt_econfig #ifdef _WIN32 @@ -130,13 +131,14 @@ main(int argc, char **argv) #endif char *config_file = NULL; int op, sig; + unsigned seed = time(NULL); #ifdef _WIN32 -# define XOPTS "iI:rR:" +# define XOPTS "iI:uU:" #else # define XOPTS #endif - while ((op = getopt(argc, argv, "de:hpsv" XOPTS)) != EOF) { + while ((op = getopt(argc, argv, "de:hpsR:v" XOPTS)) != EOF) { switch (op) { case 'p': flags |= EMPTH_PRINT; @@ -155,16 +157,19 @@ main(int argc, char **argv) case 'i': install_service_set++; break; - case 'R': + case 'U': service_name = optarg; /* fall through */ - case 'r': + case 'u': remove_service_set++; break; #endif /* _WIN32 */ case 's': flags |= EMPTH_STACKCHECK; break; + case 'R': + seed = strtoul(optarg, NULL, 10); + break; case 'v': printf("%s\n\n%s", version, legal); return EXIT_SUCCESS; @@ -181,7 +186,7 @@ main(int argc, char **argv) if ((debug || flags || config_file != NULL) && remove_service_set) { fprintf(stderr, "Can't use -p, -s, -d or -e with either " - "-r or -R options\n"); + "-u or -U options\n"); exit(EXIT_FAILURE); } if ((debug || flags) && install_service_set) { @@ -190,7 +195,7 @@ main(int argc, char **argv) exit(EXIT_FAILURE); } if (install_service_set && remove_service_set) { - fprintf(stderr, "Can't use both -r or -R and -i or -I " + fprintf(stderr, "Can't use both -u or -U and -i or -I " "options\n"); exit(EXIT_FAILURE); } @@ -237,7 +242,7 @@ main(int argc, char **argv) return install_service(program_name, service_name, config_file); #endif /* _WIN32 */ - init_server(); + init_server(seed); #if defined(_WIN32) if (daemonize != 0) { @@ -295,9 +300,9 @@ main(int argc, char **argv) * Initialize for serving, acquire resources. */ void -init_server(void) +init_server(unsigned seed) { - srandom(time(NULL)); + srandom(seed); #if defined(_WIN32) loc_NTInit(); #endif