From 8de7f62af142e23c9301b498a0004848bd5be667 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Tue, 6 Dec 2011 02:44:25 +0000 Subject: [PATCH] Fix xmodem upload bug where a FILE handle leak could occure and telnet could stay in binary mode. Allow transfer abort callback to ignore mouse keys (and each extended keys) --- src/syncterm/term.c | 48 ++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/syncterm/term.c b/src/syncterm/term.c index fb81a7d292..deeb60b9b7 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -263,17 +263,26 @@ static BOOL zmodem_check_abort(void* vp) zmodem_t* zm=zcb->zm; static time_t last_check=0; time_t now=time(NULL); + int key; if(last_check != now) { last_check=now; - if(zm!=NULL && kbhit()) { - switch(getch()) { - case ESC: - case CTRL_C: - case CTRL_X: + if(zm!=NULL) { + while(kbhit()) { + switch((key=getch())) { + case ESC: + case CTRL_C: + case CTRL_X: zm->cancelled=TRUE; - zm->local_abort=TRUE; - break; + zm->local_abort=TRUE; + break; + case 0: + case 0xff: + key |= (getch() << 8); + if(key==CIO_KEY_MOUSE) + getmouse(NULL); + break; + } } } } @@ -1196,16 +1205,25 @@ static BOOL xmodem_check_abort(void* vp) xmodem_t* xm = (xmodem_t*)vp; static time_t last_check=0; time_t now=time(NULL); + int key; if(last_check != now) { last_check=now; - if(xm!=NULL && kbhit()) { - switch(getch()) { - case ESC: - case CTRL_C: - case CTRL_X: - xm->cancelled=TRUE; - break; + if(xm!=NULL) { + while(kbhit()) { + switch((key=getch())) { + case ESC: + case CTRL_C: + case CTRL_X: + xm->cancelled=TRUE; + break; + case 0: + case 0xff: + key |= (getch() << 8); + if(key==CIO_KEY_MOUSE) + getmouse(NULL); + break; + } } } } @@ -1417,6 +1435,8 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las ,path,fsize/1024,(mode&GMODE)?"-g":""); } else { + fclose(fp); + conn_binary_mode_off(); return; } -- GitLab