sprintf() and siginterrupt() portability problems fixed.
[mdsms.git] / mdsms.c
diff --git a/mdsms.c b/mdsms.c
index 891d18e..d96bd95 100644 (file)
--- a/mdsms.c
+++ b/mdsms.c
@@ -367,8 +367,7 @@ int i;
 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]);
@@ -490,9 +489,19 @@ remove:
 }
 
 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");
 }
@@ -600,8 +609,8 @@ err:
                        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;
@@ -910,7 +919,7 @@ time_t start,end;
        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");