diff options
Diffstat (limited to 'mbbsd/file.c')
-rw-r--r-- | mbbsd/file.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/mbbsd/file.c b/mbbsd/file.c index 2c9374bf..e1422713 100644 --- a/mbbsd/file.c +++ b/mbbsd/file.c @@ -2,6 +2,14 @@ #include "bbs.h" +/** + * file.c 是針對以"行"為單位的檔案所定義的一些 operation。 + **/ + +/** + * 傳回 file 檔的行數 + * @param file + */ int file_count_line(char *file) { FILE *fp; @@ -9,13 +17,22 @@ int file_count_line(char *file) char buf[200]; if ((fp = fopen(file, "r"))) { - while (fgets(buf, sizeof(buf), fp)) + while (fgets(buf, sizeof(buf), fp)) { + if (strchr(buf, '\n') == NULL) + continue; count++; + } fclose(fp); } return count; } +/** + * 將 string append 到檔案 file 後端 + * @param file 要被 append 的檔 + * @param string + * @return 成功傳回 0,失敗傳回 -1。 + */ int file_append_line(char *file, char *string) { FILE *fp; @@ -29,7 +46,12 @@ int file_append_line(char *file, char *string) } #ifndef _BBS_UTIL_C_ -/* Rename() is in kaede.c but not linked to util/ */ +/** + * 從檔案 file 中刪除 prefix 為 string 的每一行。(小心 race) + * @param file + * @param string + * @param case_sensitive 字串比對是否 case sensitive + */ int file_delete_line(char *file, char *string, int case_sensitive) { FILE *fp, *nfp = NULL; @@ -56,6 +78,9 @@ int file_delete_line(char *file, char *string, int case_sensitive) } #endif +/** + * 傳回檔案 file 中是否有 string 這個字串。 + */ int file_exist_record(char *file, char *string) { FILE *fp; @@ -72,6 +97,13 @@ int file_exist_record(char *file, char *string) return 0; } +/** + * 對每一筆 record 做 func 這件事。 + * @param file + * @param func 處理每筆 record 的 handler,為一 function pointer。 + * 第一個參數是檔案中的一行,第二個參數為 info。 + * @param info 一個額外的參數。 + */ int file_foreach_entry(char *file, int (*func)(char *, int), int info) { char line[80]; |