壊れたメガネ

ホッチキスの達人の意識の高いブログ。

mod_mathtex を作る(1) - mathtex がやっていること

apache モジュール開発の勉強と mathtex を使いやすく(?)するという実益を兼ねて mod_mathtex を作ってみることにした。
うまく行くかどうかはわからないけど、とりあえず動くものにしたい。動かせなかったら、どうしよう。
mathtex.c を読んだので、以下はそのメモ。

mathtex がやっていること

  1. TeX expression のバリデート
  2. expression の md5 値を利用したキャッシュ管理
  3. latex, dvips コマンドの整形と実行
  4. showmsg マクロによるロギング
  5. HTTP REFERER のチェック
  6. コマンドラインから実行された際の処理

指針

  • バリデート(1)とコマンドの整形と実行(3)はそのまま使う。
  • キャッシュ管理(2)は msgfp というグローバル変数が使われている(後述)ので、とりあえず使わない。 md5 値の計算は独自に実装されていてこれによってコードの量は増えているがグローバル変数は使われていない。
  • showmsg(4) は msgfp を利用したマクロになっているが、 showmsg の取りうる引数にファイルポインタを加えた関数を用意し、置き換える。
  • HTTP REFERER(5) のチェックは Apache 自身あるいは他のそれなりのモジュールがあるはずなので要らない。
  • コマンドラインからの実行(6)はありえないので消す。

特に消したいと思うグローバル変数

  • int msgnumber

処理の頭から尻尾までを通して状態管理に使われている。
必ずしも大局的ではなく、局所的に使われて即座にリセット(0を代入)されたりする。

  • File *msgfp

この変数もロギングのためのファイルポインタやキャッシュファイルのポインタ代入など色々使いまわされる。
宣言が

static	FILE *msgfp = NULL;		/* output in command-line mode */

なのに、

msgfp = fopen(makepath(NULL,md5hash,".out"),"w"); /* file md5hash.out */

と使われたり。

雑感


mathtex は latex や dvips などの開発用ライブラリ使ったりしてるのかと思ったけど、そんなことはなく、単純に system(3) から利用しているだけだった。がっかり。