稲員です。

On Fri, 16 Apr 2010 12:10:49 +0900
もじもじ <mojimoji...@yahoo.co.jp> wrote:

> まず、postfix(ports) のパッチに
>  +#if (__FreeBSD_version >= 702104 && __FreeBSD_version <= 800000) \
> こんな行があるのを発見。というか、以前出てました。
> 
> これ、703000 では無いかと思う、今日この頃。

702104 で導入された機能ですからこのパッチで正しいのでは?

> いや、702104 でももっているのでしょうが、まともに動かな
> いのでは、と。Bus error だし。

そちらの環境で「まともに動かない」のは、ユーザーランドだけが 702104 以降に
なっていて、カーネルは closefrom(2) に対応していない 702000 のものになっているからでしょう。

> ところが、これを 703000 にすると、今度はコンフリクトが・・・
> 
> http://d.hatena.ne.jp/lipbalm/20100327/1269622446
> では、7.3 でコンフリクトされた方の解決方法が載ってます。
> 
> 色々調べている時、このページを見ましたが、「あっぶねーなー」
> と思って見てましたが、いざ、こちらもその状態になり納得。
> 
> HAS_CLOSEFROM じゃないから自前の closefrom を使おうとす
> るんですが、これの戻り値が int。
> って事は、postfix の各場所の使用箇所も int を念頭に作ら
> れてる。
> 
> でも、/usr/include/unistd.h では void 宣言。

自前の closefrom を使う時とシステム標準のものを使う時で、それぞれ正しい
プロトタイプ宣言が有効になるように書かれているので問題ないでしょう。
ざっとソースを見ましたが postfix は closefrom の戻り値を使ってないので、
正しく宣言されているかぎり int でも void でもかまわないかと。

上でパッチの 702104 を 703000 に変更するとコンフリクトするとおっしゃっている
のは、その変更がこの辺の仕組みを壊してしまっているからです。

> どっち直すって、/usr/include/unistd.h かなぁ(^^;

バカな真似はやめましょう (^^;

> これは、結構あっちこっちで騒がれているよう・・・

少なくとも上の URL の事例は ports を使わずに野良ビルドしてはまった例で、
ports を使えばパッチで解決されている問題ですね。

> 追伸:
>  いま、別の人間が同じ 702106 を使っていたので nm... を
>  実行してもらいました。そしたら closefrom が無かったで
>  す。なんてこったい、と思って lib.so.7 をそのマシンで
>  コンパイルして貰って、その lib.so.7 を nm して貰ったら・・・
>  入ってます。がびーん。私が libc をリコンパイルしたのが
>  悪いの!?(T_T)

その人が nm に -D オプション付けてなかったなんてオチでは?

-- 
Rikito INAKAZU <riki1017k...@gmail.com>

メールによる返信