namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: namazu-111-proto5 and errno patch



 Date: Thu, 05 Feb 1998 11:02:09 JST
 From: susumu-w@xxxxxxxxxxxxxxxxxx
 Subject: [namazu:00112] namazu-111-proto5 and errno patch

 > http://saturn.aichi-u.ac.jp/%7Eccsatoru/Namazu/namazu-111-proto-5.tar.gz
 > なんですが、馬場さんの errno のパッチが mknmz.pl, srnmz.c のどちらにも
 > 当たってないようですが…。

cygnus gnuwin32 に sys_errlist[] が無いから外した(X-Mail-Count:
00108)、という事だったですね。でも、もしかしたら cygnus にも 
strerror() ならあるかもしれない。それなら以下の方法が取れるかも。


 > あと、馬場さんのパッチだと srnmz.c の方は Solaris2.5.1 ではエラーにな
 > りました。
 > #include <errno.h> しておいて、sys_errlist[errno] を strerror(errno) 
 > に書き換えると OK でした。
 > (逆に古い OS には strerror のないのがいっぱいありそうですが…)

そうでした。strerror() 問題があったんですね。済みません忘れてまし
た。最近Solarisに触ってないなー。

この部分は OS 依存になるので、configure の力を借りないと回避が難し
いかもしれない。./configure でチェックしたら、Linux の場合は、

/* Define if you have the sys_errlist function. */
#define HAVE_SYS_ERRLIST 1

/* Define if you have the strerror funcion. */
#define HAVE_STRERROR 1

#ifdef HAVE_STRERROR
#define Strerror strerror
#else
#ifdef HAVE_SYS_ERRLIST
#define Strerror(e) ((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])
#endif
#endif

みたいな感じになります。つまり strerror() と sys_errlist[] の両方
を持っていないOSはない(or 稀少)ということなので、先のパッチ部分は、
#include <errno.h> しておいた上で、

-    printf("%s: %s\n", FLIST, sys_errlist[errno]);
+    printf("%s: %s\n", FLIST, Strerror(errno));

のように変更しておいて、configure 化して HAVE_SYS_ERRLIST と 
HAVE_STRERROR の有無をチェックさせるようにすれば、より generic な
書き方になるはずです。

まあしかし、configure 化は多少面倒でしょうし、正常動作しているとき
はここは通らないので (^_^;) この部分は次期バージョンに廻しちゃって
も構わないかとおもいます。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士課程一回生
--