porting KKCity 到 AMD64 上面

玩 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

由於 charchar * 的 size 不一樣,以前根本不管 casting warning 還沒事 (因為以前 sizeof(int) == sizeof(char *)),現在跑到 gcc 3.4.2 (FreeBSD 5.3 builtin compiler) 上面發現不知道 gcc 做了什麼事情,會發生大爆炸…

還是趕快說服 Izero 用 5.3 或是 4.10 跑 PAE 好了 :p