玩 BBS 久一點的長輩應該可以自動感覺到 KKCity 是 Maple 3 System 改出來的 (關於這點,maniac 應該是在 ICOS’03 有提過),而應該也有不少人知道 KKCity 跟不良牛 Zoo 是一掛的… (根本就在同一個 LAN 下面 :p)
雖然 Maple 3 System 架構不算差,其實還是有很多問題,造成後來不熟的人改下去就爛掉…
- 部分的 sub-system 用 dirty code。像是我之前改文章置底時發現 xo_thread() 不會乖乖用 xo_load() 讀新的 buffer。
- 看板、信件夾底層處理的部分沒有放到
src/lib
下面,造成現在一堆 utils 都用自己的方式叫 rec_get & rec_put() 去處理。 - sem、shm 的控制還是放在 src/maple 處理,於是 utils 要使用 sem & shm 就自己 call shmat() 這些 function…
- …
不過大體上還算不錯就是了… 我猜測 wretch 在 porting 到 FreeBSD 5.x on x86-64 platform 的過程中間還算順利有很大的原因是因為還沒有奇怪的功能 :p
但是 KKCity 除了以上的東西以外,另外還加上了「一堆」東西,像是…
- hashd,用 hash function + binary search tree 放 boardname to boardnum 的功能。(奇怪的是,我沒看到 hash collision 時的處理方式… 也許用了什麼神秘的方法處理)
- gemd,看名稱是處理精華區的部分?我還沒仔細看過程式…
- …
於是要 porting 一堆東西過去,但是又發現了一堆問題…
size_t
變成 8 bytes,於是 protocol 變了…time_t
也變成 8 bytes…- …
問題一卡車,加上前人 coding 的時候似乎沒有使用好習慣 :p (其實我也是換 platform 才發現我自己也沒有乖乖 follow…)
- 對
char
要用'\0'
- 對
char *
或是各類的 pointer 要用NULL
而不能用0
由於 char
與 char *
的 size 不一樣,以前根本不管 casting warning 還沒事 (因為以前 sizeof(int) == sizeof(char *)
),現在跑到 gcc 3.4.2 (FreeBSD 5.3 builtin compiler) 上面發現不知道 gcc 做了什麼事情,會發生大爆炸…
還是趕快說服 Izero 用 5.3 或是 4.10 跑 PAE 好了 :p