305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
|
# File 'lib/aggkit/childprocess/windows/lib.rb', line 305
def handle_for(fd_or_io)
if fd_or_io.kind_of?(IO) || fd_or_io.respond_to?(:fileno)
if ChildProcess.jruby?
handle = ChildProcess::JRuby.windows_handle_for(fd_or_io)
else
handle = get_osfhandle(fd_or_io.fileno)
end
elsif fd_or_io.kind_of?(Integer)
handle = get_osfhandle(fd_or_io)
elsif fd_or_io.respond_to?(:to_io)
io = fd_or_io.to_io
unless io.kind_of?(IO)
raise TypeError, "expected #to_io to return an instance of IO"
end
handle = get_osfhandle(io.fileno)
else
raise TypeError, "invalid type: #{fd_or_io.inspect}"
end
if handle == INVALID_HANDLE_VALUE
raise Error, last_error_message
end
FFI::Pointer.new handle
end
|