[前][次][番号順一覧][スレッド一覧]

ruby-changes:41862

From: usa <ko1@a...>
Date: Thu, 25 Feb 2016 19:57:22 +0900 (JST)
Subject: [ruby-changes:41862] usa:r53936 (ruby_2_1): merge revision(s) 53677: [Backport #11877]

usa	2016-02-25 19:58:02 +0900 (Thu, 25 Feb 2016)

  New Revision: 53936

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=53936

  Log:
    merge revision(s) 53677: [Backport #11877]
    
            * ext/socket/socket.c (sock_gethostname): support unlimited size
              hostname.

  Modified directories:
    branches/ruby_2_1/
  Modified files:
    branches/ruby_2_1/ChangeLog
    branches/ruby_2_1/ext/socket/socket.c
    branches/ruby_2_1/version.h
Index: ruby_2_1/ext/socket/socket.c
===================================================================
--- ruby_2_1/ext/socket/socket.c	(revision 53935)
+++ ruby_2_1/ext/socket/socket.c	(revision 53936)
@@ -1000,14 +1000,28 @@ sock_gethostname(VALUE obj) https://github.com/ruby/ruby/blob/trunk/ruby_2_1/ext/socket/socket.c#L1000
 #ifndef HOST_NAME_MAX
 #  define HOST_NAME_MAX 1024
 #endif
-    char buf[HOST_NAME_MAX+1];
+    long len = HOST_NAME_MAX;
+    VALUE name;
 
     rb_secure(3);
-    if (gethostname(buf, (int)sizeof buf - 1) < 0)
-	rb_sys_fail("gethostname(3)");
-
-    buf[sizeof buf - 1] = '\0';
-    return rb_str_new2(buf);
+    name = rb_str_new(0, len);
+    while (gethostname(RSTRING_PTR(name), len) < 0) {
+	int e = errno;
+	switch (e) {
+	  case ENAMETOOLONG:
+#ifdef __linux__
+	  case EINVAL:
+	    /* glibc before version 2.1 uses EINVAL instead of ENAMETOOLONG */
+#endif
+	    break;
+	  default:
+	    rb_syserr_fail(e, "gethostname(3)");
+	}
+	rb_str_modify_expand(name, len);
+	len += len;
+    }
+    rb_str_resize(name, strlen(RSTRING_PTR(name)));
+    return name;
 }
 #else
 #ifdef HAVE_UNAME
Index: ruby_2_1/ChangeLog
===================================================================
--- ruby_2_1/ChangeLog	(revision 53935)
+++ ruby_2_1/ChangeLog	(revision 53936)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/ChangeLog#L1
+Thu Feb 25 19:49:31 2016  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/socket/socket.c (sock_gethostname): support unlimited size
+	  hostname.
+
 Thu Feb 25 19:28:19 2016  Kouhei Sutou  <kou@c...>
 
 	* lib/xmlrpc/client.rb: Support SSL options in async methods of
Index: ruby_2_1/version.h
===================================================================
--- ruby_2_1/version.h	(revision 53935)
+++ ruby_2_1/version.h	(revision 53936)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/version.h#L1
 #define RUBY_VERSION "2.1.9"
 #define RUBY_RELEASE_DATE "2016-02-25"
-#define RUBY_PATCHLEVEL 454
+#define RUBY_PATCHLEVEL 455
 
 #define RUBY_RELEASE_YEAR 2016
 #define RUBY_RELEASE_MONTH 2

Property changes on: ruby_2_1
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r53677


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]