~kris/9p

9hist

eb8f04f8a863cb3c97dd6accb74d7a336eef7624 — David du Colombier 35 years ago 4246f3d
Plan 9 from Bell Labs 1991-03-18
M gnot/devcons.c => gnot/devcons.c +7 -7
@@ 445,7 445,7 @@ readnum(ulong off, char *buf, ulong n, ulong val, int size)
		return 0;
	if(off+n > size)
		n = size-off;
	memcpy(buf, tmp+off, n);
	memmove(buf, tmp+off, n);
	return n;
}



@@ 459,7 459,7 @@ readstr(ulong off, char *buf, ulong n, char *str)
		return 0;
	if(off+n > size)
		n = size-off;
	memcpy(buf, str+off, n);
	memmove(buf, str+off, n);
	return n;
}



@@ 641,7 641,7 @@ consread(Chan *c, void *buf, long n)
			l = TK2MS(l);
			readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE);
		}
		memcpy(buf, tmp+k, n);
		memmove(buf, tmp+k, n);
		return n;

	case Qpgrpid:


@@ 666,7 666,7 @@ consread(Chan *c, void *buf, long n)
			n = 2*NUMSIZE - k;
		readnum(0, tmp, NUMSIZE, MACHP(0)->ticks, NUMSIZE);
		readnum(0, tmp+NUMSIZE, NUMSIZE, HZ, NUMSIZE);
		memcpy(buf, tmp+k, n);
		memmove(buf, tmp+k, n);
		return n;

	case Quser:


@@ 717,7 717,7 @@ conswrite(Chan *c, void *va, long n)
			m = l;
			if(m > sizeof buf)
				m = sizeof buf;
			memcpy(buf, a, m);
			memmove(buf, a, m);
			putstrn(a, m);
			a += m;
			l -= m;


@@ 734,7 734,7 @@ conswrite(Chan *c, void *va, long n)
			return 0;
		if(n >= sizeof cbuf)
			n = sizeof cbuf - 1;
		memcpy(cbuf, a, n);
		memmove(cbuf, a, n);
		cbuf[n-1] = 0;
		boottime = strtoul(a, 0, 0);
		break;


@@ 746,7 746,7 @@ conswrite(Chan *c, void *va, long n)
			return 0;
		if(c->offset+n >= NAMELEN-1)
			n = NAMELEN-1 - c->offset;
		memcpy(u->p->pgrp->user+c->offset, a, n);
		memmove(u->p->pgrp->user+c->offset, a, n);
		u->p->pgrp->user[c->offset+n] = 0;
		break;


M gnot/lib.h => gnot/lib.h +1 -1
@@ 8,7 8,7 @@
extern	void	*memccpy(void*, void*, int, long);
extern	void	*memset(void*, int, long);
extern	int	memcmp(void*, void*, long);
extern	void	*memcpy(void*, void*, long);
extern	void	*memmove(void*, void*, long);
extern	void	*memchr(void*, int, long);

/*

M gnot/main.c => gnot/main.c +5 -5
@@ 61,8 61,8 @@ void
unloadboot(void)
{
	strncpy(user, BOOT->user, NAMELEN);
	memcpy(bootline, BOOT->line, 64);
	memcpy(bootserver, BOOT->server, 64);
	memmove(bootline, BOOT->line, 64);
	memmove(bootserver, BOOT->server, 64);
	bootdevice[0] = BOOT->device;
}



@@ 181,7 181,7 @@ userinit(void)
	s->o->pte[0].page = newpage(0, 0, UTZERO);
	s->o->npage = 1;
	k = kmap(s->o->pte[0].page);
	memcpy((ulong*)VA(k), initcode, sizeof initcode);
	memmove((ulong*)VA(k), initcode, sizeof initcode);
	kunmap(k);
	s->minva = UTZERO;
	s->maxva = UTZERO+BY2PG;


@@ 379,7 379,7 @@ procsave(uchar *state, int len)
		m->fpstate = FPdirty;
	}
	if(BALU->cr0 != 0xFFFFFFFF)	/* balu busy */
		memcpy(balu, BALU, sizeof(Balu));
		memmove(balu, BALU, sizeof(Balu));
	else{
		balu->cr0 = 0xFFFFFFFF;
		BALU->cr0 = 0xFFFFFFFF;


@@ 409,5 409,5 @@ procrestore(Proc *p, uchar *state)
		}
	}
	if(balu->cr0 != 0xFFFFFFFF)	/* balu busy */
		memcpy(BALU, balu, sizeof balu);
		memmove(BALU, balu, sizeof balu);
}

M gnot/trap.c => gnot/trap.c +4 -4
@@ 159,9 159,9 @@ notify(Ureg *ur)
		sp = ur->usp;
		sp -= sizeof(Ureg);
		u->ureg = (void*)sp;
		memcpy((Ureg*)sp, ur, sizeof(Ureg));
		memmove((Ureg*)sp, ur, sizeof(Ureg));
		sp -= ERRLEN;
		memcpy((char*)sp, u->note[0].msg, ERRLEN);
		memmove((char*)sp, u->note[0].msg, ERRLEN);
		sp -= 3*BY2WD;
		*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */
		*(ulong*)(sp+1*BY2WD) = (ulong)u->ureg;	/* arg 1 is ureg* */


@@ 170,7 170,7 @@ notify(Ureg *ur)
		ur->pc = (ulong)u->notify;
		u->notified = 1;
		u->nnote--;
		memcpy(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
		memmove(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
	}
	unlock(&u->p->debug);
}


@@ 187,7 187,7 @@ noted(Ureg **urp)
		return;
	}
	u->notified = 0;
	memcpy(*urp, u->ureg, sizeof(Ureg));
	memmove(*urp, u->ureg, sizeof(Ureg));
	unlock(&u->p->debug);
	splhi();
	rfnote(urp);

