xref: /inferno-os/appl/cmd/export.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1#
2# export current name space on a connection
3#
4
5implement Export;
6
7include "sys.m";
8	sys: Sys;
9include "draw.m";
10
11Export: module
12{
13	init: fn(nil: ref Draw->Context, argv: list of string);
14};
15
16usage()
17{
18	sys->fprint(stderr(), "Usage: export [-a] dir [connection]\n");
19	raise "fail:usage";
20}
21
22init(nil: ref Draw->Context, argv: list of string)
23{
24	# usage: export dir [connection]
25	sys = load Sys Sys->PATH;
26	if(argv != nil)
27		argv = tl argv;
28	flag := Sys->EXPWAIT;
29	for(; argv != nil && len hd argv && (hd argv)[0] == '-'; argv = tl argv)
30		for(i := 1; i < len hd argv; i++)
31			case (hd argv)[i] {
32			'a' =>
33				flag = Sys->EXPASYNC;
34			* =>
35				usage();
36			}
37	n := len argv;
38	if (n < 1 || n > 2)
39		usage();
40	fd: ref Sys->FD;
41	if (n == 2) {
42		if ((fd = sys->open(hd tl argv, Sys->ORDWR)) == nil) {
43			sys->fprint(stderr(), "export: can't open %s: %r\n", hd tl argv);
44			raise "fail:open";
45		}
46	} else
47		fd = sys->fildes(0);
48	if (sys->export(fd, hd argv, flag) < 0) {
49		sys->fprint(stderr(), "export: can't export: %r\n");
50		raise "fail:export";
51	}
52}
53
54stderr(): ref Sys->FD
55{
56	return sys->fildes(2);
57}
58