xref: /plan9/sys/src/cmd/ext2srv/xfssrv.c (revision dc5a79c1208f0704eeb474acc990728f8b4854f5)
1*dc5a79c1SDavid du Colombier #include <u.h>
2*dc5a79c1SDavid du Colombier #include <libc.h>
3*dc5a79c1SDavid du Colombier #include <fcall.h>
4*dc5a79c1SDavid du Colombier #include <thread.h>
5*dc5a79c1SDavid du Colombier #include <9p.h>
6*dc5a79c1SDavid du Colombier #include "dat.h"
7*dc5a79c1SDavid du Colombier #include "fns.h"
8*dc5a79c1SDavid du Colombier 
9*dc5a79c1SDavid du Colombier #include "errstr.h"
10*dc5a79c1SDavid du Colombier 
11*dc5a79c1SDavid du Colombier int	errno;
12*dc5a79c1SDavid du Colombier int rdonly;
13*dc5a79c1SDavid du Colombier char	*srvfile;
14*dc5a79c1SDavid du Colombier char	*deffile;
15*dc5a79c1SDavid du Colombier 
16*dc5a79c1SDavid du Colombier extern void iobuf_init(void);
17*dc5a79c1SDavid du Colombier extern Srv ext2srv;
18*dc5a79c1SDavid du Colombier 
19*dc5a79c1SDavid du Colombier void
usage(void)20*dc5a79c1SDavid du Colombier usage(void)
21*dc5a79c1SDavid du Colombier {
22*dc5a79c1SDavid du Colombier 	fprint(2, "usage: %s [-v] [-s] [-r] [-p passwd] [-g group] [-f devicefile] [srvname]\n", argv0);
23*dc5a79c1SDavid du Colombier 	exits("usage");
24*dc5a79c1SDavid du Colombier }
25*dc5a79c1SDavid du Colombier 
26*dc5a79c1SDavid du Colombier /*void handler(void *v, char *sig)
27*dc5a79c1SDavid du Colombier {
28*dc5a79c1SDavid du Colombier 	USED(v,sig);
29*dc5a79c1SDavid du Colombier 	syncbuf();
30*dc5a79c1SDavid du Colombier 	noted(NDFLT);
31*dc5a79c1SDavid du Colombier }*/
32*dc5a79c1SDavid du Colombier 
33*dc5a79c1SDavid du Colombier void
main(int argc,char ** argv)34*dc5a79c1SDavid du Colombier main(int argc, char **argv)
35*dc5a79c1SDavid du Colombier {
36*dc5a79c1SDavid du Colombier 	int stdio;
37*dc5a79c1SDavid du Colombier 
38*dc5a79c1SDavid du Colombier 	stdio = 0;
39*dc5a79c1SDavid du Colombier 	ARGBEGIN{
40*dc5a79c1SDavid du Colombier 	case 'D':
41*dc5a79c1SDavid du Colombier 		++chatty9p;
42*dc5a79c1SDavid du Colombier 		break;
43*dc5a79c1SDavid du Colombier 	case 'v':
44*dc5a79c1SDavid du Colombier 		++chatty;
45*dc5a79c1SDavid du Colombier 		break;
46*dc5a79c1SDavid du Colombier 	case 'f':
47*dc5a79c1SDavid du Colombier 		deffile = ARGF();
48*dc5a79c1SDavid du Colombier 		break;
49*dc5a79c1SDavid du Colombier 	case 'g':
50*dc5a79c1SDavid du Colombier 		gidfile(ARGF());
51*dc5a79c1SDavid du Colombier 		break;
52*dc5a79c1SDavid du Colombier 	case 'p':
53*dc5a79c1SDavid du Colombier 		uidfile(ARGF());
54*dc5a79c1SDavid du Colombier 		break;
55*dc5a79c1SDavid du Colombier 	case 's':
56*dc5a79c1SDavid du Colombier 		stdio = 1;
57*dc5a79c1SDavid du Colombier 		break;
58*dc5a79c1SDavid du Colombier 	case 'r':
59*dc5a79c1SDavid du Colombier 		rdonly = 1;
60*dc5a79c1SDavid du Colombier 		break;
61*dc5a79c1SDavid du Colombier 	default:
62*dc5a79c1SDavid du Colombier 		usage();
63*dc5a79c1SDavid du Colombier 	}ARGEND
64*dc5a79c1SDavid du Colombier 
65*dc5a79c1SDavid du Colombier 	if(argc == 0)
66*dc5a79c1SDavid du Colombier 		srvfile = "ext2";
67*dc5a79c1SDavid du Colombier 	else if(argc == 1)
68*dc5a79c1SDavid du Colombier 		srvfile = argv[0];
69*dc5a79c1SDavid du Colombier 	else
70*dc5a79c1SDavid du Colombier 		usage();
71*dc5a79c1SDavid du Colombier 
72*dc5a79c1SDavid du Colombier 	iobuf_init();
73*dc5a79c1SDavid du Colombier 	/*notify(handler);*/
74*dc5a79c1SDavid du Colombier 
75*dc5a79c1SDavid du Colombier 	if(!chatty){
76*dc5a79c1SDavid du Colombier 		close(2);
77*dc5a79c1SDavid du Colombier 		open("#c/cons", OWRITE);
78*dc5a79c1SDavid du Colombier 	}
79*dc5a79c1SDavid du Colombier 	if(stdio){
80*dc5a79c1SDavid du Colombier 		srv(&ext2srv);
81*dc5a79c1SDavid du Colombier 	}else{
82*dc5a79c1SDavid du Colombier 		chat("%s %d: serving %s\n", argv0, getpid(), srvfile);
83*dc5a79c1SDavid du Colombier 		postmountsrv(&ext2srv, srvfile, 0, 0);
84*dc5a79c1SDavid du Colombier 	}
85*dc5a79c1SDavid du Colombier 	exits(0);
86*dc5a79c1SDavid du Colombier }
87*dc5a79c1SDavid du Colombier 
88*dc5a79c1SDavid du Colombier char *
xerrstr(int e)89*dc5a79c1SDavid du Colombier xerrstr(int e)
90*dc5a79c1SDavid du Colombier {
91*dc5a79c1SDavid du Colombier 	if (e < 0 || e >= sizeof errmsg/sizeof errmsg[0])
92*dc5a79c1SDavid du Colombier 		return "no such error";
93*dc5a79c1SDavid du Colombier 	else
94*dc5a79c1SDavid du Colombier 		return errmsg[e];
95*dc5a79c1SDavid du Colombier }
96