M port/dev.c => port/dev.c +2 -2
@@ 38,8 38,8 @@ devdir(Chan *c, Qid qid, char *n, long length, long perm, Dir *db)
	db->mtime = db->atime;
	db->hlength = 0;
	db->length = length;
	memcpy(db->uid, user, NAMELEN);
	memcpy(db->gid, user, NAMELEN);
	memmove(db->uid, user, NAMELEN);
	memmove(db->gid, user, NAMELEN);
}

int

M port/devbit.c => port/devbit.c +4 -4
@@ 619,8 619,8 @@ bitwrite(Chan *c, void *va, long n)
				error(Ebadblt);
			curs.offset.x = GLONG(p+1);
			curs.offset.y = GLONG(p+5);
			memcpy(curs.clr, p+9, 2*16);
			memcpy(curs.set, p+41, 2*16);
			memmove(curs.clr, p+9, 2*16);
			memmove(curs.set, p+41, 2*16);
			if(!isoff){
				cursoroff(1);
				isoff = 1;


@@ 1051,7 1051,7 @@ bitcompact(void)
			continue;
		}
		if(p1 != p2){
			memcpy(p1, p2, (2+p2[0])*sizeof(ulong));
			memmove(p1, p2, (2+p2[0])*sizeof(ulong));
			((GBitmap*)p1[1])->base = p1+2;
		}
		p2 += 2 + p1[0];


@@ 1067,7 1067,7 @@ Cursortocursor(Cursor *c)
	int i;

	lock(&cursor);
	memcpy(&cursor, c, sizeof(Cursor));
	memmove(&cursor, c, sizeof(Cursor));
	for(i=0; i<16; i++){
		setbits[i] = (c->set[2*i]<<24) + (c->set[2*i+1]<<16);
		clrbits[i] = (c->clr[2*i]<<24) + (c->clr[2*i+1]<<16);

M port/devboot.c => port/devboot.c +1 -1
@@ 96,7 96,7 @@ bootwrite(Chan *c, void *buf, long n)
/*			print("%ux, %d\n", c->offset, n);/**/
			if(c->offset+n > KZERO+conf.npage*BY2PG)
				n = KZERO+conf.npage*BY2PG - c->offset;
			memcpy((char*)c->offset, buf, n);
			memmove((char*)c->offset, buf, n);
			return n;
		}
		print("bootwrite: bad addr %lux\n", c->offset);

M port/devcons.c => port/devcons.c +9 -9
@@ 82,7 82,7 @@ puts(char *s, int n)
		printq.c = *s++;
		n--;
	}
	memcpy(printq.in, s, n);
	memmove(printq.in, s, n);
	printq.in += n;
	if(printq.in >= printq.buf+sizeof(printq.buf))
		printq.in = printq.buf;


@@ 354,7 354,7 @@ readnum(ulong off, char *buf, ulong n, ulong val, int size)
		return 0;
	if(off+n > size)
		n = size-off;
	memcpy(buf, tmp+off, n);
	memmove(buf, tmp+off, n);
	return n;
}



@@ 368,7 368,7 @@ readstr(ulong off, char *buf, ulong n, char *str)
		return 0;
	if(off+n > size)
		n = size-off;
	memcpy(buf, str+off, n);
	memmove(buf, str+off, n);
	return n;
}



@@ 501,7 501,7 @@ consread(Chan *c, void *buf, long n)
			l = TK2MS(l);
			readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE);
		}
		memcpy(buf, tmp+k, n);
		memmove(buf, tmp+k, n);
		return n;

	case Qpgrpid:


@@ 549,7 549,7 @@ conswrite(Chan *c, void *va, long n)
			m = l;
			if(m > sizeof buf)
				m = sizeof buf;
			memcpy(buf, a, m);
			memmove(buf, a, m);
			putstrn(a, m);
			a += m;
			l -= m;


@@ 561,7 561,7 @@ conswrite(Chan *c, void *va, long n)
			return 0;
		if(n >= sizeof cbuf)
			n = sizeof cbuf - 1;
		memcpy(cbuf, a, n);
		memmove(cbuf, a, n);
		cbuf[n-1] = 0;
		boottime = strtoul(a, 0, 0);
		break;


@@ 573,7 573,7 @@ conswrite(Chan *c, void *va, long n)
			return 0;
		if(c->offset+n >= NAMELEN-1)
			n = NAMELEN-1 - c->offset;
		memcpy(u->p->pgrp->user+c->offset, a, n);
		memmove(u->p->pgrp->user+c->offset, a, n);
		u->p->pgrp->user[c->offset+n] = 0;
		break;



@@ 642,7 642,7 @@ syslog(char *p, int n)
			m = end - s->next;
		else
			m = n;
		memcpy(s->next, p, m);
		memmove(s->next, p, m);
		s->next += m;
		p += m;
		n -= m;


@@ 691,7 691,7 @@ readlog(ulong off, char *buf, ulong len)
			m = end - start;
		else
			m = n;
		memcpy(p, start, m);
		memmove(p, start, m);
		start += m;
		p += m;
		n -= m;

M port/devenv.c => port/devenv.c +5 -5
@@ 90,7 90,7 @@ growenval(Env *e, ulong nchars)
				compactenv(e, n);
				p = envalloc.vfree;
				envalloc.vfree += n;
				memcpy(p, e->val, e->val->n*sizeof(Envval));
				memmove(p, e->val, e->val->n*sizeof(Envval));
				p->e = e;
				e->val->e = 0;
				e->val = p;


@@ 144,7 144,7 @@ compactenv(Env *e, ulong n)
			}
			if(p2+p2->n > envalloc.end)
				panic("compactenv copying too much");
			memcpy(p1, p2, p2->n*sizeof(Envval));
			memmove(p1, p2, p2->n*sizeof(Envval));
			p2e->val = p1;
			if(p2e != e)
				unlock(p2e);


