xref: /plan9/sys/src/cmd/aux/flashfs/testld.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 static void
usage(void)10*9a747e4fSDavid du Colombier usage(void)
11*9a747e4fSDavid du Colombier {
12*9a747e4fSDavid du Colombier 	fprint(2, "usage: %s -n nsect -z sectsize -f file\n", prog);
13*9a747e4fSDavid du Colombier 	exits("usage");
14*9a747e4fSDavid du Colombier }
15*9a747e4fSDavid du Colombier 
16*9a747e4fSDavid du Colombier static ulong
argval(char * arg)17*9a747e4fSDavid du Colombier argval(char *arg)
18*9a747e4fSDavid du Colombier {
19*9a747e4fSDavid du Colombier 	long v;
20*9a747e4fSDavid du Colombier 	char *extra;
21*9a747e4fSDavid du Colombier 
22*9a747e4fSDavid du Colombier 	if(arg == nil)
23*9a747e4fSDavid du Colombier 		usage();
24*9a747e4fSDavid du Colombier 	v = strtol(arg, &extra, 0);
25*9a747e4fSDavid du Colombier 	if(*extra || v <= 0)
26*9a747e4fSDavid du Colombier 		usage();
27*9a747e4fSDavid du Colombier 	return v;
28*9a747e4fSDavid du Colombier }
29*9a747e4fSDavid du Colombier 
30*9a747e4fSDavid du Colombier void
main(int argc,char ** argv)31*9a747e4fSDavid du Colombier main(int argc, char **argv)
32*9a747e4fSDavid du Colombier {
33*9a747e4fSDavid du Colombier 	char *file;
34*9a747e4fSDavid du Colombier 
35*9a747e4fSDavid du Colombier 	prog = "testldfs";
36*9a747e4fSDavid du Colombier 	file = nil;
37*9a747e4fSDavid du Colombier 
38*9a747e4fSDavid du Colombier 	ARGBEGIN {
39*9a747e4fSDavid du Colombier 	case 'n':
40*9a747e4fSDavid du Colombier 		nsects = argval(ARGF());
41*9a747e4fSDavid du Colombier 		break;
42*9a747e4fSDavid du Colombier 	case 'z':
43*9a747e4fSDavid du Colombier 		sectsize = argval(ARGF());
44*9a747e4fSDavid du Colombier 		break;
45*9a747e4fSDavid du Colombier 	case 'f':
46*9a747e4fSDavid du Colombier 		file = ARGF();
47*9a747e4fSDavid du Colombier 		break;
48*9a747e4fSDavid du Colombier 	default:
49*9a747e4fSDavid du Colombier 		usage();
50*9a747e4fSDavid du Colombier 	} ARGEND
51*9a747e4fSDavid du Colombier 
52*9a747e4fSDavid du Colombier 	if(argc != 0 || nsects == 0 || sectsize == 0 || file == nil)
53*9a747e4fSDavid du Colombier 		usage();
54*9a747e4fSDavid du Colombier 
55*9a747e4fSDavid du Colombier 	if(nsects < 8) {
56*9a747e4fSDavid du Colombier 		fprint(2, "%s: unreasonable value for nsects: %lud\n", prog, nsects);
57*9a747e4fSDavid du Colombier 		exits("nsects");
58*9a747e4fSDavid du Colombier 	}
59*9a747e4fSDavid du Colombier 
60*9a747e4fSDavid du Colombier 	if(sectsize < 512) {
61*9a747e4fSDavid du Colombier 		fprint(2, "%s: unreasonable value for sectsize: %lud\n", prog, sectsize);
62*9a747e4fSDavid du Colombier 		exits("sectsize");
63*9a747e4fSDavid du Colombier 	}
64*9a747e4fSDavid du Colombier 
65*9a747e4fSDavid du Colombier 	sectbuff = emalloc9p(sectsize);
66*9a747e4fSDavid du Colombier 	initdata(file, 0);
67*9a747e4fSDavid du Colombier 	einit();
68*9a747e4fSDavid du Colombier 	loadfs(1);
69*9a747e4fSDavid du Colombier }
70