aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJethro Grassie <jtg@xtrabass.com>2017-08-16 09:34:32 -0400
committerJethro Grassie <jtg@xtrabass.com>2017-08-16 09:34:32 -0400
commit1249a2a550c7a297823f6fa81eb3094b01863eab (patch)
tree29b8487120736d2fc1b331219f89f60a3ed569d6
parentAdd sync lock on stop (diff)
downloadmonero-1249a2a550c7a297823f6fa81eb3094b01863eab.tar.xz
Construct on first use for completion_commands
-rw-r--r--contrib/epee/include/readline_buffer.h14
-rw-r--r--contrib/epee/src/readline_buffer.cpp24
2 files changed, 23 insertions, 15 deletions
diff --git a/contrib/epee/include/readline_buffer.h b/contrib/epee/include/readline_buffer.h
index 8dd082a70..28a153414 100644
--- a/contrib/epee/include/readline_buffer.h
+++ b/contrib/epee/include/readline_buffer.h
@@ -21,23 +21,15 @@ namespace rdln
}
void get_line(std::string& line) const;
void set_prompt(const std::string& prompt);
- static void add_completion(const std::string& command)
- {
- if(std::find(completion_commands.begin(), completion_commands.end(), command) != completion_commands.end())
- return;
- completion_commands.push_back(command);
- }
- static const std::vector<std::string>& get_completions()
- {
- return completion_commands;
- }
+ static void add_completion(const std::string& command);
+ static const std::vector<std::string>& get_completions();
protected:
virtual int sync();
private:
std::streambuf* m_cout_buf;
- static std::vector<std::string> completion_commands;
+ static std::vector<std::string>& completion_commands();
};
class suspend_readline
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp
index d4051bcb8..42b474052 100644
--- a/contrib/epee/src/readline_buffer.cpp
+++ b/contrib/epee/src/readline_buffer.cpp
@@ -14,10 +14,8 @@ static void remove_line_handler();
static std::string last_line;
static std::string last_prompt;
-std::mutex line_mutex, sync_mutex, process_mutex;
-std::condition_variable have_line;
-
-std::vector<std::string> rdln::readline_buffer::completion_commands = {"exit"};
+static std::mutex line_mutex, sync_mutex, process_mutex;
+static std::condition_variable have_line;
namespace
{
@@ -43,6 +41,12 @@ rdln::suspend_readline::~suspend_readline()
m_buffer->start();
}
+std::vector<std::string>& rdln::readline_buffer::completion_commands()
+{
+ static std::vector<std::string> commands = {"exit"};
+ return commands;
+}
+
rdln::readline_buffer::readline_buffer()
: std::stringbuf(), m_cout_buf(NULL)
{
@@ -88,6 +92,18 @@ void rdln::readline_buffer::set_prompt(const std::string& prompt)
rl_redisplay();
}
+void rdln::readline_buffer::add_completion(const std::string& command)
+{
+ if(std::find(completion_commands().begin(), completion_commands().end(), command) != completion_commands().end())
+ return;
+ completion_commands().push_back(command);
+}
+
+const std::vector<std::string>& rdln::readline_buffer::get_completions()
+{
+ return completion_commands();
+}
+
int rdln::readline_buffer::process()
{
process_mutex.lock();