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