xref: /plan9/sys/src/cmd/mount.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
3*219b2ee8SDavid du Colombier #include <auth.h>
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier void	usage(void);
63e12c5d1SDavid du Colombier void	catch(void*, char*);
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier void
93e12c5d1SDavid du Colombier main(int argc, char *argv[])
103e12c5d1SDavid du Colombier {
11*219b2ee8SDavid du Colombier 	char *spec;
123e12c5d1SDavid du Colombier 	ulong flag = 0;
133e12c5d1SDavid du Colombier 	int fd;
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier 	ARGBEGIN{
163e12c5d1SDavid du Colombier 	case 'a':
173e12c5d1SDavid du Colombier 		flag |= MAFTER;
183e12c5d1SDavid du Colombier 		break;
193e12c5d1SDavid du Colombier 	case 'b':
203e12c5d1SDavid du Colombier 		flag |= MBEFORE;
213e12c5d1SDavid du Colombier 		break;
223e12c5d1SDavid du Colombier 	case 'c':
233e12c5d1SDavid du Colombier 		flag |= MCREATE;
243e12c5d1SDavid du Colombier 		break;
253e12c5d1SDavid du Colombier 	default:
263e12c5d1SDavid du Colombier 		usage();
273e12c5d1SDavid du Colombier 	}ARGEND
283e12c5d1SDavid du Colombier 
293e12c5d1SDavid du Colombier 	spec = 0;
303e12c5d1SDavid du Colombier 	if(argc == 2)
313e12c5d1SDavid du Colombier 		spec = "";
323e12c5d1SDavid du Colombier 	else if(argc == 3)
333e12c5d1SDavid du Colombier 		spec = argv[2];
343e12c5d1SDavid du Colombier 	else
353e12c5d1SDavid du Colombier 		usage();
363e12c5d1SDavid du Colombier 
373e12c5d1SDavid du Colombier 	if((flag&MAFTER)&&(flag&MBEFORE))
383e12c5d1SDavid du Colombier 		usage();
393e12c5d1SDavid du Colombier 
403e12c5d1SDavid du Colombier 	fd = open(argv[0], ORDWR);
413e12c5d1SDavid du Colombier 	if(fd < 0){
423e12c5d1SDavid du Colombier 		fprint(2, "%s: can't open %s: %r\n", argv0, argv[0]);
433e12c5d1SDavid du Colombier 		exits("open");
443e12c5d1SDavid du Colombier 	}
453e12c5d1SDavid du Colombier 
463e12c5d1SDavid du Colombier 	notify(catch);
47*219b2ee8SDavid du Colombier 	if(amount(fd, argv[1], flag, spec) < 0){
483e12c5d1SDavid du Colombier 		fprint(2, "%s: mount %s %s: %r\n", argv0, argv[0], argv[1]);
493e12c5d1SDavid du Colombier 		exits("mount");
503e12c5d1SDavid du Colombier 	}
513e12c5d1SDavid du Colombier 	exits(0);
523e12c5d1SDavid du Colombier }
533e12c5d1SDavid du Colombier 
543e12c5d1SDavid du Colombier void
553e12c5d1SDavid du Colombier catch(void *x, char *m)
563e12c5d1SDavid du Colombier {
573e12c5d1SDavid du Colombier 	USED(x);
583e12c5d1SDavid du Colombier 	fprint(2, "mount: %s\n", m);
593e12c5d1SDavid du Colombier 	exits(m);
603e12c5d1SDavid du Colombier }
613e12c5d1SDavid du Colombier 
623e12c5d1SDavid du Colombier void
633e12c5d1SDavid du Colombier usage(void)
643e12c5d1SDavid du Colombier {
65*219b2ee8SDavid du Colombier 	fprint(2, "usage: mount [-b|-a|-c|-bc|-ac] [-s server] /srv/service dir [spec]\n");
663e12c5d1SDavid du Colombier 	exits("usage");
673e12c5d1SDavid du Colombier }
68