diff options
author | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2006-05-17 19:45:14 +0800 |
---|---|---|
committer | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2006-05-17 19:45:14 +0800 |
commit | 6ace55395308b16ef451d8fc99cc52bdc64fa467 (patch) | |
tree | d6078915af819260ed0550f9dfffe9eb7df04c00 /mbbsd/friend.c | |
parent | f1a8a8052cf6d266b3a5c50fea8af0a9b4f7df59 (diff) | |
download | pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar.gz pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar.bz2 pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar.lz pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar.xz pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.tar.zst pttbbs-6ace55395308b16ef451d8fc99cc52bdc64fa467.zip |
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
Diffstat (limited to 'mbbsd/friend.c')
-rw-r--r-- | mbbsd/friend.c | 32 |
1 files changed, 30 insertions, 2 deletions
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 { |