summaryrefslogtreecommitdiffstats
path: root/mbbsd/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'mbbsd/file.c')
-rw-r--r--mbbsd/file.c36
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];