[Freewnn-users 170] Re: _XOPEN_SOURCE を定義してconfigure してみました。(Re: make 'CCOPTIONS=-g' と指定するとatodがSEGVで落ちるようになる)

Back to archive index

1xx itsan****@gmail*****
2013年 8月 26日 (月) 21:14:05 JST


2013年8月26日 19:17 ishikawa <ishik****@yk*****>:
>
> env CC="c-compiler-program -D_XOPEN_SOURCE=550" ./configure
> のようにして、コンパイルしてみたところ、(gcc-4.8  をコンパイラとして利用
> し、 make CCOPTIONS="-Werror -Wall" でコンパイル。)
>
> いくつか(多分これまでコンパイルされていなかった部分で?) 問題がみつかりま
> した。

作業ご苦労様です。
そしてありがとうございます。

気になったところにだけcommentいたします。

>
> その他 bzero(), bcopy(), bcmp(), rindex() が <strings.h> で定義されているの
> に、<strings.h> が正しくinclude されない問題を発見、修正:
> たとえば etc/bdic.c ですと次のような問題がありました:
> 下にcpp でのinclude 部分を示しますが
> 要は、STDC_HEADERSが定義されている、いないに関わらず strings.h があれば存在
> すれば
> 問答無用でstrings.h をinclude すべきです。いくつか同じような問題をかかえた
> ファイルを修正しました。(コンパイル時に警告がでないファイルは修正しきれてい
> ません。INET6 などが定義されているとbcopy が使われるファイルなどは未修正のも
> のもあるかもしれません。)

 bzero(), bcopy(), bcmp(), rindex() に関しては、おいおい
memset(), memcpy(), memcmp(), strrchr()等に置き換えないといけないかなと
漠然と考えておりました。

>
> ですが、gcc-4.8 の警告の不便なところは、if (a = b )のように、"=" 一つしかな
> く、他に&& とか || がないにも括弧をつけろと警告されてしまいます。(上の実例
> (b) は ==がある事例)
>  テスト目的で -Wall -Werror をつけていたために、コンパイルが先にすすめず, こ
> れを  if ((a = b) ) のように修正してしまいましたが、あまりうれしくない変更です。

代入しながら比較するコードに関して、
数値ならif ((a = b) != 0)
pointerならif ((a = b) != NULL)
と私は書くことにしています。
但し、既にあるif (a = b)に関しては、可能な限り変更しないことにしています。
本当に代入したかったのか、比較したかっただけなのか即断できないからです。

>
> PS: _XOPEN_SOURCE=550 は最初 650で定義しておこなったのですが、
> いくつかの関数が 600 以上では宣言、定義されないということがわかったので
> 550に落したものです。数箇所かそれでもうまく宣言、定義されず
> 無理矢理 __USE_BSD を局所的に 定義して宣言を取り込んでいるところがあります
> が、_XOPEN_SOURCE は crypt() の利用に問題があったために定義したもので、他に
> は大きな問題を与えてないはずです。
> (とりあえず jserver は動作してますし。)

_XOPEN_SOURCEを定義すると宣言されなくなるのは、
多分、bcopy')系の関数ではないでしょうか?
先述したようにbcopy()系の関数は<string.h>の関数で
置き換えたら良いのかなと思っています。

-- 
1xx <ItSAN****@gmail*****> <https://twitter.com/ItSANgo>
<http://d.hatena.ne.jp/Itisango/>




freewnn-users メーリングリストの案内
Back to archive index