@@ 200,7 200,7 @@ copyenv(Env *e, int trunc)
		}
		if((char*)(ne->val+ne->val->n) < ne->val->dat+n)
			panic("copyenv corrupt");
		memcpy(ne->val->dat, e->val->dat, n);
		memmove(ne->val->dat, e->val->dat, n);
		ne->val->len = n;
	}
	poperror();


@@ 461,7 461,7 @@ envread(Chan *c, void *va, long n)
	if(n <= 0)
		n = 0;
	else
		memcpy(a, ev->dat+c->offset, n);
		memmove(a, ev->dat+c->offset, n);
	unlock(e);
	unlock(pg);
	return n;


@@ 501,7 501,7 @@ envwrite(Chan *c, void *va, long n)
	vn = ev? ev->len : 0;
	if(c->offset > vn)
		error(Egreg); /* perhaps should zero fill */
	memcpy(ev->dat+c->offset, a, n);
	memmove(ev->dat+c->offset, a, n);
	e->val->len = c->offset+n;
	poperror();
	unlock(e);

M port/devkprof.c => port/devkprof.c +1 -1
@@ 130,7 130,7 @@ kprofread(Chan *c, void *a, long n)
		}
		if(c->offset+n > NBUF*sizeof timerbuf[0])
			n = NBUF*sizeof timerbuf[0]-c->offset;
		memcpy(a, ((char *)timerbuf)+c->offset, n);
		memmove(a, ((char *)timerbuf)+c->offset, n);
		break;
	default:
		n=0;

M port/devlance.c => port/devlance.c +6 -5
@@ 236,7 236,7 @@ lancedebq(char tag, Etherpkt *p, int len)
	t->ticks = NOW;
	t->tag = tag;
	t->len = len;
	memcpy(&(t->p), p, sizeof(Dpkt));
	memmove(&(t->p), p, sizeof(Dpkt));
	l.dq.next = (l.dq.next+1) % Ndpkt;
	unlock(&l.dq);
	if(plance){


@@ 345,7 345,7 @@ lanceoput(Queue *q, Block *bp )
	len = 0;
	while(bp = getq(q)){
		if(sizeof(Etherpkt) - len >= (n = BLEN(bp))){
			memcpy(((uchar *)p)+len, bp->rptr, n);
			memmove(((uchar *)p)+len, bp->rptr, n);
			len += n;
		} else
			print("no room damn it\n");


@@ 359,7 359,7 @@ lanceoput(Queue *q, Block *bp )
	/*
	 *  give packet a local address
	 */
	memcpy(p->s, l.ea, sizeof(l.ea));
	memmove(p->s, l.ea, sizeof(l.ea));

	/*
	 *  pad the packet (zero the pad)


@@ 544,6 544,7 @@ lanceinit(void)
	lancedir[Ntypes+1].qid.path = Lstatsqid;
	lancedir[Ntypes+1].length = 0;
	lancedir[Ntypes+1].perm = 0600;

}

Chan*


@@ 645,7 646,7 @@ lancetraceread(Chan *c, void *a, long n)
		i = plen - offset;
		if(i > n)
			i = n;
		memcpy(ca, buf + offset, i);
		memmove(ca, buf + offset, i);
		n -= i;
		ca += i;
		rv += i;


@@ 814,7 815,7 @@ lancekproc(void *arg)
			if(e!=&l.e[Ntypes]){
				if(e->q->next->len<=Streamhi && !waserror()){
					bp = allocb(len);
					memcpy(bp->rptr, (uchar *)p, len);
					memmove(bp->rptr, (uchar *)p, len);
					bp->wptr += len;
					bp->flags |= S_DELIM;
					PUTNEXT(e->q, bp);

M port/devmnt.c => port/devmnt.c +6 -6
@@ 308,7 308,7 @@ mntattach(char *crud)
	}
	mh->thdr.type = Tattach;
	mh->thdr.fid = c->fid;
	memcpy(mh->thdr.uname, u->p->pgrp->user, NAMELEN);
	memmove(mh->thdr.uname, u->p->pgrp->user, NAMELEN);
	strcpy(mh->thdr.aname, bogus.spec);
	strcpy(mh->thdr.auth, bogus.auth);
	mntxmit(m, mh);


@@ 403,7 403,7 @@ mntstat(Chan *c, char *dp)
	mh->thdr.type = Tstat;
	mh->thdr.fid = c->fid;
	mntxmit(m, mh);
	memcpy(dp, mh->rhdr.stat, DIRLEN);
	memmove(dp, mh->rhdr.stat, DIRLEN);
	dp[DIRLEN-4] = devchar[c->type];
	dp[DIRLEN-3] = 0;
	dp[DIRLEN-2] = c->dev;


@@ 588,7 588,7 @@ mntwstat(Chan *c, char *dp)
	}
	mh->thdr.type = Twstat;
	mh->thdr.fid = c->fid;
	memcpy(mh->thdr.stat, dp, DIRLEN);
	memmove(mh->thdr.stat, dp, DIRLEN);
	mntxmit(m, mh);
	mhfree(mh);
	poperror();


@@ 748,7 748,7 @@ mntxmit(Mnt *m, Mnthdr *mh)
	 * Copy out on read
	 */
	if(mh->thdr.type == Tread)
		memcpy(mh->thdr.data, mh->rhdr.data, mh->rhdr.count);
		memmove(mh->thdr.data, mh->rhdr.data, mh->rhdr.count);
	mbfree(mh->mbr);
	mbfree(mbw);
	poperror();		/* 1 */


@@ 824,7 824,7 @@ mntxmit(Mnt *m, Mnthdr *mh)
			goto FreeRead;
		w->mbr = mh->mbr;
		mh->mbr = 0;
		memcpy(&w->rhdr, &mh->rhdr, sizeof mh->rhdr);
		memmove(&w->rhdr, &mh->rhdr, sizeof mh->rhdr);
		mntwunlink(q, w);
		w->readreply = 1;
		wakeup(&w->r);


@@ 874,7 874,7 @@ mntxmit(Mnt *m, Mnthdr *mh)
	if(mh->thdr.type == Tread){
		if(mh->rhdr.count > mh->thdr.count)
			error(Ebadcnt);
		memcpy(mh->thdr.data, mh->rhdr.data, mh->rhdr.count);
		memmove(mh->thdr.data, mh->rhdr.data, mh->rhdr.count);
	}
	mbfree(mh->mbr);
	mbfree(mbw);

M port/devnonet.c => port/devnonet.c +4 -2
@@ 976,12 976,13 @@ nohdr(Noconv *cp, int rem)
	Nohdr *hp;

	bp = allocb(cp->ifc->hsize + NO_HDRSIZE + cp->ifc->mintu);
	memcpy(bp->wptr, cp->media->rptr, cp->ifc->hsize + NO_HDRSIZE);
	memmove(bp->wptr, cp->media->rptr, cp->ifc->hsize + NO_HDRSIZE);
	bp->wptr += cp->ifc->hsize + NO_HDRSIZE;
	hp = (Nohdr *)(bp->rptr + cp->ifc->hsize);
	hp->remain[1] = rem>>8;
	hp->remain[0] = rem;
	hp->sum[0] = hp->sum[1] = 0;

	return bp;
}



@@ 1029,7 1030,7 @@ nosend(Noconv *cp, Nomsg *mp)
		 */
		last = pkt = nohdr(cp, mp->len);
		for(bp = mp->first; bp; bp = bp->next){
			memcpy(pkt->wptr, bp->rptr, n = BLEN(bp));
			memmove(pkt->wptr, bp->rptr, n = BLEN(bp));
			pkt->wptr += n;
		}
		/*


@@ 1092,6 1093,7 @@ nosend(Noconv *cp, Nomsg *mp)
		mp->time = NOW + 10*MSrexmit;
	else
		mp->time = NOW + (cp->rexmit+1)*MSrexmit;

	(*wq->put)(wq, pkt);
}


M port/devproc.c => port/devproc.c +8 -9
@@ 269,12 269,11 @@ procread(Chan *c, void *va, long n)
			}else{
				k = kmap(pg);
				b = (char*)VA(k);
				memcpy(a, b+(c->offset&(BY2PG-1)), n);
				memmove(a, b+(c->offset&(BY2PG-1)), n);
				kunmap(k);
			}
			return n;
		}

		/* u area */
		if(c->offset>=USERADDR && c->offset<USERADDR+BY2PG){
			if(c->offset+n > USERADDR+BY2PG)


@@ 284,7 283,7 @@ procread(Chan *c, void *va, long n)
				error(Eprocdied);
			k = kmap(pg);
			b = (char*)VA(k);
			memcpy(a, b+(c->offset-USERADDR), n);
			memmove(a, b+(c->offset-USERADDR), n);
			kunmap(k);
			return n;
		}


@@ 293,7 292,7 @@ procread(Chan *c, void *va, long n)
		if(c->offset>=KZERO && c->offset<KZERO+conf.npage0*BY2PG){
			if(c->offset+n > KZERO+conf.npage0*BY2PG)
				n = KZERO+conf.npage0*BY2PG - c->offset;
			memcpy(a, (char*)c->offset, n);
			memmove(a, (char*)c->offset, n);
			return n;
		}
		return 0;


@@ 319,9 318,9 @@ procread(Chan *c, void *va, long n)
		if(up->nnote == 0)
			n = 0;
		else{
			memcpy(va, up->note[0].msg, ERRLEN);
			memmove(va, up->note[0].msg, ERRLEN);
			up->nnote--;
			memcpy(&up->note[0], &up->note[1], up->nnote*sizeof(Note));
			memmove(&up->note[0], &up->note[1], up->nnote*sizeof(Note));
			n = ERRLEN;
		}
		kunmap(k);


@@ 333,7 332,7 @@ procread(Chan *c, void *va, long n)
			return 0;
		if(c->offset+n > sizeof(Proc))
			n = sizeof(Proc) - c->offset;
		memcpy(a, ((char*)p)+c->offset, n);
		memmove(a, ((char*)p)+c->offset, n);
		return n;

	case Qstatus:


@@ 349,7 348,7 @@ procread(Chan *c, void *va, long n)
			l = TK2MS(l);
			readnum(0, statbuf+2*NAMELEN+12+NUMSIZE*i, NUMSIZE, l, NUMSIZE);
		}
		memcpy(a, statbuf+c->offset, n);
		memmove(a, statbuf+c->offset, n);
		return n;
	}
	error(Egreg);


