def Netrc.locate(mach, io = nil)
need_close = false
if io.nil?
io = rcopen or return nil
need_close = true
end
entry = nil
key = nil
inmacdef = false
begin
while line = io.gets
if inmacdef
inmacdef = false if line.strip.empty?
next
end
toks = line.scan(/"((?:\\.|[^"])*)"|((?:\\.|\S)+)/).flatten.compact
toks.each { |t| t.gsub!(/\\(.)/, '\1') }
while toks.length > 0
tok = toks.shift
if key
entry = new if key == 'machine' && tok == mach
entry.send "#{key}=", tok if entry
key = nil
end
case tok
when 'default'
return entry if entry
entry = new
when 'machine'
return entry if entry
key = 'machine'
when 'login', 'password', 'account'
key = tok
when 'macdef'
inmacdef = true
break
end
end
end
ensure
io.close if need_close
end
entry
end