|
|
1.1 ! root 1: /* rfmkpac.c - rfmkpac */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <network.h> ! 6: ! 7: static struct fpacket packet; ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * rfmkpac -- make a remote file request packet and send it ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: rfmkpac(rop, rname, rpos, buff, len) ! 14: int rop; ! 15: char *rname; ! 16: long *rpos; ! 17: char *buff; ! 18: int len; ! 19: { ! 20: struct fphdr *fptr; ! 21: int reqlen, rplylen; ! 22: ! 23: wait(Rf.rmutex); ! 24: fptr = (struct fphdr *) &packet; ! 25: fptr->f_op = hs2net(rop); ! 26: fptr->f_pos = hl2net(*rpos); ! 27: fptr->f_count = hs2net(len); ! 28: strncpy(fptr->f_name, rname, RNAMLEN); ! 29: reqlen = rplylen = FPHLEN + len; ! 30: switch (rop) { ! 31: ! 32: case FS_WRITE: ! 33: case FS_RENAME: ! 34: if (len > RDATLEN) { ! 35: signal(Rf.rmutex); ! 36: return(SYSERR); ! 37: } ! 38: blkcopy(packet.fpdata, buff, len); ! 39: rplylen = FPHLEN; ! 40: break; ! 41: ! 42: case FS_CLOSE: ! 43: case FS_OPEN: ! 44: case FS_UNLINK: ! 45: case FS_MKDIR: ! 46: case FS_RMDIR: ! 47: case FS_ACCESS: ! 48: rplylen = FPHLEN; ! 49: /* fall through */ ! 50: ! 51: case FS_READ: ! 52: if (len > RDATLEN) { ! 53: signal(Rf.rmutex); ! 54: return(SYSERR); ! 55: } ! 56: reqlen = FPHLEN; ! 57: break; ! 58: ! 59: default: ! 60: ; ! 61: } ! 62: if (rfsend(fptr, reqlen, rplylen) == SYSERR || ! 63: net2hs(fptr->f_op) == FS_ERROR) { ! 64: signal(Rf.rmutex); ! 65: return(SYSERR); ! 66: } ! 67: switch (rop) { ! 68: ! 69: case FS_READ: ! 70: blkcopy(buff, packet.fpdata, len); ! 71: /* fall through */ ! 72: ! 73: case FS_WRITE: ! 74: *rpos = net2hl(fptr->f_pos); ! 75: len = net2hs(fptr->f_count); ! 76: break; ! 77: ! 78: default: ! 79: len = OK; ! 80: } ! 81: signal(Rf.rmutex); ! 82: return(len); ! 83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.