SJ3のパッチを作った。 もはや誰も使ってないと思うけど。
- sj3-2.0.1.20.tar.gzへのpatch: files:sj3-qq-2.0.1.21.diff.gz
FreeBSD-cvs:ports/japanese/sj3/files/を取り込んでいるだが、http://oikumene.que.ne.jp/misc/ のpatchはGoogle:sj3 動かないらしいので、前のリビジョンからスタートしてみた。
OpenBSDとFC6で動作確認済み(kinput2, emacs+sj3-egg)。
変更点
- 全体の変更
- インストールレイアウトの変更
- sj3servはsbin以下に
- 設定ファイルはetc以下に
- 辞書はvar/sj3/dict以下に
- デフォルトで/tmp以下にファイル名決め打ちのファイルを作成するので変更
- setuidフラグ禁止
- インストールには_sj3というuserとgroupが必要(デフォルト動作。これ以外にするにはsj3.tmplのSJ3OWNER,SJ3GROUPを書き換えること)
- 起動にはroot権限が必要(変なユーザに実行させないため。実行直後に_sj3にドロップするので心配ない)
- 共有ライブラリを作成するように
- インストールレイアウトの変更
- 内部の変更
- strcpy, strcat, sprintf禁止
- register変数禁止(コンパイラによる最適化の方がマシ)
- K&RからANSIに変更
- プロトタイプ宣言追加
- 正しいva_argハンドリング
元のソースを読んでおもったこと
- ほとんどの関数の返り値がvoidで、データのやりとりはグローバル変数で行う豪快な仕様。
- 関数のプロトタイプ宣言がないから、 arityが異なっていてもコンパイル時に警告されてない(もちろん実行時の動作は不定。落れば上等)。実際にあるんだ。これが。
- strcpy, strcat, sprintfを禁止したはいいが、それ相当の代替関数を内部で宣言して使っているかもしれない。要調査。
- オリジナルの配布元はftpもなくなったみたいだし、メンテナーいないのかな。これ。