#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