diff options
author | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-09-20 20:57:23 +0800 |
---|---|---|
committer | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-09-20 20:57:23 +0800 |
commit | 81c98e60178549e9933961219d370252e91198cb (patch) | |
tree | 1b8d399ee196b1d1cdbd152ab261c0e598d20fc0 /mbbsd/file.c | |
parent | c909e6f54001e88ab3017d9e5ac49d60da6b00cd (diff) | |
download | pttbbs-81c98e60178549e9933961219d370252e91198cb.tar pttbbs-81c98e60178549e9933961219d370252e91198cb.tar.gz pttbbs-81c98e60178549e9933961219d370252e91198cb.tar.bz2 pttbbs-81c98e60178549e9933961219d370252e91198cb.tar.lz pttbbs-81c98e60178549e9933961219d370252e91198cb.tar.xz pttbbs-81c98e60178549e9933961219d370252e91198cb.tar.zst pttbbs-81c98e60178549e9933961219d370252e91198cb.zip |
fix bug: when deleting an user, the aloha record won't be deleted.
add file: file.c, move some useful subroutine out of friend.c
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2205 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/file.c')
-rw-r--r-- | mbbsd/file.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/mbbsd/file.c b/mbbsd/file.c new file mode 100644 index 00000000..aced35ff --- /dev/null +++ b/mbbsd/file.c @@ -0,0 +1,83 @@ +/* $Id: file.c 2191 2004-09-10 00:49:47Z victor $ */ + +#include "bbs.h" + +int file_count_line(char *file) +{ + FILE *fp; + int count = 0; + char buf[200]; + + if ((fp = fopen(file, "r"))) { + while (fgets(buf, sizeof(buf), fp)) + count++; + fclose(fp); + } + return count; +} + +int file_append_line(char *file, char *string) +{ + FILE *fp; + if ((fp = fopen(file, "a")) == NULL) + return -1; + flock(fileno(fp), LOCK_EX); + fputs(string, fp); + flock(fileno(fp), LOCK_UN); + fclose(fp); + return 0; +} + +int file_delete_line(char *file, char *string) +{ + FILE *fp, *nfp = NULL; + char fnew[80]; + char genbuf[STRLEN + 1]; + + sprintf(fnew, "%s.%3.3X", file, rand() & 0xFFF); + if ((fp = fopen(file, "r")) && (nfp = fopen(fnew, "w"))) { + int length = strlen(string); + + while (fgets(genbuf, sizeof(genbuf), fp)) + if ((genbuf[0] > ' ') && strncmp(genbuf, string, length)) + fputs(genbuf, nfp); + Rename(fnew, file); + } + if(fp) + fclose(fp); + if(nfp) + fclose(nfp); + return 0; +} + +int file_exist_record(char *file, char *string) +{ + FILE *fp; + char buf[STRLEN], *ptr; + + if ((fp = fopen(file, "r")) == NULL) + return 0; + + while (fgets(buf, STRLEN, fp)) { + if ((ptr = strtok(buf, str_space)) && !strcasecmp(ptr, string)) + return 1; + } + fclose(fp); + return 0; +} + +int file_foreach_entry(char *file, int (*func)(char *, int), int info) +{ + char line[80]; + FILE *fp; + + if ((fp = fopen(file, "r")) == NULL) + return -1; + + while (fgets(line, sizeof(line), fp)) { + (*func)(line, info); + } + + fclose(fp); + return 0; +} |