Skip to content

Commit 667f1ca

Browse files
committed
Move readline choice into a method
1 parent 7b77bbe commit 667f1ca

File tree

1 file changed

+41
-35
lines changed

1 file changed

+41
-35
lines changed

lib/msf/ui/console/driver.rb

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -54,39 +54,7 @@ class Driver < Msf::Ui::Driver
5454
# @option opts [Boolean] 'SkipDatabaseInit' (false) Whether to skip
5555
# connecting to the database and running migrations
5656
def initialize(prompt = DefaultPrompt, prompt_char = DefaultPromptChar, opts = {})
57-
58-
# Choose a readline library before calling the parent
59-
rl_err = nil
60-
if opts['RealReadline']
61-
# Remove the gem version from load path to be sure we're getting the
62-
# stdlib readline.
63-
gem_dir = Gem::Specification.find_all_by_name('rb-readline').first.gem_dir
64-
rb_readline_path = File.join(gem_dir, "lib")
65-
index = $LOAD_PATH.index(rb_readline_path)
66-
# Bundler guarantees that the gem will be there, so it should be safe to
67-
# assume we found it in the load path, but check to be on the safe side.
68-
if index
69-
$LOAD_PATH.delete_at(index)
70-
end
71-
end
72-
73-
begin
74-
require 'readline'
75-
rescue ::LoadError => e
76-
if rl_err.nil? && index
77-
# Then this is the first time the require failed and we have an index
78-
# for the gem version as a fallback.
79-
rl_err = e
80-
# Put the gem back and see if that works
81-
$LOAD_PATH.insert(index, rb_readline_path)
82-
index = rb_readline_path = nil
83-
retry
84-
else
85-
# Either we didn't have the gem to fall back on, or we failed twice.
86-
# Nothing more we can do here.
87-
raise e
88-
end
89-
end
57+
choose_readline(opts)
9058

9159
histfile = opts['HistFile'] || Msf::Config.history_file
9260

@@ -130,9 +98,9 @@ def initialize(prompt = DefaultPrompt, prompt_char = DefaultPromptChar, opts = {
13098
enstack_dispatcher(CommandDispatcher::Core)
13199

132100
# Report readline error if there was one..
133-
if not rl_err.nil?
101+
if !@rl_err.nil?
134102
print_error("***")
135-
print_error("* WARNING: Unable to load readline: #{rl_err}")
103+
print_error("* WARNING: Unable to load readline: #{@rl_err}")
136104
print_error("* Falling back to RbReadLine")
137105
print_error("***")
138106
end
@@ -737,6 +705,43 @@ def handle_loglevel(val)
737705
set_log_level(Msf::LogSource, val)
738706
end
739707

708+
# Require the appropriate readline library based on the user's preference.
709+
#
710+
# @return [void]
711+
def choose_readline(opts)
712+
# Choose a readline library before calling the parent
713+
@rl_err = nil
714+
if opts['RealReadline']
715+
# Remove the gem version from load path to be sure we're getting the
716+
# stdlib readline.
717+
gem_dir = Gem::Specification.find_all_by_name('rb-readline').first.gem_dir
718+
rb_readline_path = File.join(gem_dir, "lib")
719+
index = $LOAD_PATH.index(rb_readline_path)
720+
# Bundler guarantees that the gem will be there, so it should be safe to
721+
# assume we found it in the load path, but check to be on the safe side.
722+
if index
723+
$LOAD_PATH.delete_at(index)
724+
end
725+
end
726+
727+
begin
728+
require 'readline'
729+
rescue ::LoadError => e
730+
if @rl_err.nil? && index
731+
# Then this is the first time the require failed and we have an index
732+
# for the gem version as a fallback.
733+
@rl_err = e
734+
# Put the gem back and see if that works
735+
$LOAD_PATH.insert(index, rb_readline_path)
736+
index = rb_readline_path = nil
737+
retry
738+
else
739+
# Either we didn't have the gem to fall back on, or we failed twice.
740+
# Nothing more we can do here.
741+
raise e
742+
end
743+
end
744+
end
740745
end
741746

742747
#
@@ -749,6 +754,7 @@ def to_s
749754
end
750755
end
751756

757+
752758
end
753759
end
754760
end

0 commit comments

Comments
 (0)