diff --git a/MD_Getc.c b/MD_Getc.c index 9d26548..f07ddbd 100644 --- a/MD_Getc.c +++ b/MD_Getc.c @@ -17,6 +17,15 @@ extern time_t mdtimeout; extern time_t mdtimeremaining; char md_getc() { + char c; + do { + c = md_getche(60, 0); + } while(c == -1); + + return c; +} + +char md_getche(uint32_t sec, uint32_t usec) { char c = 'x'; int ret; int rs; @@ -34,8 +43,8 @@ char md_getc() { FD_SET(mdcontrol.socket, &rfd); } - tv.tv_sec = 60; - tv.tv_usec = 0; + tv.tv_sec = sec; + tv.tv_usec = usec; if (mdcontrol.socket == -1) { rs = select(STDIN_FILENO + 1, &rfd, NULL, NULL, &tv); @@ -52,6 +61,7 @@ char md_getc() { md_printf("\r\nOut of time!\r\n"); md_exit(0); } + return -1; } else if (rs == -1 && errno != EINTR) { md_exit(0); } else if (mdcontrol.socket != -1 && FD_ISSET(mdcontrol.socket, &rfd)) { diff --git a/MagiDoor.h b/MagiDoor.h index edba239..69e817b 100644 --- a/MagiDoor.h +++ b/MagiDoor.h @@ -24,7 +24,7 @@ typedef struct MDDoorControl { extern MDDoorControl_t mdcontrol; - +extern char md_getche(uint32_t sec, uint32_t usec); extern void md_init(const char* dropfile, int socket); extern void md_exit(int exitcode); extern void md_putchar(char c);