summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
authorspxtr <spextear@gmail.com>2015-11-03 20:26:23 -0800
committerspxtr <spextear@gmail.com>2015-11-03 20:26:23 -0800
commit4faf958fee7e913b04d15d620ffa7d932f7bf65f (patch)
tree0757cc151a1d5b4977c1365ac6391a52df851933 /Source/Core/InputCommon/ControllerInterface
parentb14f5424bf9b289603ef4c9ee1bb640f1bc76dc2 (diff)
Fix some bugs in Pipe input parsing.
If there were two commands in the buffer at once, it would only run the first because of an error in UpdateInput. If you sent the command "SET C" it would segfault because of a logic issue in ParseCommand.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Pipes/Pipes.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/Pipes/Pipes.cpp b/Source/Core/InputCommon/ControllerInterface/Pipes/Pipes.cpp
index f2923a5395..e98e31ac9f 100644
--- a/Source/Core/InputCommon/ControllerInterface/Pipes/Pipes.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/Pipes/Pipes.cpp
@@ -111,15 +111,13 @@ void PipeDevice::UpdateInput()
bytes_read = read(m_fd, buf, sizeof buf);
}
std::size_t newline = m_buf.find("\n");
- std::size_t erase_until = 0;
while (newline != std::string::npos)
{
std::string command = m_buf.substr(0, newline);
ParseCommand(command);
- erase_until = newline + 1;
- newline = m_buf.find("\n", erase_until);
+ m_buf.erase(0, newline + 1);
+ newline = m_buf.find("\n");
}
- m_buf.erase(0, erase_until);
}
void PipeDevice::AddAxis(const std::string& name, double value)
@@ -166,7 +164,7 @@ void PipeDevice::ParseCommand(const std::string& command)
double value = strtod(tokens[2].c_str(), nullptr);
SetAxis(tokens[1], (value / 2.0) + 0.5);
}
- else
+ else if (tokens.size() == 4)
{
double x = strtod(tokens[2].c_str(), nullptr);
double y = strtod(tokens[3].c_str(), nullptr);