X-Git-Url: https://git.jankratochvil.net/?p=gnokii.git;a=blobdiff_plain;f=common%2Fdata%2Fvirtmodem.c;h=169b11760953e521afc617d87fdf862fa419cfc4;hp=2ca698ba691968561e4cacbc1c24d61f9ce07623;hb=35acc80f23f9f81f3145a686a9c7df4b622b25fe;hpb=c3dfc66506543beda81736a00b6ecd20aefa61b1 diff --git a/common/data/virtmodem.c b/common/data/virtmodem.c index 2ca698b..169b117 100644 --- a/common/data/virtmodem.c +++ b/common/data/virtmodem.c @@ -136,14 +136,18 @@ bool VM_ThreadLoop(void) FD_ZERO(&readfds); FD_SET(PtyRDFD,&readfds); + FD_SET(device_portfd,&readfds); timeout.tv_sec=2; timeout.tv_usec=0;/*500*1000;*/ - res = select(PtyRDFD+1,&readfds,NULL/*writefds*/,NULL/*exceptfds*/,&timeout); + res = select((device_portfd > PtyRDFD ? device_portfd : PtyRDFD)+1, + &readfds,NULL/*writefds*/,NULL/*exceptfds*/,&timeout); switch (res) { case 0: /* Timeout */ +#if 0 N6110_SendStatusRequest(); +#endif break; case -1: @@ -153,9 +157,12 @@ bool VM_ThreadLoop(void) return (false); default: - if (FD_ISSET(PtyRDFD,&readfds)) { + if (FD_ISSET(PtyRDFD,&readfds)) VM_CharHandler(); - } else usleep(500); /* Probably the file has been closed */ + if (FD_ISSET(device_portfd,&readfds)) + SigHandler(0); + if (!FD_ISSET(PtyRDFD,&readfds) && !FD_ISSET(device_portfd,&readfds)) + usleep(500); /* Probably the file has been closed */ break; } } @@ -341,8 +348,11 @@ static int VM_GetMasterPty(char **name) { /* search for an unused pty */ for (i=0; i<16 && master <= 0; i++) { for (j=0; j<16 && master <= 0; j++) { - (*name)[8] = "pqrstuvwxyzPQRST"[i]; - (*name)[9] = "0123456789abcdef"[j]; +static const char *ptyp8="pqrstuvwxyzPQRST"; +static const char *ptyp9="0123456789abcdef"; + + (*name)[8] = ptyp8[i]; + (*name)[9] = ptyp9[j]; /* open the master pty */ if ((master = open(*name, O_RDWR | O_NOCTTY | O_NONBLOCK )) < 0) { if (errno == ENOENT) {