@@ 417,7 416,7 @@ procwrite(Chan *c, void *va, long n)
			error(Etoobig);
		if(n>=4 && strncmp(va, "sys:", 4)==0)
			error(Ebadarg);
		memcpy(buf, va, n);
		memmove(buf, va, n);
		buf[n] = 0;
		if(!postnote(p, 0, buf, NUser))
			error(Enonote);

M port/devroot.c => port/devroot.c +2 -2
@@ 102,7 102,7 @@ rootread(Chan *c, void *buf, long n)
			return 0;
		if(c->offset+n > sizeof bootcode)
			n = sizeof bootcode - c->offset;
		memcpy(buf, ((char*)bootcode)+c->offset, n);
		memmove(buf, ((char*)bootcode)+c->offset, n);
		return n;

	case Qcfs:		/* cfs */


@@ 110,7 110,7 @@ rootread(Chan *c, void *buf, long n)
			return 0;
		if(c->offset+n > cfslen)
			n = cfslen - c->offset;
		memcpy(buf, ((char*)cfscode)+c->offset, n);
		memmove(buf, ((char*)cfscode)+c->offset, n);
		return n;

	case Qdev:

M port/devscsi.c => port/devscsi.c +5 -5
@@ 152,7 152,7 @@ scsiread(Chan *c, char *a, long n)
		cmd->save = cmd->data.base;
		scsiexec(cmd, 1);
		n = cmd->data.ptr - cmd->data.base;
		memcpy(a, cmd->data.base, n);
		memmove(a, cmd->data.base, n);
		break;
	case Qdebug:
		if (c->offset == 0) {


@@ 184,7 184,7 @@ scsiwrite(Chan *c, char *a, long n)
			error(Ebadarg);
		/*qlock(cmd);*/
		cmd->cmd.base = cmd->cmdblk;
		memcpy(cmd->cmd.base, a, n);
		memmove(cmd->cmd.base, a, n);
		cmd->cmd.lim = cmd->cmd.base + n;
		cmd->cmd.ptr = cmd->cmd.base;
		cmd->target = (c->qid.path>>4)&7;


@@ 199,7 199,7 @@ scsiwrite(Chan *c, char *a, long n)
		cmd->data.lim = cmd->data.base + n;
		cmd->data.ptr = cmd->data.base;
		cmd->save = cmd->data.base;
		memcpy(cmd->data.base, a, n);
		memmove(cmd->data.base, a, n);
		scsiexec(cmd, 0);
		n = cmd->data.ptr - cmd->data.base;
		break;


@@ 282,7 282,7 @@ scsisense(int dev, uchar *p)
	int status;
	scsicmd(&cmd, dev, 0x03, buf, sizeof buf);
	status = scsiexec(&cmd, 1);
	memcpy(p, buf, sizeof buf);
	memmove(p, buf, sizeof buf);
	qunlock(&cmd);
	if ((status&0xff00) != 0x6000)
		error(Eio);


@@ 297,7 297,7 @@ scsicap(int dev, uchar *p)
	int status;
	scsicmd(&cmd, dev, 0x25, buf, sizeof buf);
	status = scsiexec(&cmd, 1);
	memcpy(p, buf, sizeof buf);
	memmove(p, buf, sizeof buf);
	qunlock(&cmd);
	if ((status&0xff00) != 0x6000)
		error(Eio);

M port/devsrv.c => port/devsrv.c +1 -1
@@ 275,7 275,7 @@ srvwrite(Chan *c, void *va, long n)
		error(Egreg);
	if(n >= sizeof buf)
		error(Egreg);
	memcpy(buf, va, n);	/* so we can NUL-terminate */
	memmove(buf, va, n);	/* so we can NUL-terminate */
	buf[n] = 0;
	fd = strtoul(buf, 0, 0);
	fdtochan(fd, -1);	/* error check only */

M port/devwren.c => port/devwren.c +2 -2
@@ 246,7 246,7 @@ wrenread(Chan *c, char *a, long n)
		cmd->save = cmd->data.base;
		scsiexec(cmd, 1);
		n = cmd->data.ptr - cmd->data.base;
		memcpy(a, cmd->data.base, n);
		memmove(a, cmd->data.base, n);
		qunlock(cmd);
		break;
	case Qstruct:


@@ 304,7 304,7 @@ wrenwrite(Chan *c, char *a, long n)
		cmd->data.lim = cmd->data.base + n;
		cmd->data.ptr = cmd->data.base;
		cmd->save = cmd->data.base;
		memcpy(cmd->data.base, a, n);
		memmove(cmd->data.base, a, n);
		scsiexec(cmd, 0);
		n = cmd->data.ptr - cmd->data.base;
		qunlock(cmd);

M port/fault.c => port/fault.c +2 -2
@@ 37,7 37,7 @@ fault(ulong addr, int read)
		poperror();
		/* stacks grown down, sigh */
		lock(o);
		memcpy(o->pte+(o->npte-n), o->pte, n*sizeof(PTE));
		memmove(o->pte+(o->npte-n), o->pte, n*sizeof(PTE));
		memset(o->pte, 0, (o->npte-n)*sizeof(PTE));
		unlock(o);
		s->minva = addr;


@@ 164,7 164,7 @@ fault(ulong addr, int read)
			pte->page = newpage(1, o, addr);
			k = kmap(pte->page);
			k1 = kmap(pg);
			memcpy((void*)VA(k), (void*)VA(k1), BY2PG);
			memmove((void*)VA(k), (void*)VA(k1), BY2PG);
			kunmap(k);
			kunmap(k1);
			if(pg->ref <= 1)

M port/fcall.c => port/fcall.c +2 -2
@@ 7,7 7,7 @@
#define	LONG(x)		p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24; p += 4
#define	VLONG(x)	p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24;\
				p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8
#define	STRING(x,n)	memcpy(p, f->x, n); p += n
#define	STRING(x,n)	memmove(p, f->x, n); p += n

int
convS2M(Fcall *f, char *ap)


@@ 199,7 199,7 @@ convD2M(Dir *f, char *ap)
				(p[2]<<16) | (p[3]<<24)); p += 4
