diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-04-15 14:01:18 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-04-15 14:01:18 +0800 |
commit | c69caa3697a50b29e96cdc98ced1507069df178f (patch) | |
tree | 68a16cd04b3ac19020d68ae23bbc909ea040e1d8 | |
parent | 9ec4fc081a1fd78cbdbe3e09c19c9bcb540f09be (diff) | |
download | pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar.gz pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar.bz2 pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar.lz pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar.xz pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.tar.zst pttbbs-c69caa3697a50b29e96cdc98ced1507069df178f.zip |
reduce MALLOC()/FREE()
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@795 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | mbbsd/board.c | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/mbbsd/board.c b/mbbsd/board.c index c39f704d..30501181 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -1,4 +1,4 @@ -/* $Id: board.c,v 1.122 2003/04/08 16:05:03 victor Exp $ */ +/* $Id: board.c,v 1.123 2003/04/15 06:01:18 in2 Exp $ */ #include "bbs.h" #define BRC_STRLEN 15 /* Length of board name */ #define BRC_MAXSIZE 24576 @@ -718,9 +718,7 @@ load_boards(char *key) int type = cuser.uflag & BRDSORT_FLAG ? 1 : 0; int i, n; int state; -#ifdef CRITICAL_MEMORY - boardstat_t *tmpnbrd; -#endif + char byMALLOC = 0, needREALLOC = 0; if (class_bid > 0) { bptr = &bcache[class_bid - 1]; @@ -733,8 +731,8 @@ load_boards(char *key) nbrd = NULL; } if (class_bid <= 0) { - nbrd = (boardstat_t *) MALLOC(sizeof(boardstat_t) * numboards); if( yank_flag == 0 ){ // fav mode + nbrd = (boardstat_t *)malloc(sizeof(boardstat_t) * fav->nDatas); for( i = 0 ; i < fav->nDatas ; ++i ){ if( fav->b[i].attr & BRD_FAV ){ if( fav->b[i].attr & BRD_LINE ) @@ -746,8 +744,11 @@ load_boards(char *key) } } } + byMALLOC = 0; + needREALLOC = (fav->nDatas != brdnum); } else{ // general case + nbrd = (boardstat_t *) MALLOC(sizeof(boardstat_t) * numboards); for (i = 0; i < numboards; i++) { if ((bptr = SHM->bsorted[type][i]) == NULL) continue; @@ -760,12 +761,19 @@ load_boards(char *key) continue; addnewbrdstat(n, state); } +#ifdef CRITICAL_MEMORY + byMALLOC = 1; +#else + byMALLOC = 0; +#endif + needREALLOC = 1; } if (class_bid == -1) qsort(nbrd, brdnum, sizeof(boardstat_t), cmpboardfriends); } else { - nbrd = (boardstat_t *) MALLOC(bptr->childcount * sizeof(boardstat_t)); + int childcount = bptr->childcount; + nbrd = (boardstat_t *) malloc(childcount * sizeof(boardstat_t)); for (bptr = bptr->firstchild[type]; bptr != (boardheader_t *) ~ 0; bptr = bptr->next[type]) { n = (int)(bptr - bcache); @@ -775,15 +783,22 @@ load_boards(char *key) continue; addnewbrdstat(n, state); } + byMALLOC = 0; + needREALLOC = (childcount != brdnum); + } + + if( needREALLOC ){ + if( byMALLOC ){ + boardstat_t *newnbrd; + newnbrd = (boardstat_t *)malloc(sizeof(boardstat_t) * brdnum); + memcpy(newnbrd, nbrd, sizeof(boardstat_t) * brdnum); + FREE(nbrd); + nbrd = newnbrd; + } + else { + nbrd = (boardstat_t *)realloc(nbrd, sizeof(boardstat_t) * brdnum); + } } -#ifndef CRITICAL_MEMORY - nbrd = realloc(nbrd, sizeof(boardstat_t) * brdnum); -#else - tmpnbrd = (boardstat_t *) malloc(sizeof(boardstat_t) * brdnum); - memcpy(tmpnbrd, nbrd, sizeof(boardstat_t) * brdnum); - FREE(nbrd); - nbrd = tmpnbrd; -#endif } static int |