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] file\n", argv0);
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 ulong i;
34*9a747e4fSDavid du Colombier int m, n;
35*9a747e4fSDavid du Colombier char *file;
36*9a747e4fSDavid du Colombier uchar hdr[MAXHDR];
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 default:
46*9a747e4fSDavid du Colombier usage();
47*9a747e4fSDavid du Colombier } ARGEND
48*9a747e4fSDavid du Colombier
49*9a747e4fSDavid du Colombier if(argc != 1)
50*9a747e4fSDavid du Colombier usage();
51*9a747e4fSDavid du Colombier file = argv[0];
52*9a747e4fSDavid du Colombier
53*9a747e4fSDavid du Colombier sectbuff = emalloc9p(sectsize);
54*9a747e4fSDavid du Colombier initdata(file, 1);
55*9a747e4fSDavid du Colombier
56*9a747e4fSDavid du Colombier memmove(hdr, magic, MAGSIZE);
57*9a747e4fSDavid du Colombier m = putc3(&hdr[MAGSIZE], 0);
58*9a747e4fSDavid du Colombier n = putc3(&hdr[MAGSIZE + m], 0);
59*9a747e4fSDavid du Colombier clearsect(0);
60*9a747e4fSDavid du Colombier writedata(0, 0, hdr, MAGSIZE + m + n, 0);
61*9a747e4fSDavid du Colombier
62*9a747e4fSDavid du Colombier for(i = 1; i < nsects - 1; i++)
63*9a747e4fSDavid du Colombier clearsect(i);
64*9a747e4fSDavid du Colombier
65*9a747e4fSDavid du Colombier m = putc3(&hdr[MAGSIZE], 1);
66*9a747e4fSDavid du Colombier n = putc3(&hdr[MAGSIZE + m], 0);
67*9a747e4fSDavid du Colombier clearsect(nsects - 1);
68*9a747e4fSDavid du Colombier writedata(0, nsects - 1, hdr, MAGSIZE + m + n, 0);
69*9a747e4fSDavid du Colombier }
70