1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
require 'java'
require 'jruby'
class Java::SunNioCh::FileChannelImpl
field_reader :fd
end
class Java::JavaIo::FileDescriptor
if ChildProcess.os == :windows
field_reader :handle
end
field_reader :fd
end
module ChildProcess
module JRuby
def self.posix_fileno_for(obj)
channel = ::JRuby.reference(obj).channel
begin
channel.getFDVal
rescue NoMethodError
fileno = channel.fd
if fileno.kind_of?(Java::JavaIo::FileDescriptor)
fileno = fileno.fd
end
fileno == -1 ? obj.fileno : fileno
end
rescue
# fall back
obj.fileno
end
def self.windows_handle_for(obj)
channel = ::JRuby.reference(obj).channel
fileno = obj.fileno
begin
fileno = channel.getFDVal
rescue NoMethodError
fileno = channel.fd if channel.respond_to?(:fd)
end
if fileno.kind_of? Java::JavaIo::FileDescriptor
fileno.handle
else
Windows::Lib.handle_for fileno
end
end
end
end
require "childprocess/jruby/pump"
require "childprocess/jruby/io"
require "childprocess/jruby/process"
|