|
10 | 10 | #ifdef _WIN32 |
11 | 11 | #include "Platform.h" |
12 | 12 | #endif |
| 13 | +#include <iostream> |
13 | 14 | #include <string.h> |
14 | 15 |
|
15 | 16 | // In-house headers: |
|
28 | 29 | // Throws: None. |
29 | 30 | //-- |
30 | 31 | CMICmnStreamStdin::CMICmnStreamStdin() |
31 | | - : m_strPromptCurrent("(gdb)"), m_bShowPrompt(true), m_pCmdBuffer(nullptr) {} |
| 32 | + : m_strPromptCurrent("(gdb)"), m_bShowPrompt(true) {} |
32 | 33 |
|
33 | 34 | //++ |
34 | 35 | // Details: CMICmnStreamStdin destructor. |
@@ -61,9 +62,7 @@ bool CMICmnStreamStdin::Initialize() { |
61 | 62 | MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg); |
62 | 63 | MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg); |
63 | 64 |
|
64 | | - if (bOk) { |
65 | | - m_pCmdBuffer = new char[m_constBufferSize]; |
66 | | - } else { |
| 65 | + if (!bOk) { |
67 | 66 | CMIUtilString strInitError(CMIUtilString::Format( |
68 | 67 | MIRSRC(IDS_MI_INIT_ERR_STREAMSTDIN), errMsg.c_str())); |
69 | 68 | SetErrorDescription(strInitError); |
@@ -94,11 +93,6 @@ bool CMICmnStreamStdin::Shutdown() { |
94 | 93 |
|
95 | 94 | ClrErrorDescription(); |
96 | 95 |
|
97 | | - if (m_pCmdBuffer != nullptr) { |
98 | | - delete[] m_pCmdBuffer; |
99 | | - m_pCmdBuffer = nullptr; |
100 | | - } |
101 | | - |
102 | 96 | bool bOk = MIstatus::success; |
103 | 97 | CMIUtilString errMsg; |
104 | 98 |
|
@@ -186,33 +180,22 @@ bool CMICmnStreamStdin::GetEnablePrompt() const { return m_bShowPrompt; } |
186 | 180 | const char *CMICmnStreamStdin::ReadLine(CMIUtilString &vwErrMsg) { |
187 | 181 | vwErrMsg.clear(); |
188 | 182 |
|
189 | | - // Read user input |
190 | | - const char *pText = ::fgets(&m_pCmdBuffer[0], m_constBufferSize, stdin); |
191 | | - if (pText == nullptr) { |
| 183 | + std::getline(std::cin, m_pCmdString); |
| 184 | + |
| 185 | + if (std::cin.eof()) { |
192 | 186 | #ifdef _MSC_VER |
193 | 187 | // Was Ctrl-C hit? |
194 | 188 | // On Windows, Ctrl-C gives an ERROR_OPERATION_ABORTED as error on the |
195 | | - // command-line. |
196 | | - // The end-of-file indicator is also set, so without this check we will exit |
197 | | - // next if statement. |
| 189 | + // command-line and the end-of-file indicator is also set. |
198 | 190 | if (::GetLastError() == ERROR_OPERATION_ABORTED) |
199 | 191 | return nullptr; |
200 | 192 | #endif |
201 | | - if (::feof(stdin)) { |
202 | | - const bool bForceExit = true; |
203 | | - CMIDriver::Instance().SetExitApplicationFlag(bForceExit); |
204 | | - } else if (::ferror(stdin) != 0) |
205 | | - vwErrMsg = ::strerror(errno); |
| 193 | + const bool bForceExit = true; |
| 194 | + CMIDriver::Instance().SetExitApplicationFlag(bForceExit); |
| 195 | + } else if (std::cin.fail()) { |
| 196 | + vwErrMsg = ::strerror(errno); |
206 | 197 | return nullptr; |
207 | 198 | } |
208 | 199 |
|
209 | | - // Strip off new line characters |
210 | | - for (char *pI = m_pCmdBuffer; *pI != '\0'; pI++) { |
211 | | - if ((*pI == '\n') || (*pI == '\r')) { |
212 | | - *pI = '\0'; |
213 | | - break; |
214 | | - } |
215 | | - } |
216 | | - |
217 | | - return pText; |
| 200 | + return m_pCmdString.c_str(); |
218 | 201 | } |
0 commit comments