|
|
1.1 ! root 1: static char SCCSID[] = "@(#)dkxwrite.c 2.1 DKHOST 84/08/28"; ! 2: ! 3: #include "remfio.h" ! 4: #include <stdio.h> ! 5: #include "sysexits.h" ! 6: ! 7: /* extern int dkverbose; */ ! 8: ! 9: /* ! 10: * Write a length-preceeded block over a dkxqt protocol channel ! 11: * ! 12: * netfd = file descriptor to use ! 13: * addr = character pointer to beginning of block ! 14: * len = number of bytes in block ! 15: * return = >0 : write successful ! 16: * | <0 : write failed ! 17: */ ! 18: ! 19: dkxlwrite(netfd, addr, len) ! 20: char *addr; ! 21: { ! 22: int n; ! 23: short slen; ! 24: char clen[3]; ! 25: ! 26: slen = len; ! 27: ! 28: dktcanon("s", &slen, clen); ! 29: ! 30: if((n = dkxwrite(netfd, clen, 2)) < 0) ! 31: return(n); ! 32: ! 33: if(len > 0) ! 34: n = dkxwrite(netfd, addr, len); ! 35: ! 36: return(n); ! 37: } ! 38: ! 39: /* ! 40: * Write a block over a dkxqt protocol channel ! 41: * ! 42: * netfd = file descriptor to use ! 43: * addr = character pointer to beginning of block ! 44: * len = number of bytes in block ! 45: * return = >0 : write successful ! 46: * | <0 : write failed ! 47: */ ! 48: ! 49: dkxwrite(netfd, addr, len) ! 50: char *addr; ! 51: { ! 52: int n; ! 53: ! 54: if((n = dkxpwrite(netfd, len)) < 0) ! 55: return(n); ! 56: ! 57: return(write(netfd, addr, len)); ! 58: } ! 59: ! 60: /* ! 61: * Prepare to write a block over a dkxqt protocol channel ! 62: * ! 63: * Write the protocol envelope necessary before sending the block itself ! 64: * ! 65: * netfd = file descriptor to use ! 66: * len = number of bytes in block ! 67: * return = >0 : write successful ! 68: * | <0 : write failed ! 69: */ ! 70: ! 71: dkxpwrite(netfd, len) ! 72: { ! 73: int n; ! 74: struct rem_req r; ! 75: struct rem_reply s; ! 76: char sb[REMSIZE], rb[REMSIZE]; ! 77: ! 78: n = iread(netfd, rb, REMSIZE); ! 79: dkfcanon(F_REMREQ, rb, &r); ! 80: ! 81: if(n != REMSIZE || r.r_type != RREAD || r.r_var.rread.r_count != len){ ! 82: /* if(dkverbose) ! 83: fprintf(stderr, "dkxpwrite: REMREQ wrong\n"); */ ! 84: return(-EX_PROTOCOL); ! 85: } ! 86: ! 87: s.s_type = RREAD; ! 88: s.s_length = len; ! 89: s.s_error = 0; ! 90: s.s_resid = 0; ! 91: dktcanon(F_REMREPLY, &s, sb) ; ! 92: ! 93: return(write(netfd, sb, REMSIZE)); ! 94: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.