#include <9pm/u.h>
#include <9pm/libc.h>
#include <9pm/fcall.h>
#include <9pm/thread.h>
#include <9pm/9p.h>
void
postmountsrv(Srv *s, char *name, char *mtpt, int flag)
{
int fd[2];
if(s->nopipe){
if(name || mtpt)
sysfatal("postmountsrv: can't post or mount with nopipe");
}else{
if(pipe(fd) < 0)
sysfatal("pipe: %r");
if(name)
if(postfd(name, fd[0]) < 0)
sysfatal("postfd %s: %r", name);
s->infd = fd[1];
s->outfd = fd[1];
}
switch(rfork(RFPROC|RFFDG|RFNOTEG|RFNAMEG|RFMEM)){
case -1:
sysfatal("fork: %r");
case 0:
if(!s->nopipe)
close(fd[0]);
srv(s);
if(s->end)
s->end(s);
_exits(0);
default:
if(!s->nopipe){
if(mtpt)
if(amount(fd[0], mtpt, flag, "") == -1)
sysfatal("mount %s: %r\n", mtpt);
close(fd[0]);
}
break;
}
}
syntax highlighted by Code2HTML, v. 0.9.1