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