summaryrefslogtreecommitdiffstats
path: root/mbbsd/friend.c
diff options
context:
space:
mode:
authorvictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2006-05-17 19:45:14 +0800
committervictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2006-05-17 19:45:14 +0800
commit6ace55395308b16ef451d8fc99cc52bdc64fa467 (patch)
treed6078915af819260ed0550f9dfffe9eb7df04c00 /mbbsd/friend.c
parentf1a8a8052cf6d266b3a5c50fea8af0a9b4f7df59 (diff)
downloadpttbbs-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.c32
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 {