diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-04-02 12:23:34 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-04-02 12:23:34 +0800 |
commit | 2090666ec7d9c2369fc58fcc3eeb7229a635a3b8 (patch) | |
tree | 543080820a3ea98b4c0c9727a78e0967c6b3a07b | |
parent | 10d06155e35a9cd7e33ec478da50f9c87ea096c2 (diff) | |
download | pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar.gz pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar.bz2 pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar.lz pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar.xz pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.tar.zst pttbbs-2090666ec7d9c2369fc58fcc3eeb7229a635a3b8.zip |
avltree tested
git-svn-id: http://opensvn.csie.org/pttbbs/branches/outtacache@1671 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | cacheserver/Makefile | 10 | ||||
-rw-r--r-- | cacheserver/README | 1 | ||||
-rw-r--r-- | cacheserver/cacheserver.c | 73 |
3 files changed, 84 insertions, 0 deletions
diff --git a/cacheserver/Makefile b/cacheserver/Makefile new file mode 100644 index 00000000..65a64f14 --- /dev/null +++ b/cacheserver/Makefile @@ -0,0 +1,10 @@ +# $Id$ +.include "../pttbbs.mk" + +all: cacheserver + +cacheserver: cacheserver.c + ${CC} ${CFLAGS} ${LDFLAGS} -o cacheserver cacheserver.c avltree.c + +test: cacheserver + ./cacheserver -p /home/backup/ptt/PASSWDS.NEW diff --git a/cacheserver/README b/cacheserver/README new file mode 100644 index 00000000..3bfeddbc --- /dev/null +++ b/cacheserver/README @@ -0,0 +1 @@ +這是一個測試的東西. 除非確定你知道這個程式在幹什麼, 否則請不理會這個目錄 :P diff --git a/cacheserver/cacheserver.c b/cacheserver/cacheserver.c new file mode 100644 index 00000000..f6d48b0f --- /dev/null +++ b/cacheserver/cacheserver.c @@ -0,0 +1,73 @@ +/* $Id$ */ +#include "bbs.h" +#include <avltree.h> + +void usage(void) +{ + fprintf(stderr, "usage: cacheserver -p PASSWD\n"); +} + +AVL_IX_DESC avl; + +typedef struct { + int uid; + unsigned int count; + char key[IDLEN + 1]; +} rectype_t; + +int loadpasswd(char *pfn) +{ + int fd, i; + userec_t u; + rectype_t rec; + + if( pfn == NULL ){ + fprintf(stderr, "no password file!\n"); + return -1; + } + if( (fd = open(pfn, O_RDONLY)) < 0 ){ + perror("open password"); + return -1; + } + + avl_create_index(&avl, AVL_NO_DUP_KEYS, IDLEN + 1); + + for( i = 0 ; read(fd, &u, sizeof(u)) == sizeof(u) && i < 1024 ; ++i ){ + rec.uid = i; + rec.count = 0; + strlcpy(rec.key, u.userid, sizeof(rec.key)); + printf("add %s -> %d\n", rec.key, rec.uid); + avl_add_key((AVL_IX_REC*)&rec, &avl); + } + +#if 0 + rec.uid = 0; + rec.count = 0; + strcpy(rec.key, "KTDOG"); + avl_find_key((AVL_IX_REC*)&rec, &avl); + printf("%d\n", rec.uid); +#endif + return 0; +} + +int main(int argc, char **argv) +{ + int ch; + char *pfn = NULL; + while( (ch = getopt(argc, argv, "p:h")) != -1 ) + switch( ch ){ + case 'p': + pfn = strdup(optarg); + break; + + case 'h': + default: + usage(); + return 1; + } + + if( loadpasswd(pfn) < 0 ) + return 1; + + return 0; +} |