summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--bignum.c10
-rw-r--r--error.c1
-rw-r--r--ext/socket/extconf.rb9
-rw-r--r--ext/socket/socket.c26
-rw-r--r--lib/yaml/rubytypes.rb4
6 files changed, 61 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 833f1e4928..107c4f719f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+Wed Jun 8 01:27:06 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bignorm): fixed a bug in normalizing negative numbers
+ reported from Honda Hiroki <hhonda@ipflex.com>. normalizing
+ should not trim preceding zeros from negative numbers.
+
+Wed Jun 8 00:15:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_getaddrinfo__aix): merged a patch from
+ KUBO Takehiro <kubo@jiubao.org> to support AIX. [ruby-list:40832]
+
+Wed Jun 8 00:09:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb (Array::to_yaml): merged a patch from
+ Tilman Sauerbeck <tilman@code-monkey.de>. [ruby-core:05055]
+
+ * lib/yaml/rubytypes.rb (Hash::to_yaml): ditto.
+
Wed Jun 8 00:00:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* ext/curses/curses.c (curses_insertln): merged a patch from
diff --git a/bignum.c b/bignum.c
index 6a31b5adc1..e534150073 100644
--- a/bignum.c
+++ b/bignum.c
@@ -105,9 +105,15 @@ bignorm(x)
BDIGIT *ds = BDIGITS(x);
while (len-- && !ds[len]) ;
- RBIGNUM(x)->len = ++len;
+ len++;
+ if (RBIGNUM(x)->sign) {
+ RBIGNUM(x)->len = len;
+ }
+ else if (len == 0) {
+ return x;
+ }
- if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
+ if (RBIGNUM(x)->len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
long num = 0;
while (len--) {
num = BIGUP(num) + ds[len];
diff --git a/error.c b/error.c
index c6f217e5bc..a229ecf1b0 100644
--- a/error.c
+++ b/error.c
@@ -1172,7 +1172,6 @@ void
rb_sys_fail(mesg)
const char *mesg;
{
- extern int errno;
int n = errno;
VALUE arg;
diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb
index 5e439401ce..747bb35296 100644
--- a/ext/socket/extconf.rb
+++ b/ext/socket/extconf.rb
@@ -155,8 +155,13 @@ main()
}
for (ai = aitop; ai; ai = ai->ai_next) {
if (ai->ai_family == AF_LOCAL) continue;
- if (ai->ai_addr == NULL ||
- ai->ai_addrlen == 0 ||
+ if (ai->ai_addr == NULL)
+ goto bad;
+#if defined(_AIX)
+ ai->ai_addr->sa_len = ai->ai_addrlen;
+ ai->ai_addr->sa_family = ai->ai_family;
+#endif
+ if (ai->ai_addrlen == 0 ||
getnameinfo(ai->ai_addr, ai->ai_addrlen,
straddr, sizeof(straddr), strport, sizeof(strport),
NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index d4fd620a00..867088f084 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -169,6 +169,30 @@ ruby_getaddrinfo(nodename, servname, hints, res)
#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo((node),(serv),(hints),(res))
#endif
+#if defined(_AIX)
+static int
+ruby_getaddrinfo__aix(nodename, servname, hints, res)
+ char *nodename;
+ char *servname;
+ struct addrinfo *hints;
+ struct addrinfo **res;
+{
+ int error = getaddrinfo(nodename, servname, hints, res);
+ struct addrinfo *r;
+ if (error)
+ return error;
+ for (r = *res; r != NULL; r = r->ai_next) {
+ if (r->ai_addr->sa_family == 0)
+ r->ai_addr->sa_family = r->ai_family;
+ if (r->ai_addr->sa_len == 0)
+ r->ai_addr->sa_len = r->ai_addrlen;
+ }
+ return 0;
+}
+#undef getaddrinfo
+#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__aix((node),(serv),(hints),(res))
+#endif
+
#ifdef HAVE_CLOSESOCKET
#undef close
#define close closesocket
@@ -2504,7 +2528,9 @@ sock_s_getnameinfo(argc, argv)
* 4th element holds numeric form, don't resolve.
* see ipaddr().
*/
+#ifdef AI_NUMERICHOST /* AIX 4.3.3 doesn't have AI_NUMERICHOST. */
hints.ai_flags |= AI_NUMERICHOST;
+#endif
}
}
else {
diff --git a/lib/yaml/rubytypes.rb b/lib/yaml/rubytypes.rb
index 2a0c31d990..643b30b22c 100644
--- a/lib/yaml/rubytypes.rb
+++ b/lib/yaml/rubytypes.rb
@@ -77,7 +77,7 @@ hash_proc = Proc.new { |type, val|
elsif Hash === val
type, obj_class = YAML.read_type_class( type, Hash )
if obj_class != Hash
- o = obj_class.new
+ o = obj_class.allocate
o.update( val )
val = o
end
@@ -236,7 +236,7 @@ array_proc = Proc.new { |type, val|
if Array === val
type, obj_class = YAML.read_type_class( type, Array )
if obj_class != Array
- o = obj_class.new
+ o = obj_class.allocate
o.concat( val )
val = o
end