aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/epee')
-rw-r--r--contrib/epee/include/net/abstract_tcp_server2.inl6
-rw-r--r--contrib/epee/include/readline_buffer.h1
-rw-r--r--contrib/epee/include/storages/parserse_base_utils.h6
-rw-r--r--contrib/epee/src/readline_buffer.cpp5
4 files changed, 13 insertions, 5 deletions
diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl
index 5dbb7a478..9b03941ee 100644
--- a/contrib/epee/include/net/abstract_tcp_server2.inl
+++ b/contrib/epee/include/net/abstract_tcp_server2.inl
@@ -393,7 +393,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
//ask it inside(!) critical region if we still able to go in event wait...
size_t cnt = socket_.get_io_service().poll_one();
if(!cnt)
- misc_utils::sleep_no_w(0);
+ misc_utils::sleep_no_w(1);
}
return true;
@@ -889,7 +889,9 @@ POP_WARNINGS
{
try
{
- io_service_.run();
+ size_t cnt = io_service_.run();
+ if (cnt == 0)
+ misc_utils::sleep_no_w(1);
}
catch(const std::exception& ex)
{
diff --git a/contrib/epee/include/readline_buffer.h b/contrib/epee/include/readline_buffer.h
index 87c8826cb..5968d243d 100644
--- a/contrib/epee/include/readline_buffer.h
+++ b/contrib/epee/include/readline_buffer.h
@@ -27,6 +27,7 @@ namespace rdln
private:
std::streambuf* m_cout_buf;
+ size_t m_prompt_length;
static std::vector<std::string>& completion_commands();
};
diff --git a/contrib/epee/include/storages/parserse_base_utils.h b/contrib/epee/include/storages/parserse_base_utils.h
index 8c6c1a64d..31495ae13 100644
--- a/contrib/epee/include/storages/parserse_base_utils.h
+++ b/contrib/epee/include/storages/parserse_base_utils.h
@@ -39,12 +39,14 @@ namespace misc_utils
inline std::string transform_to_escape_sequence(const std::string& src)
{
static const char escaped[] = "\b\f\n\r\t\v\"\\/";
- if (std::find_first_of(src.begin(), src.end(), escaped, escaped + sizeof(escaped)) == src.end())
+ std::string::const_iterator it = std::find_first_of(src.begin(), src.end(), escaped, escaped + sizeof(escaped));
+ if (it == src.end())
return src;
std::string res;
res.reserve(2 * src.size());
- for(std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
+ res.assign(src.begin(), it);
+ for(; it!=src.end(); ++it)
{
switch(*it)
{
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp
index 076a63612..da264471f 100644
--- a/contrib/epee/src/readline_buffer.cpp
+++ b/contrib/epee/src/readline_buffer.cpp
@@ -44,7 +44,7 @@ std::vector<std::string>& rdln::readline_buffer::completion_commands()
}
rdln::readline_buffer::readline_buffer()
-: std::stringbuf(), m_cout_buf(NULL)
+: std::stringbuf(), m_cout_buf(NULL), m_prompt_length(0)
{
current = this;
}
@@ -86,8 +86,11 @@ void rdln::readline_buffer::set_prompt(const std::string& prompt)
if(m_cout_buf == NULL)
return;
boost::lock_guard<boost::mutex> lock(sync_mutex);
+ rl_set_prompt(std::string(m_prompt_length, ' ').c_str());
+ rl_redisplay();
rl_set_prompt(prompt.c_str());
rl_redisplay();
+ m_prompt_length = prompt.size();
}
void rdln::readline_buffer::add_completion(const std::string& command)