操作
バグ #776
完了coil/tests/OSのテスト実行時エラー
開始日:
2009/07/09
期日:
進捗率:
100%
予定工数:
説明
Ubunt-8.10にてsrc/lib/coil/tests以下のテストを実行するとOSのテストの際に"Segmentation fault"で異常終了する。
具体的には、coil/include/OS.hのGetOpt::operator()()内のgetopt()呼び出しのところでエラーが発生している。
Ubunt-8.04ではエラーにはならない。
リビジョンは1435。
n-ando さんが15年以上前に更新
- 進捗率 を 0 から 100 に変更
getopt(3)は引数の文字列配列の内容を変更するが、Ubuntu8.04とUbuntu8.10の間ではその処理方法が異なっている模様。
glibcのgetoptのソースを見る限りは、Ubuntu8.04とUbuntu8.10の間では根本的な違いはないことから、コンパイラのメモリの配置方法によるものではないかと推測される。
また、別の問題として、Ubuntu8.10のgetoptは、2回目以降の処理の問題があるように見受けられる。
getoptはグローバル変数を使用する仕様となっており、optindという変数を初期化することで、複数回の処理が実現できるようになっている。
しかしながら、これは、getoptの実装に強く依存するため、この方法自体POSIX汎用ではない。(FreeBSDではoptindに加えて、optresetという初期化フラグがグローバル変数として使用されている。)
以上の理由から、GetOptクラスをgetopt関数とは独立に実装することにする。
操作