summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-09-27 00:18:36 +0800
committerin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-09-27 00:18:36 +0800
commit20f4eb0044ca077e5b3eee0bd45db5416ffc635c (patch)
treeae0b255b822c4e86d3897aee421f4fc5150edda1
parent9dd48ea3c05e2da29544b57b9ffc609d38014ff2 (diff)
downloadpttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar.gz
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar.bz2
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar.lz
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar.xz
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.tar.zst
pttbbs-20f4eb0044ca077e5b3eee0bd45db5416ffc635c.zip
only read favbuf & brdbuf before one need it,
save them when logout if memory is correct (by MEM_CHECK) and they were loaded git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@530 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--mbbsd/board.c41
-rw-r--r--mbbsd/mbbsd.c3
2 files changed, 33 insertions, 11 deletions
diff --git a/mbbsd/board.c b/mbbsd/board.c
index e41f2c5f..4d76e8dd 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -1,4 +1,4 @@
-/* $Id: board.c,v 1.59 2002/09/11 09:47:32 kcwu Exp $ */
+/* $Id: board.c,v 1.60 2002/09/26 16:18:35 in2 Exp $ */
#include "bbs.h"
#define BRC_STRLEN 15 /* Length of board name */
#define BRC_MAXSIZE 24576
@@ -233,8 +233,16 @@ void load_brdbuf(void)
char fname[80];
size = (numboards + 32) * sizeof(int);
+#ifdef MEM_CHECK
+ size += 4;
+#endif
zapbuf = (int *)malloc(size);
favbuf = (int *)malloc(size);
+#ifdef MEM_CHECK
+ zapbuf[0] = favbuf[0] = MEM_CHECK;
+ zapbuf = &zapbuf[1];
+ favbuf = &favbuf[1];
+#endif
zapchange = favchange = 0;
if( firsttime ){
@@ -268,7 +276,7 @@ init_brdbuf()
}
void
-free_brdbuf()
+save_brdbuf()
{
int fd, size;
char fname[60];
@@ -276,23 +284,40 @@ free_brdbuf()
size = numboards * sizeof(int);
setuserfile(fname, STR_BBSRC);
if ( zapbuf != NULL ){
- if( zapchange &&
- (fd = open(fname, O_WRONLY | O_CREAT, 0600)) != -1) {
+ if( (
+#ifdef MEM_CHECK
+ zapbuf[-1] == MEM_CHECK &&
+#endif
+ zapchange &&
+ (fd = open(fname, O_WRONLY | O_CREAT, 0600)) != -1) ){
write(fd, zapbuf, size);
close(fd);
}
+#ifdef MEM_CHECK
+ free(&zapbuf[-1]);
+#else
free(zapbuf);
+#endif
zapbuf = NULL;
}
+
setuserfile(fname, STR_FAV);
if ( favbuf != NULL ){
- if( favchange &&
- (fd = open(fname, O_WRONLY | O_CREAT, 0600)) != -1) {
+ if( (
+#ifdef MEM_CHECK
+ favbuf[-1] == MEM_CHECK &&
+#endif
+ favchange &&
+ (fd = open(fname, O_WRONLY | O_CREAT, 0600)) != -1) ){
size = numboards * sizeof(int);
write(fd, favbuf, size);
close(fd);
}
+#ifdef MEM_CHECK
+ free(&favbuf[-1]);
+#else
free(favbuf);
+#endif
favbuf = NULL;
}
}
@@ -717,7 +742,6 @@ choose_board(int newflag)
boardstat_t *ptr;
int head = -1, ch = 0, currmodetmp, tmp, tmp1, bidtmp;
char keyword[13] = "";
- static char depth = 0;
#if HAVE_SEARCH_ALL
char genbuf[200];
#endif
@@ -725,7 +749,6 @@ choose_board(int newflag)
setutmpmode(newflag ? READNEW : READBRD);
if( zapbuf == NULL || favbuf == NULL )
load_brdbuf();
- ++depth;
brdnum = 0;
if (!cuser.userlevel) /* guest yank all boards */
yank_flag = 2;
@@ -1090,8 +1113,6 @@ choose_board(int newflag)
}
} while (ch != 'q');
free(nbrd);
- if( --depth == 0 )
- free_brdbuf();
}
int
diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c
index b74a9a22..0adb2756 100644
--- a/mbbsd/mbbsd.c
+++ b/mbbsd/mbbsd.c
@@ -1,4 +1,4 @@
-/* $Id: mbbsd.c,v 1.57 2002/09/18 01:02:23 in2 Exp $ */
+/* $Id: mbbsd.c,v 1.58 2002/09/26 16:18:36 in2 Exp $ */
#include "bbs.h"
#define SOCKET_QLEN 4
@@ -166,6 +166,7 @@ u_exit(char *mode)
auto_backup();
setflags(PAGER_FLAG, currutmp->pager != 1);
setflags(CLOAK_FLAG, currutmp->invisible);
+ save_brdbuf();
cuser.invisible = currutmp->invisible;
cuser.pager = currutmp->pager;