apacheモジュールでconfigをcreateする時の注意する事

apacheモジュールで必須のconfig構造体を作成する作業。

これは、通常1.3系ではモジュール読み込み構造体(MODULE_VAR_EXPORT等)の3番目にディレクトリ毎のconfig、5番目にserver毎のconfigを作成する関数指定する。

2系の場合は、モジュール読み込み構造体(AP_MODULE_DECLARE_DATA等)の2番目にディレクトリ毎のconfig、4番目にserver毎のconfigを作成する関数指定する。

ここで注意しなければならないのが、configを作成した後、command_rec構造体から具体的なconfの値を設定していく時の扱い方。

続きを読む

apache2系のmodule開発

1.3系については、通称パンダ本に結構書いてあるので、情報量が少なめの2系モジュールに関する開発について。

基本は、1.3系と違い、2系はhook関数というものを作ってそれをモジュールから登録し、apacheコアにhookさせて、登録した関数を実行させるという流れ。

モジュールというのは、結局のところ「apacheコアが呼び出すhook関数を登録するためにある」といってもいいくらいかな。

流れとしては、以下のようにhook関数を登録して、

static void register_hooks(apr_pool_t *p)
{
    ap_hook_access_checker(lalimit_access_checker, NULL, NULL, APR_HOOK_MIDDLE);
}

続きを読む

apacheの1.3系と2系との互換では

とりあえず、apr_compat.hを2系でincludeしておくと良い。

マクロで定義したい場合は、とりあえず以下のマクロをやっとけば、1.3系のapを結構使えるはず。

#define ap_inline APR_INLINE
#define ap_md5_ctx_t apr_md5_ctx_t
#define ap_MD5Encode apr_md5_encode
#define ap_MD5Final apr_md5_final
#define ap_MD5Init apr_md5_init
#define ap_MD5Update apr_md5_update
#define ap_append_arrays apr_array_append
#define ap_array_cat apr_array_cat

続きを読む

apr_psprintfはかなり楽(apache2.x系)

apacheモジュールのメンテとかをしているんだが、メモリ管理系のapahceAPIはかなり楽だ。

本来なら、変数のサイズを常に気にしてcallocしたりfreeしたりする必要があるんだが、apacheAPIを使ってリソースpoolに管理を任せたら、その辺を全く気にしなくて良い。

sprintfするのも一苦労だけど、ここでもメモリ系を考えなくて良いAPIのapr_psprintfなどがあって、sprintfの第一引数は本来メモリを割り当てておく必要があるが、その必要も無い。

例えばこんなの。↓

if (x != NULL)
    buf_len += strlen(x);
else
    buf_len += NULL_LENGTH;
if (y != NULL)
    buf_len += strlen(y);
else
    buf_len += NULL_LENGTH;
buf = calloc(buf_len + 1, sizeof(char));
if  (buf == NULL)
    return "allocate error";
sprintf(buf, "x=%s y=%s", x, y)

free(buf);

この例だとbufには元々char方のxとかyだけを使っているが、ここにアドレスとかintを使うと、桁数計算とかでcharとしてのサイズがどれだけになるかとかが非常に面倒。

しかし、APIだと上のより面倒になりそうな実装がこんな風にかけちゃう。↓

buf = (char *)apr_psprintf(apr_pool_t *p,"x=%s y=%s z=%d adr=%x", x, y, z, adr);

こんな風に、整形した文字列に必要なサイズを自動で判断しリソースプールで確保してくれる。

こんなに楽だと、C書いてることを忘れそうだ・・・

万双ショルダーバッグの1年使用レポ

そういえば、万双のショルダーバッグのレポートをやっていなかった気がするので。

記事書きながら、改めてみていると、本当にすごい変わりようだ!

これが楽しいから、皮製品はやめられない。

まずは、一年前の6月くらいに買った時の未使用ショルダーバッグ。↓

IMG_3036これが、一年使っているうちにここまで変化したとは!

続きを読む