[#8824] [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro)

ごとけんです

38 messages 2000/01/05
[#8839] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8842] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8843] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8844] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8846] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8847] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8893] Re: [ruby-list:20142] Re: Range expansion? — Akinori MUSHA aka knu <knu@...>

 knuです。ruby-listから舞台を移しました。

13 messages 2000/01/09

[#8980] 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...>

近い将来の{Net,Free,Open}BSDにはKAME IPv6 stackが統合されています。

17 messages 2000/01/20
[#8981] Re: 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...> 2000/01/20

> それから、

[ruby-dev:8981] Re: 1.4.3 patch for near-future *BSD IPv6 support

From: Jun-ichiro itojun Hagino <itojun@...>
Date: 2000-01-20 13:15:38 UTC
List: ruby-dev #8981
>	それから、
>	- libcに入っているgetaddrinfo(3)がIPv6 ready
>	- かつrubyに--enable-ipv6をつけなかった場合
>	関数の戻り値にsockaddr_in6を食らって困ることがあるのでそれも
>	追ってdiffを出します。遅くなってごめんなさい。

	これは1.5用のdiffです。1.4.xにも入ると嬉しいです。
	前回のdiffも含めてまとめて添付しました。

>	まだ少しsocket.soのdynamic linkまわりで苦しんでいます。
>	なにがいけないんだかよくわからない...

	- libcにgetaddrinfo(3)が入ってる
	- 標準配布の状態で ./configure (ext/socketはダイナミックリンク)
	だけしてコンパイルすると、こういうことを言われます。
	NetBSD-current/i386 (ELF)です。
	symbolはrubyの中で正しく定義されているぽいのですが。
	dynamic linkまわりに詳しくないのでよくわかりません。なにかヒントを
	頂けませんか?
>>/home/itojun/NetBSD/pkgsrc/lang/ruby/work/ruby-1.4.3/sample/dualstack-fetch.rb:6:in `require': ext/socket/socket.so: Undefined symbol "rb_eArgError" (reloc type = 6, symnum = 13) - ext/socket/socket.so (LoadError)
>>        from /home/itojun/NetBSD/pkgsrc/lang/ruby/work/ruby-1.4.3/sample/dualstack-fetch.rb:6

>% nm -o ruby ext/socket/socket.so | grep eArg
>ruby:080bd2b8 B rb_eArgError
>ext/socket/socket.so:         U rb_eArgError

itojun


Index: ext/socket/extconf.rb
===================================================================
RCS file: /home/cvs/ruby/ext/socket/extconf.rb,v
retrieving revision 1.7
diff -c -r1.7 extconf.rb
*** ext/socket/extconf.rb	1999/10/20 07:10:23	1.7
--- ext/socket/extconf.rb	2000/01/20 13:08:24
***************
*** 41,46 ****
--- 41,47 ----
  $ipv6type = nil
  $ipv6lib = nil
  $ipv6libdir = nil
+ $ipv6trylibc = nil
  if $ipv6
    if egrep_cpp("yes", <<EOF)
  #include <netinet/in.h>
***************
*** 59,64 ****
--- 60,66 ----
      $ipv6type = "kame"
      $ipv6lib="inet6"
      $ipv6libdir="/usr/local/v6/lib"
+     $ipv6trylibc=true
      $CFLAGS="-DINET6 "+$CFLAGS
    elsif File.directory? "/usr/inet6"
      $ipv6type = "linux"
***************
*** 100,106 ****
    if $ipv6lib
      if File.directory? $ipv6libdir and File.exist? "#{$ipv6libdir}/lib#{$ipv6lib}.a"
        $LOCAL_LIBS = " -L#$ipv6libdir -l#$ipv6lib"
!     else
        print <<EOS
  
  Fatal: no #$ipv6lib library found.  cannot continue.
--- 102,108 ----
    if $ipv6lib
      if File.directory? $ipv6libdir and File.exist? "#{$ipv6libdir}/lib#{$ipv6lib}.a"
        $LOCAL_LIBS = " -L#$ipv6libdir -l#$ipv6lib"
!     elsif !$ipv6trylibc
        print <<EOS
  
  Fatal: no #$ipv6lib library found.  cannot continue.
***************
*** 128,133 ****
--- 130,152 ----
  }
  EOF
      $CFLAGS="-DHAVE_SIN_LEN "+$CFLAGS
+ end
+ 
+   if try_link(<<EOF)
+ #include <sys/types.h>
+ #include <netdb.h>
+ #include <string.h>
+ #include <sys/socket.h>
+ int
+ main()
+ {
+    struct sockaddr_storage ss;
+ 
+    ss.ss_family;
+    return 0;
+ }
+ EOF
+     $CFLAGS="-DHAVE_SOCKADDR_STORAGE "+$CFLAGS
  end
  
    if try_link(<<EOF)
Index: ext/socket/socket.c
===================================================================
RCS file: /home/cvs/ruby/ext/socket/socket.c,v
retrieving revision 1.12
diff -c -r1.12 socket.c
*** ext/socket/socket.c	2000/01/17 08:37:48	1.12
--- ext/socket/socket.c	2000/01/20 13:08:28
***************
*** 81,90 ****
  #define INET_SERVER 1
  #define INET_SOCKS  2
  
! #ifndef INET6
! # undef  ss_family
! # define sockaddr_storage	sockaddr
! # define ss_family		sa_family
  #endif
  
  #ifdef NT
--- 81,107 ----
  #define INET_SERVER 1
  #define INET_SOCKS  2
  
! #ifndef HAVE_SOCKADDR_STORAGE
! /*
!  * RFC 2553: protocol-independent placeholder for socket addresses
!  */
! #define _SS_MAXSIZE	128
! #define _SS_ALIGNSIZE	(sizeof(long long))
! #define _SS_PAD1SIZE	(_SS_ALIGNSIZE - sizeof(unsigned char) * 2)
! #define _SS_PAD2SIZE	(_SS_MAXSIZE - sizeof(unsigned char) * 2 - \
! 				_SS_PAD1SIZE - _SS_ALIGNSIZE)
! 
! struct sockaddr_storage {
! #ifdef HAVE_SA_LEN
! 	unsigned char ss_len;		/* address length */
! 	unsigned char ss_family;	/* address family */
! #else
! 	unsigned short ss_family;
! #endif
! 	char	__ss_pad1[_SS_PAD1SIZE];
! 	long long __ss_align;	/* force desired structure storage alignment */
! 	char	__ss_pad2[_SS_PAD2SIZE];
! };
  #endif
  
  #ifdef NT

In This Thread