[pgpool-general-jp: 734] Re: void *pool_search_relcache()

Tatsuo Ishii ishii @ sraoss.co.jp
2010年 2月 15日 (月) 22:36:47 JST


石井です。

>  久々に CVS HEAD をコンパイルしてみたところ(2.3.2.1 も同じだと思いま
> すが)、pool_lobj.c のコンパイルで
> 
> pool_lobj.c: In function 'pool_rewrite_lo_creat':
> pool_lobj.c:106: warning: cast from pointer to integer of different size
> pool_lobj.c:135: warning: cast from pointer to integer of different size
> 
> と出てきました(FreeBSD-8.0/amd64)。warning なのであまり気にしなくてもい
> いのかもしれませんが念のため報告しておきます。
> 
>  int が 4 bytes で void* が 8 bytes だからですよね。

はい。

> 実質関数から返って
> くる値が OID なので(?) 32bit に収まるものなので無視していい、とすると
> pool_search_relcache() の返り値の型を変えるのでしょうか。

えーと、このあたりは、PostgreSQLのまねをして、pool_search_relcache() 
の返り値が、32bit整数の範囲ならば値として、そうでなければ(あるいは構造
体へのポインタならば)、ポインタとして扱う、ということをやってみたのに、
他が手抜きコーディングになっているせいです。すいません。

きちんとやるなら、PostgreSQLのfmgr.hに定義されているようなマクロを作っ
ておいて、DatumGetInt32とかやるんでしょうね。つまり、
pg_search_relcacheの戻値 & 0xffffffff みたいなことをやると。
直しておきます。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


pgpool-general-jp メーリングリストの案内