#include <u.h>
#include <libc.h>
#include <fcall.h>
#include <9pclient.h>
#include <ctype.h>

CFsys*
nsinit(char *name)
{
	char *addr, *ns;
	int fd;

	ns = getns();
	if(ns == nil)
		return nil;

	addr = smprint("unix!%s/%s", ns, name);
	free(ns);
	if(addr == nil)
		return nil;

	fd = dial(addr, 0, 0, 0);
	if(fd < 0){
		werrstr("dial %s: %r", addr);
		free(addr);
		return nil;
	}
	free(addr);

	fcntl(fd, F_SETFL, FD_CLOEXEC);
	return fsinit(fd);
}

CFsys*
nsmount(char *name, char *aname)
{
	CFsys *fs;
	CFid *fid;

	fs = nsinit(name);
	if(fs == nil)
		return nil;
	if((fid = fsattach(fs, nil, getuser(), aname)) == nil){
		_fsunmount(fs);
		return nil;
	}
	fssetroot(fs, fid);
	return fs;
}

CFid*
nsopen(char *name, char *aname, char *fname, int mode)
{
	CFsys *fs;
	CFid *fid;

	fs = nsmount(name, aname);
	if(fs == nil)
		return nil;
	fid = fsopen(fs, fname, mode);
	fsunmount(fs);
	return fid;
}

