summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/mbbsd/bbs.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c
index bce703a4..1ce0a44f 100644
--- a/pttbbs/mbbsd/bbs.c
+++ b/pttbbs/mbbsd/bbs.c
@@ -2263,22 +2263,32 @@ read_post(int ent, fileheader_t * fhdr, const char *direct)
setdirpath(genbuf, direct, fhdr->filename);
#if defined(BN_ALLPOST) && defined(USE_LIVE_ALLPOST)
- if (strstr(genbuf, "/" BN_ALLPOST "/")) {
+ do {
+ static char allpost_base[PATHLEN] = "";
+ static int allpost_base_len = 0;
char bnbuf[IDLEN + 1] = "";
- const char *bn = strrchr(fhdr->title, '.');
+ const char *bn;
+ int bnlen;
- while (bn) {
- int bnlen = strlen(++bn) - 2;
- if (bnlen < 1 || bnlen > IDLEN)
- break;
- snprintf(bnbuf, sizeof(bnbuf), "%*.*s", bnlen, bnlen, bn);
- setbfile(genbuf, bnbuf, fhdr->filename);
+ if (!*allpost_base) {
+ setbpath(allpost_base, BN_ALLPOST);
+ strlcat(allpost_base, "/", sizeof(allpost_base));
+ allpost_base_len = strlen(allpost_base);
+ }
+
+ if (!allpost_base_len)
+ break;
+ if (strncmp(allpost_base, genbuf, allpost_base_len) != 0)
+ break;
+
+ bn = strrchr(fhdr->title, '.');
+ bnlen = strlen(++bn) - 2;
+ snprintf(bnbuf, sizeof(bnbuf), "%*.*s", bnlen, bnlen, bn);
+ setbfile(genbuf, bnbuf, fhdr->filename);
#ifdef DEBUG
- vmsgf("redirect: %s", genbuf);
+ vmsgf("redirect: %s", genbuf);
#endif
- break;
- }
- }
+ } while (0);
#endif
more_result = more(genbuf, YEA);