#define	VLONG(x)	f->x = (p[0] | (p[1]<<8) |\
				(p[2]<<16) | (p[3]<<24)); p += 8
#define	STRING(x,n)	memcpy(f->x, p, n); p += n
#define	STRING(x,n)	memmove(f->x, p, n); p += n

int
convM2S(char *ap, Fcall *f, int n)

M port/lib.h => port/lib.h +1 -1
@@ 8,7 8,7 @@
extern	void	*memccpy(void*, void*, int, long);
extern	void	*memset(void*, int, long);
extern	int	memcmp(void*, void*, long);
extern	void	*memcpy(void*, void*, long);
extern	void	*memmove(void*, void*, long);
extern	void	*memchr(void*, int, long);

/*

M port/page.c => port/page.c +2 -2
@@ 630,7 630,7 @@ growpte(Orig *o, ulong n)
				goto Trouble;
			p = ptealloc.free;
			ptealloc.free += n;
			memcpy(p+1, o->pte, o->npte*sizeof(PTE));
			memmove(p+1, o->pte, o->npte*sizeof(PTE));
			p->o = o;
			((PTEA*)(o->pte-1))->o = 0;
			o->pte = p+1;


@@ 689,7 689,7 @@ compactpte(Orig *o, ulong n)
				unlock(p2o);
				goto Free;
			}
			memcpy(p1, p2, p2->n*sizeof(PTE));
			memmove(p1, p2, p2->n*sizeof(PTE));
			p2o->pte = p1+1;
			if(p2o != o)
				unlock(p2o);

M port/pgrp.c => port/pgrp.c +3 -3
@@ 62,7 62,7 @@ pgrpnote(Pgrp *pg, char *a, long n, int flag)
		error(Etoobig);
	if(n>=4 && strncmp(a, "sys:", 4)==0)
		error(Ebadarg);
	memcpy(buf, a, n);
	memmove(buf, a, n);
	buf[n] = 0;
	p = proctab(0);
	for(i=0; i<conf.nproc; i++, p++){


@@ 190,8 190,8 @@ pgrpcpy(Pgrp *to, Pgrp *from)
	Env *e;

	lock(from);
	memcpy(to->user, from->user, NAMELEN);
	memcpy(to->mtab, from->mtab, from->nmtab*sizeof(Mtab));
	memmove(to->user, from->user, NAMELEN);
	memmove(to->mtab, from->mtab, from->nmtab*sizeof(Mtab));
	to->nmtab = from->nmtab;
	m = to->mtab;
	for(i=0; i<from->nmtab; i++,m++)

M port/proc.c => port/proc.c +5 -5
@@ 369,7 369,7 @@ addbroken(Proc *c)
	lock(&broken);
	if(broken.n == NBROKEN){
		ready(broken.p[0]);
		memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1));
		memmove(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1));
		--broken.n;
	}
	broken.p[broken.n++] = c;


@@ 380,7 380,7 @@ addbroken(Proc *c)
	for(b=0; b<NBROKEN; b++)
		if(broken.p[b] == c){
			broken.n--;
			memcpy(&broken.p[b], &broken.p[b+1], sizeof(Proc*)*(NBROKEN-(b+1)));
			memmove(&broken.p[b], &broken.p[b+1], sizeof(Proc*)*(NBROKEN-(b+1)));
			break;
		}
	unlock(&broken);


@@ 450,7 450,7 @@ pexit(char *s, int freemem)
	qlock(&p->wait);
	lock(&p->wait.queue);
	if(p->pid==c->parentpid && !p->exiting){
		memcpy(p->waitmsg.msg, msg, ERRLEN);
		memmove(p->waitmsg.msg, msg, ERRLEN);
		p->waitmsg.pid = mypid;
		wp = &p->waitmsg.time[TUser];
		up = &c->time[TUser];


@@ 576,10 576,10 @@ kproc(char *name, void (*func)(void *), void *arg)
	 * Save time: only copy u-> data and useful stack
	 */
	clearmmucache();
	memcpy(up, u, sizeof(User));
	memmove(up, u, sizeof(User));
	n = USERADDR+BY2PG - (ulong)&lastvar;
	n = (n+32) & ~(BY2WD-1);	/* be safe & word align */
	memcpy((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n);
	memmove((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n);

	/*
	 * Refs

M port/queue.c => port/queue.c +1 -1
@@ 56,7 56,7 @@ puts(IOQ *q, char *s, int n)
			m = &q->buf[NQ] - q->in;
		if(m > n)
			m = n;
		memcpy(q->in, s, m);
		memmove(q->in, s, m);
		n -= m;
		q->in += m;
		if(q->in >= &q->buf[NQ])

M port/stnoether.c => port/stnoether.c +5 -4
@@ 74,7 74,7 @@ noetherconnect(Noconv *cp, char *ea)
static void
noetheropen(Queue *q, Stream *s)
{
	nonetnewifc(q, s, 1514, 60, 14, noetherconnect);
	nonetnewifc(q, s, 1514, ETHERMINMTU, 14, noetherconnect);
}

/*


@@ 108,6 108,7 @@ noetheroput(Queue *q, Block *bp)
			PUTNEXT(q, bp);
		return;
	}

	PUTNEXT(q, bp);
}



@@ 148,14 149,14 @@ noetherbad(Noifc *ifc, Block *bp)
	nbp->wptr = nbp->rptr + 60;
	memset(bp->rptr, 0, 60);
	neh = (Etherhdr *)nbp->rptr;
	memcpy(neh, eh, sizeof(Etherhdr));
	memmove(neh, eh, sizeof(Etherhdr));
	neh->circuit[0] ^= 1;
	neh->remain[0] = neh->remain[1] = 0;
	neh->flag = NO_HANGUP | NO_RESET;
	neh->ack = eh->mid;
	neh->mid = eh->ack;
	memcpy(neh->s, eh->d, sizeof(neh->s));
	memcpy(neh->d, eh->s, sizeof(neh->d));
	memmove(neh->s, eh->d, sizeof(neh->s));
	memmove(neh->d, eh->s, sizeof(neh->d));
	nonetcksum(nbp, 14);
	PUTNEXT(ifc->wq, nbp);
out:

M port/stream.c => port/stream.c +8 -8
@@ 602,12 602,12 @@ pullup(Block *bp, int n)
	while(nbp = bp->next){
		i = BLEN(nbp);
		if(i > n) {
			memcpy(bp->wptr, nbp->rptr, n);
			memmove(bp->wptr, nbp->rptr, n);
			bp->wptr += n;
			nbp->rptr += n;
			return bp;
		} else {
			memcpy(bp->wptr, nbp->rptr, i);
			memmove(bp->wptr, nbp->rptr, i);
			bp->wptr += i;
			bp->next = nbp->next;
			nbp->next = 0;


@@ 1018,7 1018,7 @@ stringread(Chan *c, uchar *buf, long n, char *str)
		n = i;
	if(n<0)
		return 0;
	memcpy(buf, str + c->offset, n);
	memmove(buf, str + c->offset, n);
	return n;
}



@@ 1102,7 1102,7 @@ streamread(Chan *c, void *vbuf, long n)

		i = BLEN(bp);
		if(i <= left){
			memcpy(buf, bp->rptr, i);
			memmove(buf, bp->rptr, i);
			left -= i;
			buf += i;
			if(bp->flags & S_DELIM){


@@ 1111,7 1111,7 @@ streamread(Chan *c, void *vbuf, long n)
			} else
				freeb(bp);
		} else {
			memcpy(buf, bp->rptr, left);
			memmove(buf, bp->rptr, left);
			bp->rptr += left;
			putbq(q, bp);
			left = 0;


@@ 1170,7 1170,7 @@ streamctlwrite(Chan *c, void *a, long n)
	 *  package
	 */
	bp = allocb(n+1);
	memcpy(bp->wptr, a, n);
	memmove(bp->wptr, a, n);
	bp->wptr[n] = 0;
	bp->wptr += n + 1;



@@ 1270,14 1270,14 @@ streamwrite(Chan *c, void *a, long n, int docopy)
			bp = allocb(rem);
			i = bp->lim - bp->wptr;
			if(i >= rem){
				memcpy(bp->wptr, a, rem);
				memmove(bp->wptr, a, rem);
				bp->flags |= S_DELIM;
				bp->wptr += rem;
				bp->type = M_DATA;
				PUTNEXT(q, bp);
				break;
			} else {
				memcpy(bp->wptr, a, i);
				memmove(bp->wptr, a, i);
				bp->wptr += i;
				bp->type = M_DATA;
				PUTNEXT(q, bp);

M port/sysproc.c => port/sysproc.c +10 -10
@@ 42,10 42,10 @@ sysfork(ulong *arg)
	 * Save time: only copy u-> data and useful stack
	 */
	clearmmucache();
	memcpy((void*)upa, u, sizeof(User));
	memmove((void*)upa, u, sizeof(User));
	n = USERADDR+BY2PG - (ulong)&lastvar;
	n = (n+32) & ~(BY2WD-1);	/* be safe & word align */
	memcpy((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n);
	memmove((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n);
	((User *)upa)->p = p;
	kunmap(k);



@@ 79,10 79,10 @@ sysfork(ulong *arg)
			p->seg[SSEG].o->pte[i].page = np;
			if(i == 0){	/* only part of last stack page */
				memset((void*)VA(k), 0, usp);
				memcpy((void*)(VA(k)+usp),
				memmove((void*)(VA(k)+usp),
					(void*)(op->va+usp), BY2PG-usp);
			}else		/* all of higher pages */
				memcpy((void*)VA(k), (void*)op->va, BY2PG);
				memmove((void*)VA(k), (void*)op->va, BY2PG);
			kunmap(k);
		}
	}


@@ 133,7 133,7 @@ sysfork(ulong *arg)
	pid = p->pid;
	memset(p->time, 0, sizeof(p->time));
	p->time[TReal] = MACHP(0)->ticks;
	memcpy(p->text, u->p->text, NAMELEN);
	memmove(p->text, u->p->text, NAMELEN);
	ready(p);
	flushmmu();
	clearmmucache();


@@ 185,7 185,7 @@ sysexec(ulong *arg)
	/*
	 * Process #! /bin/sh args ...
	 */
	memcpy(line, &exec, sizeof(Exec));
	memmove(line, &exec, sizeof(Exec));
	if(indir || line[0]!='#' || line[1]!='!')
		goto Err;
	n = shargs(line, n, progarg);


@@ 265,11 265,11 @@ sysexec(ulong *arg)
		}
		*argv++ = charp + (USTKTOP-TSTKTOP);
		n = strlen(*argp) + 1;
		memcpy(charp, *argp++, n);
		memmove(charp, *argp++, n);
		charp += n;
	}

	memcpy(p->text, elem, NAMELEN);
	memmove(p->text, elem, NAMELEN);

	/*
	 * Committed.  Free old memory


@@ 448,7 448,7 @@ syserrstr(ulong *arg)
	char buf[ERRLEN];

	validaddr(arg[0], ERRLEN, 1);
	memcpy((char*)arg[0], u->error, ERRLEN);
	memmove((char*)arg[0], u->error, ERRLEN);
	return 0;
}



@@ 465,7 465,7 @@ sysforkpgrp(ulong *arg)
	if(arg[0] == 0)
		pgrpcpy(pg, u->p->pgrp);
	else
		memcpy(pg->user, u->p->pgrp->user, NAMELEN);
		memmove(pg->user, u->p->pgrp->user, NAMELEN);
	closepgrp(u->p->pgrp);
	u->p->pgrp = pg;
	return pg->pgrpid;

M power/dat.h => power/dat.h +1 -0
@@ 519,6 519,7 @@ struct Etherpkt {
	uchar data[1500];
	uchar crc[4];
};
#define	ETHERMINMTU	60	/* minimum transmit size */

/*
 *  nonet constants

M power/devbit3.c => power/devbit3.c +2 -2
@@ 164,7 164,7 @@ bit3read(Chan *c, void *buf, long n)
			do
				n = bp->rcount;
			while(n == 0);
			memcpy(buf, bit3.buf, n);
			memmove(buf, bit3.buf, n);
			qunlock(&bit3.buflock);
		}
		return n;


@@ 192,7 192,7 @@ bit3write(Chan *c, void *buf, long n)
			qlock(&bit3.buflock);

			qlock(&bit3);
			memcpy(bit3.buf, buf, n);
			memmove(bit3.buf, buf, n);
			bit3send(bp, WRITE, bit3.buf, n);
			do; while(*BIT3ADDR);
			qunlock(&bit3);

M power/devhotrod.c => power/devhotrod.c +2 -2
@@ 342,7 342,7 @@ hotrodread(Chan *c, void *buf, long n)
{int i; for(i=0; i<8; i++) print("%lux\n", ((ulong*)buf)[i]); }
				error(Eio);
			}
			memcpy(buf, hp->buf, m);
			memmove(buf, hp->buf, m);
			qunlock(&hp->buflock);
		}
		return m;


@@ 389,7 389,7 @@ hotrodwrite(Chan *c, void *buf, long n)
			mp = &((User*)(u->p->upage->pa|KZERO))->uhot;
			qlock(&hp->buflock);
			qlock(hp);
			memcpy(hp->buf, buf, n);
			memmove(hp->buf, buf, n);
			mp->cmd = Uwrite;
			mp->param[0] = MP2VME(hp->buf);
			mp->param[1] = n;

M power/devhs.c => power/devhs.c +1 -1
@@ 442,7 442,7 @@ upstream(Hsvme *hp, unsigned int ctl)
	bp->wptr[1] = hp->chan>>8;
	bp->wptr[2] = ctl;
	if(n)
		memcpy(&bp->wptr[3], hp->buf, n);
		memmove(&bp->wptr[3], hp->buf, n);
	bp->wptr += 3 + n;
	bp->flags |= S_DELIM;
	PUTNEXT(hp->rq, bp);

M power/main.c => power/main.c +3 -3
@@ 266,7 266,7 @@ userinit(void)
	s->proc = p;
	s->o = neworig(USTKTOP-BY2PG, 1, OWRPERM, 0);
	s->o->pte[0].page = newpage(0, 0, USTKTOP-BY2PG);
	memcpy((ulong*)(s->o->pte[0].page->pa|KZERO|(BY2PG-argsize)), 
	memmove((ulong*)(s->o->pte[0].page->pa|KZERO|(BY2PG-argsize)), 
		argbuf + sizeof(argbuf) - argsize, argsize);
	av = (char **)(s->o->pte[0].page->pa|KZERO|(BY2PG-argsize));
	for(i = 0; i < _argc; i++)


@@ 287,7 287,7 @@ userinit(void)
	s->o->pte[0].page = newpage(0, 0, UTZERO);
	s->o->npage = 1;
	k = kmap(s->o->pte[0].page);
	memcpy((ulong*)VA(k), initcode, sizeof initcode);
	memmove((ulong*)VA(k), initcode, sizeof initcode);
	kunmap(k);
	s->minva = 0x1000;
	s->maxva = 0x2000;


@@ 699,7 699,7 @@ arginit(void)
	for(i=0; i<_argc; i++){
		argv[i] = charp;
		n = strlen(_argv[i]) + 1;
		memcpy(charp, _argv[i], n);
		memmove(charp, _argv[i], n);
		charp += n;
	}
	_argv = argv;

M power/trap.c => power/trap.c +4 -4
@@ 380,9 380,9 @@ notify(Ureg *ur)
		sp = ur->usp;
		sp -= sizeof(Ureg);
		u->ureg = (void*)sp;
		memcpy((Ureg*)sp, ur, sizeof(Ureg));
		memmove((Ureg*)sp, ur, sizeof(Ureg));
		sp -= ERRLEN;
		memcpy((char*)sp, u->note[0].msg, ERRLEN);
		memmove((char*)sp, u->note[0].msg, ERRLEN);
		sp -= 3*BY2WD;
		*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */
		*(ulong*)(sp+1*BY2WD) = (ulong)u->ureg;	/* arg 1 is ureg* */


@@ 391,7 391,7 @@ notify(Ureg *ur)
		ur->pc = (ulong)u->notify;
		u->notified = 1;
		u->nnote--;
		memcpy(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
		memmove(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
	}
	unlock(&u->p->debug);
}


@@ 408,7 408,7 @@ noted(Ureg **urp)
		return;
	}
	u->notified = 0;
	memcpy(*urp, u->ureg, sizeof(Ureg));
	memmove(*urp, u->ureg, sizeof(Ureg));
	(*urp)->r1 = -1;	/* return error from the interrupted call */
	unlock(&u->p->debug);
	splhi();

M ss/dat.h => ss/dat.h +1 -0
@@ 512,6 512,7 @@ struct Etherpkt {
	uchar data[1500];
	uchar crc[4];
};
#define	ETHERMINMTU	60	/* minimum transmit size */

/*
 *  nonet constants

M ss/main.c => ss/main.c +1 -1
@@ 142,7 142,7 @@ userinit(void)
	s->o->pte[0].page = newpage(0, 0, UTZERO);
	s->o->npage = 1;
	k = kmap(s->o->pte[0].page);
	memcpy((ulong*)VA(k), initcode, sizeof initcode);
	memmove((ulong*)VA(k), initcode, sizeof initcode);
	kunmap(k);
	s->minva = UTZERO;
	s->maxva = UTZERO+BY2PG;

M ss/trap.c => ss/trap.c +4 -4
@@ 227,9 227,9 @@ notify(Ureg *ur)
		sp = ur->usp;
		sp -= sizeof(Ureg);
		u->ureg = (void*)sp;
		memcpy((Ureg*)sp, ur, sizeof(Ureg));
		memmove((Ureg*)sp, ur, sizeof(Ureg));
		sp -= ERRLEN;
		memcpy((char*)sp, u->note[0].msg, ERRLEN);
		memmove((char*)sp, u->note[0].msg, ERRLEN);
		sp -= 3*BY2WD;
		*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */
		*(ulong*)(sp+1*BY2WD) = (ulong)u->ureg;	/* arg 1 is ureg* */


@@ 239,7 239,7 @@ notify(Ureg *ur)
		ur->npc = (ulong)u->notify+4;
		u->notified = 1;
		u->nnote--;
		memcpy(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
		memmove(&u->note[0], &u->note[1], u->nnote*sizeof(Note));
	}
	unlock(&u->p->debug);
}


@@ 256,7 256,7 @@ noted(Ureg **urp)
		return;
	}
	u->notified = 0;
	memcpy(*urp, u->ureg, sizeof(Ureg));
	memmove(*urp, u->ureg, sizeof(Ureg));
	(*urp)->r7 = -1;	/* return error from the interrupted call */
	unlock(&u->p->debug);
	splhi();