int convD2M9p1(Dir *f, char *ap) { uchar *p; ulong q; p = (uchar*)ap; STRING(name, NAMEREC); STRING(uid, NAMEREC); STRING(gid, NAMEREC); q = f->qid.path & ~0x80000000; if(f->qid.type & QTDIR) q |= 0x80000000; VLONG(q); LONG(qid.vers); LONG(mode); LONG(atime); LONG(mtime); LONG(length); VLONG(0); VLONG(0); return p - (uchar*)ap; }
/* fix the mapped address for a region */ static Mmvm_t* mmfix(Mmvm_t* mmvm, Mmdisc_t* mmdc, int fd) { Void_t *base = mmvm->base; ssize_t size = mmvm->size; if(base != (Void_t*)mmvm) /* mmvm is not right yet */ { /**/ASSERT(!base || (base && (VLONG(base)%_Vmpagesize) == 0) ); if(mmdc->proj < 0) { munmap((Void_t*)mmvm, size); mmvm = (Mmvm_t*)mmap(base, size, (PROT_READ|PROT_WRITE), (MAP_FIXED|MAP_SHARED), fd, (off_t)0 ); } else { shmdt((Void_t*)mmvm); mmvm = (Mmvm_t*)shmat(mmdc->shmid, base, 0); } if(!mmvm || mmvm == (Mmvm_t*)(-1) ) mmvm = NIL(Mmvm_t*); }
int convS2M9p1(Fcall9p1 *f, char *ap) { uchar *p; int t; p = (uchar*)ap; CHAR(type); t = f->type; SHORT(tag); switch(t) { default: fprint(2, "convS2M9p1: bad type: %d\n", t); return 0; case Tnop9p1: case Tosession9p1: break; case Tsession9p1: BYTES(chal, sizeof(f->chal)); break; case Tflush9p1: SHORT(oldtag); break; case Tattach9p1: SHORT(fid); STRING(uname, sizeof(f->uname)); STRING(aname, sizeof(f->aname)); BYTES(ticket, sizeof(f->ticket)); BYTES(auth, sizeof(f->auth)); break; case Toattach9p1: SHORT(fid); STRING(uname, sizeof(f->uname)); STRING(aname, sizeof(f->aname)); BYTES(ticket, NAMEREC); break; case Tclone9p1: SHORT(fid); SHORT(newfid); break; case Twalk9p1: SHORT(fid); STRING(name, sizeof(f->name)); break; case Tclwalk9p1: SHORT(fid); SHORT(newfid); STRING(name, sizeof(f->name)); break; case Topen9p1: SHORT(fid); CHAR(mode); break; case Tcreate9p1: SHORT(fid); STRING(name, sizeof(f->name)); LONG(perm); CHAR(mode); break; case Tread9p1: SHORT(fid); LONG(offset); VLONG(0); SHORT(count); break; case Twrite9p1: SHORT(fid); LONG(offset); VLONG(0); SHORT(count); p++; if((uchar*)p == (uchar*)f->data) { p += f->count; break; } BYTES(data, f->count); break; case Tclunk9p1: case Tremove9p1: case Tstat9p1: SHORT(fid); break; case Twstat9p1: SHORT(fid); BYTES(stat, sizeof(f->stat)); break; /* */ case Rnop9p1: case Rosession9p1: case Rflush9p1: break; case Rsession9p1: BYTES(chal, sizeof(f->chal)); BYTES(authid, sizeof(f->authid)); BYTES(authdom, sizeof(f->authdom)); break; case Rerror9p1: STRING(ename, sizeof(f->ename)); break; case Rclone9p1: case Rclunk9p1: case Rremove9p1: case Rwstat9p1: SHORT(fid); break; case Rwalk9p1: case Ropen9p1: case Rcreate9p1: case Rclwalk9p1: SHORT(fid); LONG(qid.path); LONG(qid.version); break; case Rattach9p1: SHORT(fid); LONG(qid.path); LONG(qid.version); BYTES(rauth, sizeof(f->rauth)); break; case Roattach9p1: SHORT(fid); LONG(qid.path); LONG(qid.version); break; case Rread9p1: SHORT(fid); SHORT(count); p++; if((uchar*)p == (uchar*)f->data) { p += f->count; break; } BYTES(data, f->count); break; case Rwrite9p1: SHORT(fid); SHORT(count); break; case Rstat9p1: SHORT(fid); BYTES(stat, sizeof(f->stat)); break; } return p - (uchar*)ap; }