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