fix ctrl+C bug

This commit is contained in:
Edward Emelianov 2021-01-12 20:53:44 +03:00
parent 32f67b2fc3
commit c03d11e7b6
2 changed files with 11 additions and 11 deletions

18
main.c
View File

@ -31,11 +31,11 @@ static ttyd dtty = {.dev = NULL, .mutex = PTHREAD_MUTEX_INITIALIZER};
//FILE *fd;
void signals(int signo){
signal(signo, SIG_IGN);
if(dtty.dev){
pthread_mutex_unlock(&dtty.mutex);
pthread_mutex_trylock(&dtty.mutex);
close_tty(&dtty.dev);
pthread_mutex_unlock(&dtty.mutex);
}
//fprintf(fd, "stop\n");
//fflush(fd);
@ -67,13 +67,13 @@ int main(int argc, char **argv){
strcpy(dtty.seol, seol);
int eollen = strlen(EOL);
dtty.eollen = eollen;
init_ncurses();
init_readline();
signal(SIGTERM, signals); // kill (-15) - quit
signal(SIGHUP, signals); // hup - quit
signal(SIGINT, signals); // ctrl+C - quit
signal(SIGQUIT, signals); // ctrl+\ - quit
signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
init_ncurses();
init_readline();
pthread_t writer;
if(pthread_create(&writer, NULL, cmdline, (void*)&dtty)) ERR("pthread_create()");
settimeout(G->tmoutms);
@ -84,27 +84,27 @@ int main(int argc, char **argv){
char *buf = dtty.dev->buf;
char *eol = NULL, *estr = buf + l;
do{
eol = strchr(buf, '\n');
/*eol = strchr(buf, '\n');
if(eol){
*eol = 0;
add_ttydata(buf);
buf = eol + 1;
}else{
add_ttydata(buf);
}
/*eol = strstr(buf, EOL);
}*/
eol = strstr(buf, EOL);
if(eol){
*eol = 0;
add_ttydata(buf);
buf = eol + eollen;
}else{
char *ptr = buf;
/* char *ptr = buf;
while(*ptr){
if(*ptr == '\n' || *ptr == '\r'){ *ptr = 0; break;}
++ptr;
}
}*/
add_ttydata(buf);
}*/
}
}while(eol && buf < estr);
}else if(l < 0){
pthread_mutex_unlock(&dtty.mutex);

View File

@ -136,8 +136,8 @@ static void readline_redisplay(){
static void show_mode(bool for_resize){
wclear(sep_win);
if(insert_mode) wprintw(sep_win, "INSERT (TAB to switch, ctrl+D to quit) ENDLINE: %s", dtty?dtty->seol:"n");
else wprintw(sep_win, "SCROLL (TAB to switch, q to quit) ENDLINE: %s", dtty?dtty->seol:"n");
if(insert_mode) wprintw(sep_win, "INSERT (TAB to switch, ctrl+D to quit) ENDLINE: %s SPEED: %d", dtty?dtty->seol:"n", dtty?dtty->dev->speed:"NC");
else wprintw(sep_win, "SCROLL (TAB to switch, q to quit) ENDLINE: %s SPEED: %d", dtty?dtty->seol:"n", dtty?dtty->dev->speed:"NC");
if(for_resize) wnoutrefresh(sep_win);
else wrefresh(sep_win);
cmd_win_redisplay(for_resize);