From 2090666ec7d9c2369fc58fcc3eeb7229a635a3b8 Mon Sep 17 00:00:00 2001 From: in2 Date: Fri, 2 Apr 2004 04:23:34 +0000 Subject: avltree tested git-svn-id: http://opensvn.csie.org/pttbbs/branches/outtacache@1671 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- cacheserver/Makefile | 10 +++++++ cacheserver/README | 1 + cacheserver/cacheserver.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 cacheserver/Makefile create mode 100644 cacheserver/README create mode 100644 cacheserver/cacheserver.c (limited to 'cacheserver') 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 + +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; +} -- cgit v1.2.3