char *s,*s1;
chk(phone=strdup(args[optind++]));
- s=(s1=phone)+(*phone=='+');
- while (*s && s-s1<MAXNUMLEN)
+ for (s=(s1=phone)+(*phone=='+');*s && s-s1<MAXNUMLEN;s++)
if (!isdigit(*s))
error("!Invalid digit '%c' in destination phone number - at offset %d of option %d from \"%s\": %s",
*s,s-phone,optind,from,args[optind]);
}
static char wasalarm=0;
-static void sigalarm(int signo)
+static void sigalarm(int signo);
+
+static void setalarm(void)
{
signal(SIGALRM,(RETSIGTYPE (*)(int))sigalarm);
+#ifdef HAVE_SIGINTERRUPT
+ siginterrupt(SIGALRM,1);
+#endif
+}
+
+static void sigalarm(int signo)
+{
+ setalarm();
wasalarm=1;
if (verbose>=1) error("Timed out");
}
got=read(devfd,buf+bufl,1);
}
if (got<=0) {
- if (wasalarm) error("!Maximum response timeout (%ds) exceeded",readtimen);
- error("Couldn't read device data (ret=%d): %m",got);
+ if (wasalarm) error("Maximum response timeout (%ds) exceeded",readtimen);
+ else error("Couldn't read device data (ret=%d): %m",got);
goto err;
}
s=buf+bufl;
if (tcsetattr(devfd,TCSANOW,&tios))
error("!Unable to set initial termios device settings: %m");
- signal(SIGALRM,(RETSIGTYPE (*)(int))sigalarm);
+ setalarm();
do {
devcmd("",NULL,"\r\nAT\033");
devcmd(NULL,NULL,"\r\nAT");