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