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

Re: kinput2



> 原因は、freewnn-libのjs.cの中で、UNIXドメインのソケットの
> connectの引数に間違った長さを渡していたためでした。
> sizeof(sockaddr_un.sun_len)==sizeof(uchar)分だけ足りないので、
> ソケットの最後の一文字が欠けてconnectに失敗していたようです。
> 
> 以下のパッチで直りました。

ふむむ、<sys/param.h> が #include されてなくて、「BSD」が #define
されないって奴ですね。
こう直すのではなく、

- #if !(defined(BSD) && (BSD >= 199306)) /* !4.4BSD-Lite */
-     if (connect(sd,(struct sockaddr *)&saddr,strlen(saddr.sun_path)+sizeof(saddr.sun_family)) == ERROR) {
- #else /* 4.4BSD-Lite */
      if (connect(sd,(struct sockaddr *)&saddr,SUN_LEN(&saddr)) == ERROR) {
- #endif /* 4.4BSD-Lite */

<sys/param.h> を #include するか、あるいは下記のように直して、

#ifndef SUN_LEN
# define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
#endif
      if (connect(sd,(struct sockaddr *)&saddr,SUN_LEN(&saddr)) == ERROR) {

FreeWnn にフィードバックした方が良いような…
(個人的には、<sys/param.h> を #include するより後者の方が良いと思ってます。)
たしか Wnn-4.2 の中には、この種のコーディングが何箇所かあったけど、他の
部分は大丈夫かしら。
--
soda