diff options
author | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-11-17 14:22:29 +0800 |
---|---|---|
committer | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-11-17 14:22:29 +0800 |
commit | 1e4d4c78b043cf336ebd25634f5137a412539c8c (patch) | |
tree | 78ccad41cea3e9e5b99eaa1ea0c0ef3f39ccd0e6 /util | |
parent | 1f197b3f501e0b9412e7686ec6b26b8cf39f0213 (diff) | |
download | pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar.gz pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar.bz2 pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar.lz pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar.xz pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.tar.zst pttbbs-1e4d4c78b043cf336ebd25634f5137a412539c8c.zip |
remove all pointers in SHM_t
git-svn-id: http://opensvn.csie.org/pttbbs/branches/ptt.linux@2336 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'util')
-rw-r--r-- | util/boardlist.c | 70 | ||||
-rw-r--r-- | util/shmctl.c | 34 |
2 files changed, 53 insertions, 51 deletions
diff --git a/util/boardlist.c b/util/boardlist.c index b6aae6ee..abc78b24 100644 --- a/util/boardlist.c +++ b/util/boardlist.c @@ -5,30 +5,30 @@ static void load_uidofgid(const int gid, const int type) { - boardheader_t *bptr, *currbptr; - int n, childcount = 0; - currbptr = &bcache[gid - 1]; + boardheader_t *bptr, *currbptr, *parent; + int bid, n, childcount = 0; + currbptr = parent = &bcache[gid - 1]; for (n = 0; n < numboards; ++n) { - if(SHM->bsorted[type][n]<0) continue; - bptr = &SHM->bcache[SHM->bsorted[type][n]]; - if( bptr->brdname[0] == '\0' ) - continue; - if (bptr->gid == gid) { - if (currbptr == &bcache[gid - 1]) - currbptr->firstchild[type] = bptr; - else { - currbptr->next[type] = bptr; - currbptr->parent = &bcache[gid - 1]; - } - childcount++; - currbptr = bptr; - } + bid = SHM->bsorted[type][n]+1; + if( bid<=0 || !(bptr = &bcache[bid-1]) + || bptr->brdname[0] == '\0' ) + continue; + if (bptr->gid == gid) { + if (currbptr == parent) + currbptr->firstchild[type] = bid; + else { + currbptr->next[type] = bid; + currbptr->parent = gid; + } + childcount++; + currbptr = bptr; + } } - bcache[gid - 1].childcount = childcount; - if (currbptr == &bcache[gid - 1]) - currbptr->firstchild[type] = NULL; - else - currbptr->next[type] = NULL; + parent->childcount = childcount; + if (currbptr == parent) // no child + currbptr->firstchild[type] = -1; + else // the last child + currbptr->next[type] = -1; } char *skipEscape(char *s) @@ -83,34 +83,36 @@ void dumpdetail(void) } } -void dumpclass(int bid) +void dumpclass(int gid) { boardheader_t *bptr; - bptr = &bcache[bid]; - if (bptr->firstchild[0] == NULL || bptr->childcount <= 0) - load_uidofgid(bid + 1, 0); /* 因為這邊 bid從 0開始, 所以再 +1 回來 */ - printf("$db{'class.%d'} = $serializer->serialize([", bid); - for (bptr = bptr->firstchild[0]; bptr != NULL ; bptr = bptr->next[0]) { + int bid; + bptr = getbcache(gid); + if (bptr->firstchild[0] == 0 || bptr->childcount <= 0) + load_uidofgid(gid, 0); + printf("$db{'class.%d'} = $serializer->serialize([", gid); + for (bid = bptr->firstchild[0]>0; bid >0 ; bid =bptr->next[0]) { + bptr = getbcache(bid); if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && (bptr->level & ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) continue; - printf("%5d,\t", bptr - bcache); + printf("%5d,\t", bid); } printf("]);\n"); - bptr = &bcache[bid]; - for (bptr = bptr->firstchild[0]; bptr != NULL ; bptr = bptr->next[0]) { + bptr = getbcache(gid); + for (bid = bptr->firstchild[0]>0; bid >0 ; bid =bptr->next[0]) { + bptr = getbcache(bid); if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && (bptr->level & ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) continue; - if( bptr->brdattr & BRD_GROUPBOARD ) - dumpclass(bptr - bcache); + dumpclass(bid); } } @@ -153,7 +155,7 @@ int main(int argc, char **argv) "$serializer = Data::Serializer->new(serializer => 'Storable', digester => 'MD5',compress => 0,);\n" "tie %%db, 'DB_File', 'boardlist.db', (O_RDWR | O_CREAT), 0666, $DB_HASH;\n" ); - dumpclass(0); + dumpclass(1); dumpdetail(); dumpallbrdname(); printf("untie %%db;\n"); diff --git a/util/shmctl.c b/util/shmctl.c index 68e66dbb..5436f09d 100644 --- a/util/shmctl.c +++ b/util/shmctl.c @@ -224,33 +224,33 @@ int utmpfix(int argc, char **argv) /* utmpsortd --------------------------------------------------------------- */ static int -cmputmpuserid(int i, int j) +cmputmpuserid(const void * i, const void * j) { - return strcasecmp(SHM->uinfo[i].userid, SHM->uinfo[j].userid); + return strcasecmp(SHM->uinfo[*(int*)i].userid, SHM->uinfo[*(int*)j].userid); } static int -cmputmpmode(int i, int j) +cmputmpmode(const void * i, const void * j) { - return SHM->uinfo[i].mode - SHM->uinfo[j].mode; + return SHM->uinfo[*(int*)i].mode - SHM->uinfo[*(int*)j].mode; } static int -cmputmpidle(int i, int j) +cmputmpidle(const void * i, const void * j) { - return SHM->uinfo[i].lastact - SHM->uinfo[j].lastact; + return SHM->uinfo[*(int*)i].lastact - SHM->uinfo[*(int*)j].lastact; } static int -cmputmpfrom(int i, int j) +cmputmpfrom(const void * i, const void * j) { - return strcmp(SHM->uinfo[i].from, SHM->uinfo[j].from); + return strcmp(SHM->uinfo[*(int*)i].from, SHM->uinfo[*(int*)j].from); } static int -cmputmpfive(int i, int j) +cmputmpfive(const void * i, const void * j) { - userinfo_t *a=&SHM->uinfo[i],*b=&SHM->uinfo[j]; + userinfo_t *a=&SHM->uinfo[*(int*)i],*b=&SHM->uinfo[*(int*)j]; int played_a=(a->five_win+a->five_lose+a->five_lose)!=0; int played_b=(b->five_win+b->five_lose+b->five_lose)!=0; int type; @@ -267,9 +267,9 @@ cmputmpfive(int i, int j) } static int -cmputmpchc(int i, int j) +cmputmpchc(const void * i, const void * j) { - userinfo_t *a=&SHM->uinfo[i],*b=&SHM->uinfo[j]; + userinfo_t *a=&SHM->uinfo[*(int*)i],*b=&SHM->uinfo[*(int*)j]; int total_a=a->chc_win+a->chc_lose+a->chc_lose; int total_b=b->chc_win+b->chc_lose+b->chc_lose; int played_a=(total_a!=0); @@ -303,15 +303,15 @@ cmputmpchc(int i, int j) } static int -cmputmppid(int i, int j) +cmputmppid(const void * i, const void * j) { - return SHM->uinfo[i].pid - SHM->uinfo[j].pid; + return SHM->uinfo[*(int*)i].pid - SHM->uinfo[*(int*)j].pid; } static int -cmputmpuid(int i, int j) +cmputmpuid(const void * i, const void * j) { - return SHM->uinfo[i].uid - SHM->uinfo[j].uid; + return SHM->uinfo[*(int*)i].uid - SHM->uinfo[*(int*)j].uid; } inline void utmpsort(int sortall) @@ -347,7 +347,7 @@ inline void utmpsort(int sortall) SHM->sorted[ns][0], sizeof(int) * count); qsort(SHM->sorted[ns][6], count, sizeof(int), cmputmpuid); qsort(SHM->sorted[ns][7], count, sizeof(int), cmputmppid); - if( sortall ){ + if( sortall !=-1){ memcpy(SHM->sorted[ns][1], SHM->sorted[ns][0], sizeof(int) * count); memcpy(SHM->sorted[ns][2], |