A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 函數名稱 | 檔案位置 | 說明 | 細節 | ||||||||||||||||||||||
2 | setbpath (char *buf, const char *boardname) | path.c | 設定檔案路徑的前半部(目錄) | setbpath 產生檔案路徑的前半部,塞回 buf 路徑名稱為 boards/%c/%s,其中 %c 為 boardname 的第一個字元,%s 為 boardname | ||||||||||||||||||||||
3 | stampfile (char *fpath, fileheader_t *fh) | fhdr_stamp.c | 設定檔案路徑的後半部(檔名)並建立檔案 | stampfile 隨機產生檔案名稱並將檔案建出來,如果成功回傳 0,否則回傳 -1 stampfile 會在 fileheader 寫入 fname 與 date 檔案名稱為 M.%d.A.%3.3X,其中%d 為 timestamp,%3.3X 為亂數 | ||||||||||||||||||||||
4 | setbtotal | cache.c | 更新SHM中某看板的文章數量和最後更新時間 | |||||||||||||||||||||||
5 | post_msg2 (const char* bname, const char* title, const char* msg, const char* author, char* output_path) | syspost.c | 發出看板警察之類的訊息 | post_msg2 在看板 bname 上新增一個標題為 title 內文為 msg 作者為 author 的文章,如果output_path傳入不為 null 的話會將檔案儲存的位置寫回 output_path 。 post_msg2 除了將 msg 寫入檔案內以外,還會新增作者、看板、標題以及時間的標頭。 寫入檔案後 post_msg2 會將新地標頭資訊 append 到原本的 .DIR 檔案之後 寫入文章後會呼叫 setbtotal 來更新目前某看板的最後文章數量以及最後更新時間 | ||||||||||||||||||||||
6 | ||||||||||||||||||||||||||
7 | ||||||||||||||||||||||||||
8 | static int write_file(const char *fpath, int saveheader, char mytitle[STRLEN], int flags, int *pentropy) | edit.c | 標準的發文 | 依設定印出提示使用者操作的文字 switch { 使用者輸入 'a' (放棄),設為 aborted,跳出 switch case 使用者輸入 'e' (繼續),回傳 KEEP_EDITING 如果能上傳資料,且使用者輸入 'u' (上傳資料),呼叫 upload_file() 並回傳 KEEP_EDITING 使用者輸入 'r' (讀取暫存檔),呼叫 read_tmpbuf(-1) 並回傳 KEEP_EDITING 使用者輸入 'w' (寫入暫存檔),呼叫 write_tmpbuf() 並回傳 KEEP_EDITING 使用者輸入 'd' (刪除暫存檔),呼叫 erase_tmpbuf() 並回傳 KEEP_EDITING 使用者輸入 't' (改標題)。若不能改標題的話回傳 KEEP_EDITING,可以的話則讓使用者更改舊標題並回傳 KEEP_EDITING 使用者輸入 's' (依設定可為儲存、發文、發信),跳出 switch case } 如果非 aborted,檢查是否要直接回傳 KEEP_EDITING、abort、還是將標題寫入 如果非 aborted,印出 message body. (Line: 2050) 如果 aborted,回傳 aborted 如果 currstat == POSTING or SMAIL,呼叫 addsignature 如果 currstat == REEDIT,印出編輯訊息 | ||||||||||||||||||||||
9 | ||||||||||||||||||||||||||
10 | ||||||||||||||||||||||||||
11 | modify_dir_lite( const char *direct, int ent, const char *fhdr_name, time4_t modified, const char *title, const char *owner, const char *date, char recommend, void *multi, uint8_t enable_modes, uint8_t disable_modes) | bbs.c | 他說是輕量版的更新DIR檔 | modify_dir_lite 會更新位於 direct 的 .DIR 的第ent項紀錄,ent為從1開始的索引,direct 為字串。 如果 fhdr_name 和該 ent 的 fileheader filename不同時,會回傳 -1, 不會修改 filename。 如果 modified 不為 0 時,修改 fileheader。 如果 enable_modes 不為 0 時,filemode 增加 flag, 如果 disable_modes 不為 0 時,取消 flag。 如果 title, owner, date, multi 不為 NULL 且非空字串時,更新該欄位。 如果 recommend 不為0時,增減輸入進去的recommend 直,最大最小值分別為 MAX_RECOMMENDS 和 -MAX_RECOMMENDS 以前好像有寫鎖,但是目前好像沒了...? | ||||||||||||||||||||||
12 | ||||||||||||||||||||||||||
13 | ||||||||||||||||||||||||||
14 | ||||||||||||||||||||||||||
15 | ||||||||||||||||||||||||||
16 | ||||||||||||||||||||||||||
17 | do_add_recommend (const char *direct, fileheader_t *fhdr, int ent, const char *buf, int type) | bbs.c | 推文或是在底下新增一行 | fhdr: 文章的 header 對應到 go-bbs 內的 ArticleRecord ent: 寫入成功後,呼叫 modify_dir_lite 使用,詳細可參考 modify_dir_lite 說明。 buf: 使用者的留言 (處理過的完整文字) type: 留言的種類 (推 or 噓) do_add_recommend 會將使用者的留言寫入文章檔案的最後一行。 根據留言的種類計算推薦數,推文會將推薦數+1,噓文會將推薦數-1,並更新 fhdr->recommend。 do_add_recommend 會將要增加的文字 buf 加入direct .DIR底下的fhdr->filename 的最後一行, ent在最後推文成功後呼叫modify_dir_lite所使用,後續請參閱modify_dir_lite。 START BEGINSTAT(STAT_DORECOMMEND); 使用O_APPEND方式開啟來達成只增加至最後一行 如果檔案開啟失敗goto error * 註1 更新成功後比對推文的type 如果為推文且推文數小於MAX_RECOMMENDS update = 1 如果為噓文且推文數大於-MAX_RECOMMENDS update = -1 fhdr->recommend += update; 並呼叫dasht取得最後文件修改時間 如果取得修改時間成功,呼叫modify_dir_lite,成功後呼叫brc_addlist將文章加入已讀 ENDSTAT(STAT_DORECOMMEND); return 0; error: ENDSTAT(STAT_DORECOMMEND); return -1; END * 註1: 此處有#ifdef針對如果有EDITPOST_SMARTMERGE tag的話有另外的邏輯 如果沒有EDITPOST_SMARTMERGE為上述直接加入文件最後 有設定EDITPOST_SMARTMERGE的話,會針對文件是否有LOCK進行retry | ||||||||||||||||||||||
18 | ||||||||||||||||||||||||||
19 | ||||||||||||||||||||||||||
20 | ||||||||||||||||||||||||||
21 | cross_post (int ent, fileheader_t * fhdr, const char *direct) | bbs.c | 轉貼文章 | cross_post 會詢問使用者要轉錄文章至哪個看板,還有要使用的標題,並在檢查看板權限&發文權限後在目標看板下新增文章。 同時會在原文章下方新增轉錄資訊,在目標看板下的新文章註記轉錄資訊,並更新 ALLPOST 透過 SHM 拿取 board cache 後進行以下檢查 如果目標看板是連署機看板(BRD_VOTEBOARD),回傳 DONOTHING 如果文章被刪除(fhdr->owner[0] == '-'),回傳 DONOTHING 如果文章檔案不存在,輸出錯誤訊息,回傳 FULLUPDATE 如果是違法使用者(PERM_VIOLATELAW),當轉貼次數大於等於 MAX_CROSSNUM 時,回傳 DONOTHING 如果是尚未註冊認證的使用者(!PERM_LOGINOK),輸出錯誤訊息,回傳 FULLUPDATE 輸出提示文字,提示使用者將要進行文章轉錄 如果看板自動留轉錄記錄(BRD_CPLOG), 並且沒有發文權限(!CheckPostPerm())或者不滿足發文限制(!CheckPostRestriction(currbid)),輸出錯誤訊息,回傳 FULLUPDATE 詢問要轉錄至哪個看板 如果沒有輸入看板,回傳 FULLUPDATE 如果看板不存在或者沒有發文權限,輸出錯誤訊息,回傳 FULLUPDATE 詢問是否採用原標題,或者輸入新標題 詢問是否確認發文或者取消,如果取消回傳 FULLUPDATE 呼叫 setbpath & stampfile 建立新文章檔案,若失敗輸出錯誤訊息,回傳 FULLUPDATE 呼叫 write_header 寫入新文章的標頭,包含作者、看板、標題、時間 依據目前看板是否為隱形看板(!IS_OPENBRD),寫入轉錄資訊到新文章 呼叫 addforwardsignature 在新文章尾巴加上 signature 呼叫 log_crosspost_in_allpost 在 ALLPOST 新增新文章 呼叫 do_add_recommend 在原文章下方新增轉錄資訊 呼叫 append_record 在看板.DIR下寫入文章標頭 呼叫 setbtotal 更新看板的文章數量與最後更新時間 輸出 "文章轉錄完成。(轉錄不增加文章數,敬請包涵)\n\n" 回傳 FULLUPDATE | ||||||||||||||||||||||
22 | CheckPostPerm() | bbs.c | 檢查發文權限 | |||||||||||||||||||||||
23 | CheckPostRestriction() | bbs.c | 檢查發文限制 | |||||||||||||||||||||||
24 | ||||||||||||||||||||||||||
25 | ||||||||||||||||||||||||||
26 | void read_tmpbuf(int n) | edit.c | 讀取暫存檔 | 參數 n 為暫存檔 id 檢查當前文章的總行數是否超過 EDIT_LINE_LIMIT(65530)。 檢查 n(暫存檔 id)是否在 0 ~ 9 區間內,若不在則重新詢問使用者要選擇編號幾號的暫存檔。 若 n(暫存檔 id)非 0 或 5 則詢問使用者是否確定要讀入(預設為讀入)。 若使用者回答非 'n'(確定讀入),則讀入指定暫存檔。 | ||||||||||||||||||||||
27 | void write_tmpbuf(void) | edit.c | 寫入暫存檔 | wite_tmpbuf 沒有參數 write_tmpbuf 會先詢問使用者要選擇哪一個暫存檔 選定暫存檔後會檢查暫存檔有沒有資料 假如有資料的話會詢問使用者 (A)附加 (W)覆寫 (Q)取消 假如選擇(Q)取消,直接return 假如選擇(A)附加,會先檢查現有暫存檔的大小是否超過限制 (EDIT_SIZE_LIMIT (32768*1024)),然後打開暫存檔做append的動作 假如選擇(W)覆寫,會直接打開暫存檔做write的動作 | ||||||||||||||||||||||
28 | void erase_tmpbuf(void) | edit.c | 刪除暫存檔 | erase_tmpbuf沒有參數。 內部函數會從使用者端得到要刪除編號幾的草稿(最多10個)。 若欲刪除草稿不為空(可能會用類似Linux指令more讓使用者預覽),會再次向使用者確認是否刪除。 若確認,則刪除草稿。 | ||||||||||||||||||||||
29 | ||||||||||||||||||||||||||
30 | ||||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||
33 | ||||||||||||||||||||||||||
34 | ||||||||||||||||||||||||||
35 | ||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||
37 | ||||||||||||||||||||||||||
38 | ||||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||
40 | ||||||||||||||||||||||||||
41 | ||||||||||||||||||||||||||
42 | ||||||||||||||||||||||||||
43 | ||||||||||||||||||||||||||
44 | ||||||||||||||||||||||||||
45 | ||||||||||||||||||||||||||
46 | ||||||||||||||||||||||||||
47 | ||||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||
49 | ||||||||||||||||||||||||||
50 | ||||||||||||||||||||||||||
51 | ||||||||||||||||||||||||||
52 | ||||||||||||||||||||||||||
53 | ||||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||
57 | ||||||||||||||||||||||||||
58 | ||||||||||||||||||||||||||
59 | ||||||||||||||||||||||||||
60 | ||||||||||||||||||||||||||
61 | ||||||||||||||||||||||||||
62 | ||||||||||||||||||||||||||
63 | ||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||
65 | ||||||||||||||||||||||||||
66 | ||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||
68 | ||||||||||||||||||||||||||
69 | ||||||||||||||||||||||||||
70 | ||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||
72 | ||||||||||||||||||||||||||
73 | ||||||||||||||||||||||||||
74 | ||||||||||||||||||||||||||
75 | ||||||||||||||||||||||||||
76 | ||||||||||||||||||||||||||
77 | ||||||||||||||||||||||||||
78 | ||||||||||||||||||||||||||
79 | ||||||||||||||||||||||||||
80 | ||||||||||||||||||||||||||
81 | ||||||||||||||||||||||||||
82 | ||||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||
84 | ||||||||||||||||||||||||||
85 | ||||||||||||||||||||||||||
86 | ||||||||||||||||||||||||||
87 | ||||||||||||||||||||||||||
88 | ||||||||||||||||||||||||||
89 | ||||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||
91 | ||||||||||||||||||||||||||
92 | ||||||||||||||||||||||||||
93 | ||||||||||||||||||||||||||
94 | ||||||||||||||||||||||||||
95 | ||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||
97 | ||||||||||||||||||||||||||
98 | ||||||||||||||||||||||||||
99 | ||||||||||||||||||||||||||
100 |