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

ruby-changes:41483

From: nobu <ko1@a...>
Date: Sun, 17 Jan 2016 14:40:28 +0900 (JST)
Subject: [ruby-changes:41483] nobu:r53557 (trunk): option.c: make error messages consistent

nobu	2016-01-17 14:41:01 +0900 (Sun, 17 Jan 2016)

  New Revision: 53557

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

  Log:
    option.c: make error messages consistent
    
    * ext/socket/option.c (check_size): extract a macro to check
      binary data size, with a consistent message.
    * ext/socket/option.c (sockopt_byte): fix error message,
      sizeof(int) differs from sizeof(unsigned char) in general.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/option.c
Index: ext/socket/option.c
===================================================================
--- ext/socket/option.c	(revision 53556)
+++ ext/socket/option.c	(revision 53557)
@@ -27,6 +27,12 @@ VALUE rb_cSockOpt; https://github.com/ruby/ruby/blob/trunk/ext/socket/option.c#L27
 # define USE_INSPECT_BYTE 1
 #endif
 
+#define check_size(len, size) \
+    ((len) == (size) ? \
+     (void)0 : \
+     rb_raise(rb_eTypeError, "size differ.  expected as "#size"=%d but %ld", \
+	      (int)size, (long)(len)))
+
 static VALUE
 sockopt_pack_byte(VALUE value)
 {
@@ -211,12 +217,9 @@ sockopt_s_byte(VALUE klass, VALUE vfamil https://github.com/ruby/ruby/blob/trunk/ext/socket/option.c#L217
 static VALUE
 sockopt_byte(VALUE self)
 {
-    unsigned char i;
     VALUE data = sockopt_data(self);
     StringValue(data);
-    if (RSTRING_LEN(data) != sizeof(i))
-        rb_raise(rb_eTypeError, "size differ.  expected as sizeof(int)=%d but %ld",
-                 (int)sizeof(i), (long)RSTRING_LEN(data));
+    check_size(RSTRING_LEN(data), sizeof(char));
     return CHR2FIX(*RSTRING_PTR(data));
 }
 
@@ -257,9 +260,7 @@ sockopt_int(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/socket/option.c#L260
     int i;
     VALUE data = sockopt_data(self);
     StringValue(data);
-    if (RSTRING_LEN(data) != sizeof(int))
-        rb_raise(rb_eTypeError, "size differ.  expected as sizeof(int)=%d but %ld",
-                 (int)sizeof(int), (long)RSTRING_LEN(data));
+    check_size(RSTRING_LEN(data), sizeof(int));
     memcpy((char*)&i, RSTRING_PTR(data), sizeof(int));
     return INT2NUM(i);
 }
@@ -303,9 +304,7 @@ sockopt_bool(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/socket/option.c#L304
     int i;
     VALUE data = sockopt_data(self);
     StringValue(data);
-    if (RSTRING_LEN(data) != sizeof(int))
-        rb_raise(rb_eTypeError, "size differ.  expected as sizeof(int)=%d but %ld",
-                 (int)sizeof(int), (long)RSTRING_LEN(data));
+    check_size(RSTRING_LEN(data), sizeof(int));
     memcpy((char*)&i, RSTRING_PTR(data), sizeof(int));
     return i == 0 ? Qfalse : Qtrue;
 }
@@ -358,9 +357,7 @@ sockopt_linger(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/socket/option.c#L357
 
     if (level != SOL_SOCKET || optname != SO_LINGER)
         rb_raise(rb_eTypeError, "linger socket option expected");
-    if (RSTRING_LEN(data) != sizeof(l))
-        rb_raise(rb_eTypeError, "size differ.  expected as sizeof(struct linger)=%d but %ld",
-                 (int)sizeof(struct linger), (long)RSTRING_LEN(data));
+    check_size(RSTRING_LEN(data), sizeof(struct linger));
     memcpy((char*)&l, RSTRING_PTR(data), sizeof(struct linger));
     switch (l.l_onoff) {
       case 0: vonoff = Qfalse; break;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 53556)
+++ ChangeLog	(revision 53557)
@@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sun Jan 17 14:40:22 2016  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/socket/option.c (check_size): extract a macro to check
+	  binary data size, with a consistent message.
+
+	* ext/socket/option.c (sockopt_byte): fix error message,
+	  sizeof(int) differs from sizeof(unsigned char) in general.
+
 Sat Jan 16 21:16:21 2016  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (xstring): reset heredoc indent after dedenting,

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

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