xref: /plan9/sys/src/cmd/aux/flashfs/flash.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <auth.h>
4*9a747e4fSDavid du Colombier #include <fcall.h>
5*9a747e4fSDavid du Colombier #include <thread.h>
6*9a747e4fSDavid du Colombier #include <9p.h>
7*9a747e4fSDavid du Colombier #include "flashfs.h"
8*9a747e4fSDavid du Colombier 
9*9a747e4fSDavid du Colombier extern int	chatty9p;
10*9a747e4fSDavid du Colombier 
11*9a747e4fSDavid du Colombier static void
usage(void)12*9a747e4fSDavid du Colombier usage(void)
13*9a747e4fSDavid du Colombier {
14*9a747e4fSDavid du Colombier 	fprint(2, "usage: %s [-rD] [-n nsect] [-z sectsize] [-m mount] [-f file]\n", argv0);
15*9a747e4fSDavid du Colombier 	exits("usage");
16*9a747e4fSDavid du Colombier }
17*9a747e4fSDavid du Colombier 
18*9a747e4fSDavid du Colombier static ulong
argval(char * arg)19*9a747e4fSDavid du Colombier argval(char *arg)
20*9a747e4fSDavid du Colombier {
21*9a747e4fSDavid du Colombier 	long v;
22*9a747e4fSDavid du Colombier 	char *extra;
23*9a747e4fSDavid du Colombier 
24*9a747e4fSDavid du Colombier 	if(arg == nil)
25*9a747e4fSDavid du Colombier 		usage();
26*9a747e4fSDavid du Colombier 	v = strtol(arg, &extra, 0);
27*9a747e4fSDavid du Colombier 	if(*extra || v <= 0)
28*9a747e4fSDavid du Colombier 		usage();
29*9a747e4fSDavid du Colombier 	return v;
30*9a747e4fSDavid du Colombier }
31*9a747e4fSDavid du Colombier 
32*9a747e4fSDavid du Colombier void
main(int argc,char ** argv)33*9a747e4fSDavid du Colombier main(int argc, char **argv)
34*9a747e4fSDavid du Colombier {
35*9a747e4fSDavid du Colombier 	int ro;
36*9a747e4fSDavid du Colombier 	char *file, *mount;
37*9a747e4fSDavid du Colombier 
38*9a747e4fSDavid du Colombier 	mount = "/n/brzr";
39*9a747e4fSDavid du Colombier 	ro = 0;
40*9a747e4fSDavid du Colombier 	file = "/dev/flash/fs";
41*9a747e4fSDavid du Colombier 
42*9a747e4fSDavid du Colombier 	ARGBEGIN {
43*9a747e4fSDavid du Colombier 	case 'D':
44*9a747e4fSDavid du Colombier 		chatty9p++;
45*9a747e4fSDavid du Colombier 		break;
46*9a747e4fSDavid du Colombier 	case 'r':
47*9a747e4fSDavid du Colombier 		ro++;
48*9a747e4fSDavid du Colombier 		break;
49*9a747e4fSDavid du Colombier 	case 'n':
50*9a747e4fSDavid du Colombier 		nsects = argval(ARGF());
51*9a747e4fSDavid du Colombier 		break;
52*9a747e4fSDavid du Colombier 	case 'z':
53*9a747e4fSDavid du Colombier 		sectsize = argval(ARGF());
54*9a747e4fSDavid du Colombier 		break;
55*9a747e4fSDavid du Colombier 	case 'f':
56*9a747e4fSDavid du Colombier 		file = ARGF();
57*9a747e4fSDavid du Colombier 		break;
58*9a747e4fSDavid du Colombier 	case 'm':
59*9a747e4fSDavid du Colombier 		mount = ARGF();
60*9a747e4fSDavid du Colombier 		break;
61*9a747e4fSDavid du Colombier 	default:
62*9a747e4fSDavid du Colombier 		usage();
63*9a747e4fSDavid du Colombier 	} ARGEND
64*9a747e4fSDavid du Colombier 
65*9a747e4fSDavid du Colombier 	if(argc != 0)
66*9a747e4fSDavid du Colombier 		usage();
67*9a747e4fSDavid du Colombier 
68*9a747e4fSDavid du Colombier 	initdata(file, 0);
69*9a747e4fSDavid du Colombier 	sectbuff = emalloc9p(sectsize);
70*9a747e4fSDavid du Colombier 	einit();
71*9a747e4fSDavid du Colombier 	loadfs(ro);
72*9a747e4fSDavid du Colombier 	serve(mount);
73*9a747e4fSDavid du Colombier 	exits(nil);
74*9a747e4fSDavid du Colombier }
75