dtas-all
[Top][All Lists]
Advanced

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

[PATCH] IO#nread compatibility for Rubinius (Linux-only)


From: Eric Wong
Subject: [PATCH] IO#nread compatibility for Rubinius (Linux-only)
Date: Sat, 12 Oct 2013 21:34:04 +0000

We don't deal with user-space buffers, so we should be fine
using this compatibility layer and only checking the kernel
buffers (until rbx implements a proper solution).
---
 lib/dtas/buffer.rb            |  2 ++
 lib/dtas/buffer/read_write.rb |  1 -
 lib/dtas/buffer/splice.rb     |  1 -
 lib/dtas/compat_rbx.rb        | 12 ++++++++++++
 lib/dtas/unix_accepted.rb     |  1 +
 lib/dtas/unix_client.rb       |  1 +
 6 files changed, 16 insertions(+), 2 deletions(-)
 create mode 100644 lib/dtas/compat_rbx.rb

diff --git a/lib/dtas/buffer.rb b/lib/dtas/buffer.rb
index c0ba6a6..f2b0240 100644
--- a/lib/dtas/buffer.rb
+++ b/lib/dtas/buffer.rb
@@ -1,6 +1,8 @@
 # Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
 # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
+require 'io/wait'
 require_relative '../dtas'
+require_relative 'compat_rbx' # IO#nread
 
 class DTAS::Buffer # :nodoc:
   begin
diff --git a/lib/dtas/buffer/read_write.rb b/lib/dtas/buffer/read_write.rb
index 11d1a95..53b11de 100644
--- a/lib/dtas/buffer/read_write.rb
+++ b/lib/dtas/buffer/read_write.rb
@@ -1,6 +1,5 @@
 # Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
 # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
-require 'io/wait'
 require 'io/nonblock'
 require_relative '../../dtas'
 require_relative '../pipe'
diff --git a/lib/dtas/buffer/splice.rb b/lib/dtas/buffer/splice.rb
index 90c2e47..55ce3d5 100644
--- a/lib/dtas/buffer/splice.rb
+++ b/lib/dtas/buffer/splice.rb
@@ -1,6 +1,5 @@
 # Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
 # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
-require 'io/wait'
 require 'io/nonblock'
 require 'io/splice'
 require_relative '../../dtas'
diff --git a/lib/dtas/compat_rbx.rb b/lib/dtas/compat_rbx.rb
new file mode 100644
index 0000000..a64bf78
--- /dev/null
+++ b/lib/dtas/compat_rbx.rb
@@ -0,0 +1,12 @@
+# Copyright (C) 2013, Eric Wong <address@hidden> and all contributors
+# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
+
+# ref: https://github.com/rubysl/rubysl-io-wait/issues/1
+# this ignores buffers and is Linux-only
+class IO
+  def nread
+    buf = "\0" * 8
+    ioctl(0x541B, buf)
+    buf.unpack("l_")[0]
+  end
+end if ! IO.method_defined?(:nread) && RUBY_PLATFORM =~ /linux/
diff --git a/lib/dtas/unix_accepted.rb b/lib/dtas/unix_accepted.rb
index be344c7..6658406 100644
--- a/lib/dtas/unix_accepted.rb
+++ b/lib/dtas/unix_accepted.rb
@@ -2,6 +2,7 @@
 # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
 require 'socket'
 require 'io/wait'
+require_relative 'compat_rbx'
 
 class DTAS::UNIXAccepted # :nodoc:
   attr_reader :to_io
diff --git a/lib/dtas/unix_client.rb b/lib/dtas/unix_client.rb
index fa94bbf..fa8b11c 100644
--- a/lib/dtas/unix_client.rb
+++ b/lib/dtas/unix_client.rb
@@ -5,6 +5,7 @@ require_relative 'xs'
 require 'socket'
 require 'io/wait'
 require 'shellwords'
+require_relative 'compat_rbx'
 
 class DTAS::UNIXClient # :nodoc:
   attr_reader :to_io
-- 
1.8.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]