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 10 usage(void) 11 { 12 fprint(2, "usage: %s [-n nsect] [-z sectsize] file\n", argv0); 13 exits("usage"); 14 } 15 16 static ulong 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 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