summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-01-14 21:49:03 +0100
committertomsmeding <tom.smeding@gmail.com>2017-01-14 21:49:03 +0100
commitdfd6c08655f7a0ac0e93e3227b0b54ef19a6df1f (patch)
tree010e1121fc18e5bf849a963290636922f9e9058a
parent2559a5d6d3df07f5d673f376f4a153edc7a16e5f (diff)
Check error conditions from tgetkey()
-rw-r--r--manager.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/manager.cpp b/manager.cpp
index 0bdd0a4..f2f9ab2 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -204,6 +204,16 @@ int Manager::io(){
redraw();
int key=tgetkey();
+ if(key<0){
+ cerr<<"Input read error: key="<<key<<endl;
+ key=tgetkey();
+ if(key<0){
+ cerr<<"Input double read error: key="<<key<<endl;
+ break;
+ } else {
+ receive({"error","Standard input is unreliable!"});
+ }
+ }
Either<bool,Command> ret=global_keyinput.input(key);
if(ret.isLeft()){
@@ -250,6 +260,11 @@ Maybe<string> Manager::promptString(const string &promptString){
redraw();
int key=tgetkey();
+ if(key<0){
+ cerr<<"Input read error in promptString: key="<<key<<endl;
+ fillrect(0,termsize.h-1,termsize.w,1,' ');
+ return {};
+ }
Either<bool,Command> ret=global_keyinput.input(key);
if(ret.isLeft()){
@@ -286,6 +301,11 @@ char Manager::promptChar(const string &promptString,const string &options,char d
while(true){
int key=tgetkey();
+ if(key<0){
+ cerr<<"Input read error in promptChar: key="<<key<<endl;
+ fillrect(0,termsize.h-1,termsize.w,1,' ');
+ return def;
+ }
if(key==KEY_ESC)return def;
if(key<=0||key>=127){
bel();