From bc5b26fece2adace660d163a8648d256da2f803b Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sat, 1 Aug 2015 15:12:11 -0400 Subject: [PATCH] srogue: open the score and log files when the program starts. Super-Rogue can now use the same privilege-dropping scheme as the other games. --- srogue/global.c | 3 +++ srogue/main.c | 17 +++++++++++++++++ srogue/rip.c | 15 ++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/srogue/global.c b/srogue/global.c index ce3fecb..8f10413 100644 --- a/srogue/global.c +++ b/srogue/global.c @@ -54,6 +54,7 @@ int group = NEWGROUP; /* Current group number */ int hungry_state = F_OKAY; /* How hungry is he */ int foodlev = 1; /* how fast he eats food */ int ringfood = 0; /* rings affect on food consumption */ +int scorefd = -1; /* Scoreboard file descriptor */ char take; /* Thing the rogue is taking */ char runch; /* Direction player is running */ char curpurch[15]; /* name of item ready to buy */ @@ -101,6 +102,8 @@ char illegal[] = { "Illegal command '%s'." }; char callit[] = { "Call it: " }; char starlist[] = { " (* for a list)" }; +FILE *logfile = NULL; + struct coord oldpos; /* Pos before last look() call */ struct coord delta; /* Change indicated to get_dir() */ struct coord stairs; /* where the stairs are put */ diff --git a/srogue/main.c b/srogue/main.c index 816d647..daf235f 100644 --- a/srogue/main.c +++ b/srogue/main.c @@ -34,6 +34,11 @@ #include "rogue.ext" +void open_records(void); + +extern int scorefd; +extern FILE *logfile; + main(argc, argv, envp) char **argv; char **envp; @@ -70,6 +75,7 @@ char **envp; strcat(scorefile,"/"); strcat(scorefile, "srogue.scr"); #endif + open_records(); if(argc >= 2 && strcmp(argv[1], "-s") == 0) { @@ -472,3 +478,14 @@ roguehome() return(NULL); } +void +open_records(void) +{ + if (scorefd < 0) + scorefd = open(scorefile, O_RDWR | O_CREAT, 0666); +#ifdef LOGFILE + if (logfile == NULL) + logfile = fopen(LOGFILE, "a"); +#endif +} + diff --git a/srogue/rip.c b/srogue/rip.c index c1c9020..b44c1a3 100644 --- a/srogue/rip.c +++ b/srogue/rip.c @@ -47,6 +47,9 @@ static char *rip[] = { #define RIP_LINES (sizeof rip / (sizeof (char *))) +extern int scorefd; +extern FILE *logfile; + char *killname(); void writelog(int amount, int aflag, char monst); @@ -140,7 +143,7 @@ int amount, aflag; /* * Open file and read list */ - if ((fd = open(scorefile, O_RDWR | O_CREAT, 0666)) < 0) + if ((fd = scorefd) < 0) return; outf = (FILE *) fdopen(fd, "w"); for (scp = top_ten; scp <= &top_ten[9]; scp++) { @@ -221,11 +224,12 @@ void writelog(int amount, int aflag, char monst) { char logmessage[220], ltemp[80], mlev[40]; char *killer; - FILE *logfi; if (waswizard) return; #ifdef LOGFILE + if (logfile == NULL) + return; sprintf(logmessage, "%d %d %s %d ", time(NULL), amount, whoami, him->s_lvl); if (amulet) @@ -247,11 +251,8 @@ void writelog(int amount, int aflag, char monst) else return; strcat(logmessage, ltemp); - logfi = fopen(LOGFILE, "a"); - if (logfi == NULL) - return; - fprintf(logfi, "%s", logmessage); - fclose(logfi); + fprintf(logfile, "%s", logmessage); + fclose(logfile); #endif return; }