From 6ace55395308b16ef451d8fc99cc52bdc64fa467 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 17 May 2006 11:45:14 +0000 Subject: fix bug: delete a user called USER from user list also removes others called USERetc git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3356 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/file.c | 33 --------------------------------- mbbsd/friend.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 35 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/file.c b/mbbsd/file.c index a5937673..343822b7 100644 --- a/mbbsd/file.c +++ b/mbbsd/file.c @@ -45,39 +45,6 @@ int file_append_line(const char *file, const char *string) return 0; } -#ifndef _BBS_UTIL_C_ -/** - * 從檔案 file 中刪除 prefix 為 string 的每一行。(小心 race) - * @param file - * @param string - * @param case_sensitive 字串比對是否 case sensitive - */ -int file_delete_line(const char *file, const char *string, int case_sensitive) -{ - FILE *fp, *nfp = NULL; - char fnew[80]; - char genbuf[STRLEN + 1]; - - sprintf(fnew, "%s.%3.3X", file, (unsigned int)(random() & 0xFFF)); - if ((fp = fopen(file, "r")) && (nfp = fopen(fnew, "w"))) { - int length = strlen(string); - - while (fgets(genbuf, sizeof(genbuf), fp)) - if ((genbuf[0] > ' ')) { - if (((case_sensitive && strncmp(genbuf, string, length)) || - (!case_sensitive && strncasecmp(genbuf, string, length)))) - fputs(genbuf, nfp); - } - Rename(fnew, file); - } - if(fp) - fclose(fp); - if(nfp) - fclose(nfp); - return 0; -} -#endif - /** * 傳回檔案 file 中是否有 string 這個字串。 */ diff --git a/mbbsd/friend.c b/mbbsd/friend.c index 8f62713f..7d7d3720 100644 --- a/mbbsd/friend.c +++ b/mbbsd/friend.c @@ -179,12 +179,40 @@ friend_append(int type, int count) } } +static int +delete_friend_from_file(const char *file, const char *string, int case_sensitive) +{ + FILE *fp, *nfp = NULL; + char fnew[80]; + char genbuf[STRLEN + 1]; + + sprintf(fnew, "%s.%3.3X", file, (unsigned int)(random() & 0xFFF)); + if ((fp = fopen(file, "r")) && (nfp = fopen(fnew, "w"))) { + int length = strlen(string); + + while (fgets(genbuf, sizeof(genbuf), fp)) + if ((genbuf[0] > ' ')) { + char buf[32]; + sscanf(genbuf, " %s", &buf); + if (((case_sensitive && strcmp(buf, string)) || + (!case_sensitive && strcasecmp(buf, string)))) + fputs(genbuf, nfp); + } + Rename(fnew, file); + } + if(fp) + fclose(fp); + if(nfp) + fclose(nfp); + return 0; +} + void friend_delete(const char *uident, int type) { char fn[80]; setfriendfile(fn, type); - file_delete_line(fn, uident, 0); + delete_friend_from_file(fn, uident, 0); } static void @@ -195,7 +223,7 @@ delete_user_friend(const char *uident, const char *thefriend, int type) if (type == FRIEND_ALOHA) { #endif sethomefile(fn, uident, "aloha"); - file_delete_line(fn, thefriend, 0); + delete_friend_from_file(fn, thefriend, 0); #if 0 } else { -- cgit v1.2.3