,s!lock(f)!lock(\&f->ref.lk)!g,s!lock(c)!lock(\&c->ref.lk)!g,s!Chan \*c;!Chan *c = 0;!g,s!ref(c)!ref(\&c->ref)!g,s!^read(!doread(!,s!return read(!return doread(!g/use varargs/,/va_end/c // Plan 9 VX replaced dodgy varargs code v = *(vlong*)&arg[3];.,s!^write(!dowrite(!,s!return write(!return dowrite(!g/use varargs/,/va_end/c // Plan 9 VX replaced dodgy varargs code v = *(vlong*)&arg[3];.g/^sys_/ s/ulong \*)/ulong *u)/g/va_list/d/^sysfd2path/s/ulong/uint32//^syspipe/s/ulong/uint32//^sysdup/s/ulong/uint32//^sysopen/s/ulong/uint32//^sysclose/s/ulong/uint32//^doread/s/ulong/uint32//^sys_read/s/ulong/uint32//^syspread/s/ulong/uint32//^dowrite/s/ulong/uint32//^sys_write/s/ulong/uint32//^syspwrite/s/ulong/uint32//^sseek/s/ulong/uint32//ulong/s/ulong/uint32//^sysseek/s/ulong/uint32//^sysoseek/s/ulong/uint32/.,/^}/g/ulong/s/ulong/uint32//^sysfstat/s/ulong/uint32//^sysstat/s/ulong/uint32//^syschdir/s/ulong/uint32//^sysbind/s/ulong/uint32//^sysmount/s/ulong/uint32//^sys_mount/s/ulong/uint32//^sysunmount/s/ulong/uint32//^syscreate/s/ulong/uint32//^sysremove/s/ulong/uint32//^syswstat/s/ulong/uint32//^sysfwstat/s/ulong/uint32//^sys_stat/s/ulong/uint32//^sys_fstat/s/ulong/uint32//^sys_wstat/s/ulong/uint32//^sys_fwstat/s/ulong/uint32//^syspassfd/s/ulong/uint32//^syspassfd/./^{/a char *buf;./validaddr/s/validaddr/buf = uvalidaddr//(char\*)arg\[1\]/s/(char\*)arg\[1\]/buf//^syspipe/./^{/a int *ufd;./validaddr/s/validaddr/ufd = uvalidaddr//((long\*)arg\[0\]/s/((long\*)arg\[0\])/ufd//((long\*)arg\[0\]/s/((long\*)arg\[0\])/ufd//^sysopen/./^{/a char *name;./validaddr/s/validaddr/name = uvalidaddr//(char\*)arg\[0\]/s/(char\*)arg\[0\]/name//^dowrite/./^{/a uchar *p;./validaddr/s/validaddr/p = uvalidaddr//(void\*)arg\[1\]/s/(void\*)arg\[1\]/name//^sseek/s/(/(vlong *ret, //^sysseek/./validaddr/s/validaddr\(.*\);/sseek(uvalidaddr&, arg);//sseek/d$a // Plan 9 VX additionslongkbind(char *new, char *old, int flag){ return bindmount(1, 0, -1, -1, new, old, flag, nil);} longsyspassfd(ulong *u){ error("passfd unimplemented"); return -1;} .
,s!lock(f)!lock(\&f->ref.lk)!g
,s!lock(c)!lock(\&c->ref.lk)!g
,s!Chan \*c;!Chan *c = 0;!g
,s!ref(c)!ref(\&c->ref)!g
,s!^read(!doread(!
,s!return read(!return doread(!g
/use varargs/,/va_end/c
// Plan 9 VX replaced dodgy varargs code
v = *(vlong*)&arg[3];
.
,s!^write(!dowrite(!
,s!return write(!return dowrite(!g
/use varargs/,/va_end/c
// Plan 9 VX replaced dodgy varargs code
v = *(vlong*)&arg[3];
.
g/^sys_/ s/ulong \*)/ulong *u)/
g/va_list/d
/^sysfd2path/s/ulong/uint32/
/^syspipe/s/ulong/uint32/
/^sysdup/s/ulong/uint32/
/^sysopen/s/ulong/uint32/
/^sysclose/s/ulong/uint32/
/^doread/s/ulong/uint32/
/^sys_read/s/ulong/uint32/
/^syspread/s/ulong/uint32/
/^dowrite/s/ulong/uint32/
/^sys_write/s/ulong/uint32/
/^syspwrite/s/ulong/uint32/
/^sseek/s/ulong/uint32/
/ulong/s/ulong/uint32/
/^sysseek/s/ulong/uint32/
/^sysoseek/s/ulong/uint32/
.,/^}/g/ulong/s/ulong/uint32/
/^sysfstat/s/ulong/uint32/
/^sysstat/s/ulong/uint32/
/^syschdir/s/ulong/uint32/
/^sysbind/s/ulong/uint32/
/^sysmount/s/ulong/uint32/
/^sys_mount/s/ulong/uint32/
/^sysunmount/s/ulong/uint32/
/^syscreate/s/ulong/uint32/
/^sysremove/s/ulong/uint32/
/^syswstat/s/ulong/uint32/
/^sysfwstat/s/ulong/uint32/
/^sys_stat/s/ulong/uint32/
/^sys_fstat/s/ulong/uint32/
/^sys_wstat/s/ulong/uint32/
/^sys_fwstat/s/ulong/uint32/
/^syspassfd/s/ulong/uint32/
/^syspassfd/.
/^{/a
char *buf;
.
/validaddr/s/validaddr/buf = uvalidaddr/
/(char\*)arg\[1\]/s/(char\*)arg\[1\]/buf/
/^syspipe/.
/^{/a
int *ufd;
.
/validaddr/s/validaddr/ufd = uvalidaddr/
/((long\*)arg\[0\]/s/((long\*)arg\[0\])/ufd/
/((long\*)arg\[0\]/s/((long\*)arg\[0\])/ufd/
/^sysopen/.
/^{/a
char *name;
.
/validaddr/s/validaddr/name = uvalidaddr/
/(char\*)arg\[0\]/s/(char\*)arg\[0\]/name/
/^dowrite/.
/^{/a
uchar *p;
.
/validaddr/s/validaddr/p = uvalidaddr/
/(void\*)arg\[1\]/s/(void\*)arg\[1\]/name/
/^sseek/s/(/(vlong *ret, /
/^sysseek/.
/validaddr/s/validaddr\(.*\);/sseek(uvalidaddr&, arg);/
/sseek/d
$a
// Plan 9 VX additions
long
kbind(char *new, char *old, int flag)
{
return bindmount(1, 0, -1, -1, new, old, flag, nil);
}
long
syspassfd(ulong *u)
{
error("passfd unimplemented");
return -1;
}
.