check for error on socket()
[unix-history] / usr / src / usr.bin / uucp / uucico / pk1.c
index fe984af..8811e35 100644 (file)
@@ -1,16 +1,11 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)pk1.c      5.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)pk1.c      5.6 (Berkeley) %G%";
 #endif
 
 #endif
 
-#ifdef USG
-#include <sys/types.h>
-#endif USG
-#include <sys/param.h>
-#include "pk.h"
+#include <signal.h>
 #include "uucp.h"
 #include "uucp.h"
-#include <sys/buf.h>
+#include "pk.h"
 #include <setjmp.h>
 #include <setjmp.h>
-#include <signal.h>
 #ifdef BSD4_2
 #include <sys/time.h>
 #endif BSD4_2
 #ifdef BSD4_2
 #include <sys/time.h>
 #endif BSD4_2
@@ -27,8 +22,8 @@ int iomask[2];
 #define CONNODATA 10
 #define NTIMEOUT 10
 
 #define CONNODATA 10
 #define NTIMEOUT 10
 
-extern int Errorrate;
 extern int errno;
 extern int errno;
+extern int Retries;
 extern char *sys_errlist[];
 extern jmp_buf Sjbuf;
 extern char *malloc();
 extern char *sys_errlist[];
 extern jmp_buf Sjbuf;
 extern char *malloc();
@@ -40,7 +35,7 @@ int Ntimeout = 0;
  *
  */
 
  *
  */
 
-struct pack *pklines[NPLINES];
+extern struct pack *pklines[];
 
 /*
  * start initial synchronization.
 
 /*
  * start initial synchronization.
@@ -155,6 +150,7 @@ struct pack *ipk;
                }
                /* set up retransmit or REJ */
                tries++;
                }
                /* set up retransmit or REJ */
                tries++;
+               Retries++;
                pk->p_msg |= pk->p_rmsg;
                if (pk->p_msg == 0)
                        pk->p_msg |= M_RR;
                pk->p_msg |= pk->p_rmsg;
                if (pk->p_msg == 0)
                        pk->p_msg |= M_RR;
@@ -330,8 +326,7 @@ int count, flag;
        if (flag == B_WRITE) {
                s = p2;
                d = p1;
        if (flag == B_WRITE) {
                s = p2;
                d = p1;
-       }
-       else {
+       } else {
                s = p1;
                d = p2;
        }
                s = p1;
                d = p2;
        }
@@ -358,13 +353,15 @@ cgalarm()
 }
 
 pkcget(fn, b, n)
 }
 
 pkcget(fn, b, n)
-int fn, n;
+int fn;
+register int n;
 register char *b;
 {
 register char *b;
 {
-       register int nchars, ret;
+       register int ret;
        extern int linebaudrate;
 #ifdef BSD4_2
        extern int linebaudrate;
 #ifdef BSD4_2
-       long r, itime = 0;
+       long r, itime = 100000L; /* guess it's been 1/10th second since we
+                                   last read the line */
        struct timeval tv;
 #endif BSD4_2
 #ifdef VMS
        struct timeval tv;
 #endif BSD4_2
 #ifdef VMS
@@ -380,14 +377,32 @@ register char *b;
        signal(SIGALRM, cgalarm);
 
        alarm(PKTIME);
        signal(SIGALRM, cgalarm);
 
        alarm(PKTIME);
-       for (nchars = 0; nchars < n; ) {
+       while (n > 0) {
+#ifdef BSD4_2
+               if (linebaudrate > 0) {
+                       r = n  * 100000L;
+                       r = r / linebaudrate;
+                       r = (r * 100) - itime;
+                       itime = 0;
+                       /* we predict that more than 1/50th of a
+                          second will go by before the read will
+                          give back all that we want. */
+                       if (r > 20000) {
+                               tv.tv_sec = r / 1000000L;
+                               tv.tv_usec = r % 1000000L;
+                               DEBUG(11, "PKCGET stall for %d", tv.tv_sec);
+                               DEBUG(11, ".%06d sec\n", tv.tv_usec);
+                               (void) select (0, (int *)0, (int *)0, (int *)0, &tv);
+                       }
+               }
+#endif BSD4_2
 #ifndef VMS
 #ifndef VMS
-               ret = read(fn, b, n - nchars);
+               ret = read(fn, b, n);
 #else VMS
                _$Cancel_IO_On_Signal = FD_FAB_Pointer[fn];
                ret = SYS$QioW(_$EFN,(FD_FAB_Pointer[fn]->fab).fab$l_stv,
                                IO$_READVBLK|IO$M_NOFILTR|IO$M_NOECHO,
 #else VMS
                _$Cancel_IO_On_Signal = FD_FAB_Pointer[fn];
                ret = SYS$QioW(_$EFN,(FD_FAB_Pointer[fn]->fab).fab$l_stv,
                                IO$_READVBLK|IO$M_NOFILTR|IO$M_NOECHO,
-                               iosb,0,0,b,n-nchars,0,
+                               iosb,0,0,b,n,0,
                                iomask,0,0);
                _$Cancel_IO_On_Signal = 0;
                if (ret == SS$_NORMAL)
                                iomask,0,0);
                _$Cancel_IO_On_Signal = 0;
                if (ret == SS$_NORMAL)
@@ -401,33 +416,11 @@ register char *b;
                }
                if (ret <= 0) {
                        alarm(0);
                }
                if (ret <= 0) {
                        alarm(0);
-                       logent("PKCGET read failed", sys_errlist[errno]);
+                       logent(sys_errlist[errno],"FAILED pkcget Read");
                        longjmp(Sjbuf, 6);
                }
                b += ret;
                        longjmp(Sjbuf, 6);
                }
                b += ret;
-               nchars += ret;
-               if (nchars < n)
-#ifndef BSD4_2
-                       if (linebaudrate > 0 && linebaudrate < 4800)
-                               sleep(1);
-#else BSD4_2
-                       if (linebaudrate > 0) {
-                               r = (n - nchars) * 100000;
-                               r = r / linebaudrate;
-                               r = (r * 100) - itime;
-                               itime = 0;
-                               /* we predict that more than 1/50th of a
-                                  second will go by before the read will
-                                  give back all that we want. */
-                               if (r > 20000) {
-                                       tv.tv_sec = r / 1000000L;
-                                       tv.tv_usec = r % 1000000L;
-                                       DEBUG(11, "PKCGET stall for %d", tv.tv_sec);
-                                       DEBUG(11, ".%06d sec\n", tv.tv_usec);
-                                       (void) select (fn, (int *)0, (int *)0, (int *)0, &tv);
-                               }
-                       }
-#endif BSD4_2
+               n -= ret;
        }
        alarm(0);
        return SUCCESS;
        }
        alarm(0);
        return SUCCESS;