|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)gio.c 5.6 (Berkeley) 10/9/85"; ! 3: #endif ! 4: ! 5: #include "uucp.h" ! 6: #include "pk.h" ! 7: #include <setjmp.h> ! 8: ! 9: jmp_buf Failbuf; ! 10: ! 11: int Retries = 0; ! 12: struct pack *Pk; ! 13: ! 14: pkfail() ! 15: { ! 16: longjmp(Failbuf, 1); ! 17: } ! 18: ! 19: gturnon() ! 20: { ! 21: struct pack *pkopen(); ! 22: ! 23: if (setjmp(Failbuf)) ! 24: return FAIL; ! 25: Pk = pkopen(Ifn, Ofn); ! 26: if (Pk == NULL) ! 27: return FAIL; ! 28: return SUCCESS; ! 29: } ! 30: ! 31: gturnoff() ! 32: { ! 33: if(setjmp(Failbuf)) ! 34: return(FAIL); ! 35: pkclose(Pk); ! 36: return SUCCESS; ! 37: } ! 38: ! 39: ! 40: gwrmsg(type, str, fn) ! 41: char type; ! 42: register char *str; ! 43: { ! 44: char bufr[BUFSIZ]; ! 45: register char *s; ! 46: int len, i; ! 47: ! 48: if(setjmp(Failbuf)) ! 49: return(FAIL); ! 50: bufr[0] = type; ! 51: s = &bufr[1]; ! 52: while (*str) ! 53: *s++ = *str++; ! 54: *s = '\0'; ! 55: if (*(--s) == '\n') ! 56: *s = '\0'; ! 57: len = strlen(bufr) + 1; ! 58: if ((i = len % PACKSIZE)) { ! 59: len = len + PACKSIZE - i; ! 60: bufr[len - 1] = '\0'; ! 61: } ! 62: gwrblk(bufr, len, fn); ! 63: return SUCCESS; ! 64: } ! 65: ! 66: /*ARGSUSED*/ ! 67: grdmsg(str, fn) ! 68: register char *str; ! 69: { ! 70: unsigned len; ! 71: ! 72: if(setjmp(Failbuf)) ! 73: return FAIL; ! 74: for (;;) { ! 75: len = pkread(Pk, str, PACKSIZE); ! 76: if (len == 0) ! 77: continue; ! 78: str += len; ! 79: if (*(str - 1) == '\0') ! 80: break; ! 81: } ! 82: return SUCCESS; ! 83: } ! 84: ! 85: ! 86: gwrdata(fp1, fn) ! 87: FILE *fp1; ! 88: { ! 89: char bufr[BUFSIZ]; ! 90: register int len; ! 91: int ret, mil; ! 92: struct timeb t1, t2; ! 93: long bytes; ! 94: char text[BUFSIZ]; ! 95: ! 96: if(setjmp(Failbuf)) ! 97: return FAIL; ! 98: bytes = 0L; ! 99: Retries = 0; ! 100: #ifdef USG ! 101: time(&t1.time); ! 102: t1.millitm = 0; ! 103: #else !USG ! 104: ftime(&t1); ! 105: #endif !USG ! 106: while ((len = read(fileno(fp1), bufr, BUFSIZ)) > 0) { ! 107: bytes += len; ! 108: ret = gwrblk(bufr, len, fn); ! 109: if (ret != len) { ! 110: return FAIL; ! 111: } ! 112: if (len != BUFSIZ) ! 113: break; ! 114: } ! 115: ret = gwrblk(bufr, 0, fn); ! 116: #ifdef USG ! 117: time(&t2.time); ! 118: t2.millitm = 0; ! 119: #else !USG ! 120: ftime(&t2); ! 121: #endif !USG ! 122: Now = t2; ! 123: t2.time -= t1.time; ! 124: mil = t2.millitm - t1.millitm; ! 125: if (mil < 0) { ! 126: --t2.time; ! 127: mil += 1000; ! 128: } ! 129: sprintf(text, "sent data %ld bytes %ld.%02d secs", ! 130: bytes, (long)t2.time, mil/10); ! 131: sysacct(bytes, t2.time); ! 132: if (Retries > 0) ! 133: sprintf((char *)text+strlen(text)," %d retries", Retries); ! 134: DEBUG(1, "%s\n", text); ! 135: syslog(text); ! 136: return SUCCESS; ! 137: } ! 138: ! 139: grddata(fn, fp2) ! 140: FILE *fp2; ! 141: { ! 142: register int len; ! 143: char bufr[BUFSIZ]; ! 144: struct timeb t1, t2; ! 145: int mil; ! 146: long bytes; ! 147: char text[BUFSIZ]; ! 148: ! 149: if(setjmp(Failbuf)) ! 150: return FAIL; ! 151: bytes = 0L; ! 152: Retries = 0; ! 153: #ifdef USG ! 154: time(&t1.time); ! 155: t1.millitm = 0; ! 156: #else !USG ! 157: ftime(&t1); ! 158: #endif !USG ! 159: for (;;) { ! 160: len = grdblk(bufr, BUFSIZ, fn); ! 161: if (len < 0) { ! 162: return FAIL; ! 163: } ! 164: bytes += len; ! 165: if (write(fileno(fp2), bufr, len) != len) ! 166: return FAIL; ! 167: if (len < BUFSIZ) ! 168: break; ! 169: } ! 170: #ifdef USG ! 171: time(&t2.time); ! 172: t2.millitm = 0; ! 173: #else !USG ! 174: ftime(&t2); ! 175: #endif !USG ! 176: Now = t2; ! 177: t2.time -= t1.time; ! 178: mil = t2.millitm - t1.millitm; ! 179: if (mil < 0) { ! 180: --t2.time; ! 181: mil += 1000; ! 182: } ! 183: sprintf(text, "received data %ld bytes %ld.%02d secs", ! 184: bytes, (long)t2.time, mil/10); ! 185: sysacct(bytes, t2.time); ! 186: if (Retries > 0) ! 187: sprintf((char *)text+strlen(text)," %d retries", Retries); ! 188: DEBUG(1, "%s\n", text); ! 189: syslog(text); ! 190: return SUCCESS; ! 191: } ! 192: ! 193: #if !defined(BSD4_2) && !defined(USG) ! 194: /* call ultouch every TC calls to either grdblk or gwrblk */ ! 195: #define TC 20 ! 196: static int tc = TC; ! 197: #endif !BSD4_2 && !USG ! 198: ! 199: /*ARGSUSED*/ ! 200: grdblk(blk, len, fn) ! 201: register int len; ! 202: char *blk; ! 203: { ! 204: register int i, ret; ! 205: ! 206: #if !defined(BSD4_2) && !defined(USG) ! 207: /* call ultouch occasionally */ ! 208: if (--tc < 0) { ! 209: tc = TC; ! 210: ultouch(); ! 211: } ! 212: #endif !BSD4_2 && !USG ! 213: for (i = 0; i < len; i += ret) { ! 214: ret = pkread(Pk, blk, len - i); ! 215: if (ret < 0) ! 216: return FAIL; ! 217: blk += ret; ! 218: if (ret == 0) ! 219: return i; ! 220: } ! 221: return i; ! 222: } ! 223: ! 224: /*ARGSUSED*/ ! 225: gwrblk(blk, len, fn) ! 226: register char *blk; ! 227: { ! 228: #if !defined(BSD4_2) && !defined(USG) ! 229: /* call ultouch occasionally */ ! 230: if (--tc < 0) { ! 231: tc = TC; ! 232: ultouch(); ! 233: } ! 234: #endif !BSD4_2 && !USG ! 235: return pkwrite(Pk, blk, len); ! 236: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.