sprintf() and siginterrupt() portability problems fixed.
authorshort <>
Tue, 7 Sep 1999 14:35:48 +0000 (14:35 +0000)
committershort <>
Tue, 7 Sep 1999 14:35:48 +0000 (14:35 +0000)
mdsms.c

diff --git a/mdsms.c b/mdsms.c
index ad22e09..d96bd95 100644 (file)
--- a/mdsms.c
+++ b/mdsms.c
@@ -489,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");
 }
@@ -599,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;
@@ -909,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");