diff options
author | Jose <pepone@users.noreply.github.com> | 2021-01-07 20:25:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-07 20:25:12 +0100 |
commit | 0396ab5884e6354b1a828cbc91ef6e2177eed2aa (patch) | |
tree | 235369028744e6612ad65dbe90fe72465ac21bc5 | |
parent | Fix u8 string in Ice/proxy test (diff) | |
download | ice-0396ab5884e6354b1a828cbc91ef6e2177eed2aa.tar.bz2 ice-0396ab5884e6354b1a828cbc91ef6e2177eed2aa.tar.xz ice-0396ab5884e6354b1a828cbc91ef6e2177eed2aa.zip |
Use readline only when stdin is a tty (#1230)
* Use readline only with TTY terminals
* Fix readline usage in IceStorm
-rw-r--r-- | cpp/src/IceGrid/Parser.cpp | 103 | ||||
-rw-r--r-- | cpp/src/IceStorm/Parser.cpp | 107 |
2 files changed, 111 insertions, 99 deletions
diff --git a/cpp/src/IceGrid/Parser.cpp b/cpp/src/IceGrid/Parser.cpp index d8e997f9778..edcf11e4c69 100644 --- a/cpp/src/IceGrid/Parser.cpp +++ b/cpp/src/IceGrid/Parser.cpp @@ -2573,70 +2573,77 @@ Parser::getInput(char* buf, size_t& result, size_t maxSize) else { #if defined(__APPLE__) || defined(__linux__) - const char* prompt = parser->getPrompt(); - char* line = readline(const_cast<char*>(prompt)); - if(!line) + if (isatty(fileno(stdin)) == 1) { - result = 0; - } - else - { - if(*line) + const char* prompt = parser->getPrompt(); + char* line = readline(const_cast<char*>(prompt)); + if(!line) { - add_history(line); - } - - result = strlen(line) + 1; - if(result > maxSize) - { - free(line); - error("input line too long"); result = 0; } else { - strcpy(buf, line); - strcat(buf, "\n"); - free(line); + if(*line) + { + add_history(line); + } + + result = strlen(line) + 1; + if(result > maxSize) + { + free(line); + error("input line too long"); + result = 0; + } + else + { + strcpy(buf, line); + strcat(buf, "\n"); + free(line); + } } } -#else - consoleOut << parser->getPrompt() << flush; - string line; - while(true) + else { - int c = getc(yyin); - if(c == EOF) +#endif + consoleOut << parser->getPrompt() << flush; + string line; + while(true) { - if(line.size()) + int c = getc(yyin); + if(c == EOF) { - line += '\n'; + if(line.size()) + { + line += '\n'; + } + break; } - break; - } - line += static_cast<char>(c); - if(c == '\n') - { - break; + line += static_cast<char>(c); + if(c == '\n') + { + break; + } } - } #ifdef _WIN32 - if(windowsConsoleConverter) - { - line = nativeToUTF8(line, windowsConsoleConverter); - } + if(windowsConsoleConverter) + { + line = nativeToUTF8(line, windowsConsoleConverter); + } #endif - result = line.length(); - if(result > maxSize) - { - error("input line too long"); - buf[0] = EOF; - result = 1; - } - else - { - strcpy(buf, line.c_str()); + result = line.length(); + if(result > maxSize) + { + error("input line too long"); + buf[0] = EOF; + result = 1; + } + else + { + strcpy(buf, line.c_str()); + } +#if defined(__APPLE__) || defined(__linux__) } #endif } diff --git a/cpp/src/IceStorm/Parser.cpp b/cpp/src/IceStorm/Parser.cpp index 52f22f71b55..0629ca0e393 100644 --- a/cpp/src/IceStorm/Parser.cpp +++ b/cpp/src/IceStorm/Parser.cpp @@ -444,75 +444,80 @@ Parser::getInput(char* buf, size_t& result, size_t maxSize) } else { - #if defined(__APPLE__) || defined(__linux__) - const char* prompt = parser->getPrompt(); - char* line = readline(const_cast<char*>(prompt)); - if(!line) - { - result = 0; - } - else + if (isatty(fileno(stdin)) == 1) { - if(*line) - { - add_history(line); - } - - result = strlen(line) + 1; - if(result > maxSize) + const char* prompt = parser->getPrompt(); + char* line = readline(const_cast<char*>(prompt)); + if(!line) { - free(line); - error("input line too long"); result = 0; } else { - strcpy(buf, line); - strcat(buf, "\n"); - free(line); + if(*line) + { + add_history(line); + } + + result = strlen(line) + 1; + if(result > maxSize) + { + free(line); + error("input line too long"); + result = 0; + } + else + { + strcpy(buf, line); + strcat(buf, "\n"); + free(line); + } } } -#else - consoleOut << parser->getPrompt() << flush; - - string line; - while(true) + else { - int c = getc(yyin); - if(c == EOF) +#endif + consoleOut << parser->getPrompt() << flush; + + string line; + while(true) { - if(line.size()) + int c = getc(yyin); + if(c == EOF) { - line += '\n'; + if(line.size()) + { + line += '\n'; + } + break; } - break; - } - line += static_cast<char>(c); - if(c == '\n') - { - break; + line += static_cast<char>(c); + if(c == '\n') + { + break; + } } - } #ifdef _WIN32 - if(windowsConsoleConverter) - { - line = nativeToUTF8(line, windowsConsoleConverter); - } + if(windowsConsoleConverter) + { + line = nativeToUTF8(line, windowsConsoleConverter); + } #endif - result = line.length(); - if(result > maxSize) - { - error("input line too long"); - buf[0] = EOF; - result = 1; - } - else - { - strcpy(buf, line.c_str()); + result = line.length(); + if(result > maxSize) + { + error("input line too long"); + buf[0] = EOF; + result = 1; + } + else + { + strcpy(buf, line.c_str()); + } +#if defined(__APPLE__) || defined(__linux__) } - #endif } } |