From d2cd46ce204349e00097322cc9952ffaf1a85908 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 7 Feb 2009 19:51:22 +0100 Subject: [PATCH] Don't log out deity when gamedown() can't read downfil Broken in commit c7e2442d. Fix by factoring show_first_tel() out of gamedown() and show_motd(). --- include/prototypes.h | 1 + src/lib/player/empdis.c | 29 +------------------------- src/lib/player/player.c | 45 +++++++++++++++++++++++++---------------- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/include/prototypes.h b/include/prototypes.h index 92b18d521..e6aa58b29 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -382,6 +382,7 @@ extern int natbyname(char *, natid *); extern int natpass(int, char *); /* player.c */ extern struct player *player; /* current player's context */ +extern int show_first_tel(char *); extern char *praddr(struct player *); extern void player_main(struct player *); /* more under Commands */ diff --git a/src/lib/player/empdis.c b/src/lib/player/empdis.c index adf589dc6..685fc7a5a 100644 --- a/src/lib/player/empdis.c +++ b/src/lib/player/empdis.c @@ -48,7 +48,6 @@ #include "player.h" #include "proto.h" #include "prototypes.h" -#include "tel.h" #define KEEP_COMMANDS 50 @@ -184,40 +183,14 @@ disable_coms(void) static int gamedown(int suppress_deity_message) { - FILE *down_fp; - struct telstr tgm; - char buf[MAXTELSIZE + 1]; /* UTF-8 */ - if (!game_play_disabled()) return 0; - - if ((down_fp = fopen(downfil, "rb")) == NULL) { - logerror("Could not open downfil.\n"); - return 1; - } - if (fread(&tgm, sizeof(tgm), 1, down_fp) != 1) { - logerror("bad header on login message (downfil)"); - fclose(down_fp); - return 1; - } - if (tgm.tel_length >= (long)sizeof(buf)) { - logerror("text length (%ld) is too long for login message (downfil)", tgm.tel_length); - fclose(down_fp); - return 1; - } - if (fread(buf, tgm.tel_length, 1, down_fp) != 1) { - logerror("bad length %ld on login message", tgm.tel_length); - fclose(down_fp); - return 1; - } - buf[tgm.tel_length] = 0; - fclose(down_fp); if (player->god) { if (!suppress_deity_message) pr("The game is down\n"); return 0; } - uprnf(buf); + show_first_tel(downfil); pr("\nThe game is down\n"); return 1; } diff --git a/src/lib/player/player.c b/src/lib/player/player.c index 68851e876..29a2692f8 100644 --- a/src/lib/player/player.c +++ b/src/lib/player/player.c @@ -257,37 +257,48 @@ execute(void) int show_motd(void) { - FILE *motd_fp; + show_first_tel(motdfil); + return RET_OK; +} + +/* + * Print first telegram in file FNAME. + */ +int +show_first_tel(char *fname) +{ + FILE *fp; struct telstr tgm; char buf[MAXTELSIZE + 1]; /* UTF-8 */ - if ((motd_fp = fopen(motdfil, "rb")) == NULL) { + if ((fp = fopen(fname, "rb")) == NULL) { if (errno == ENOENT) - return RET_OK; + return 0; else { - logerror("Could not open motd (%s).\n", motdfil); - return RET_OK; + logerror("Could not open %s.\n", fname); + return -1; } } - if (fread(&tgm, sizeof(tgm), 1, motd_fp) != 1) { - logerror("bad header on login message (motdfil)"); - fclose(motd_fp); - return RET_OK; + if (fread(&tgm, sizeof(tgm), 1, fp) != 1) { + logerror("bad header on login message (%s)", fname); + fclose(fp); + return -1; } if (tgm.tel_length >= (long)sizeof(buf)) { - logerror("text length (%ld) is too long for login message (motdfil)", tgm.tel_length); - fclose(motd_fp); - return RET_OK; + logerror("text length (%ld) is too long for login message (%s)", + tgm.tel_length, fname); + fclose(fp); + return -1; } - if (fread(buf, tgm.tel_length, 1, motd_fp) != 1) { + if (fread(buf, tgm.tel_length, 1, fp) != 1) { logerror("bad length %ld on login message", tgm.tel_length); - fclose(motd_fp); - return RET_OK; + fclose(fp); + return -1; } buf[tgm.tel_length] = 0; uprnf(buf); - fclose(motd_fp); - return RET_OK; + fclose(fp); + return 0; } int -- 2.43.0