#include <9pm/newns.c>

void	error(char*);
void	usage(void);
int	getc(void);
int	puts(char*);

void
usage(void)
{
	fprint(2, "usage: login [-u user] [-n namespace_file] [cmd]\n");
	exits("usage");
}

void
main(int argc, char *argv[])
{
	char *err, user[NAMELEN];
	char *namespace = "/lib/namespace";

	user[0] = '\0';
	ARGBEGIN{
	case 'u':
		strncpy(user, ARGF(), NAMELEN);
		user[NAMELEN-1] = '\0';
		break;
	case 'n':
		namespace = ARGF();
		break;
	default:
		usage();
	}ARGEND

	if(argc > 1)
		usage();

	if(newns(getuser(), namespace) < 0)
		error("newns");
	if(argc)
		execl("/bin/rc", "rc", "-c", argv[0], 0);
	else
		execl("/bin/rc", "rc", "-i", 0);
fprint(2, "cputype=%s user=%s\n", getenv("cputype"), getuser());
	error("can't exec rc");
	exits(0);
}

int
getc(void)
{
	char c;

	if(read(0, &c, 1) != 1)
		return -1;
	return c;
}

int
puts(char *s)
{
	return write(1, s, strlen(s));
}

void
error(char *msg)
{
	fprint(2, "%s: %s: %r\n", argv0, msg);
	exits(msg);
}


syntax highlighted by Code2HTML, v. 0.9.1