mkfs.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. static void
  9. usage(void)
  10. {
  11. fprint(2, "usage: %s [-n nsect] [-z sectsize] file\n", argv0);
  12. exits("usage");
  13. }
  14. static ulong
  15. argval(char *arg)
  16. {
  17. long v;
  18. char *extra;
  19. if(arg == nil)
  20. usage();
  21. v = strtol(arg, &extra, 0);
  22. if(*extra || v <= 0)
  23. usage();
  24. return v;
  25. }
  26. void
  27. main(int argc, char **argv)
  28. {
  29. ulong i;
  30. int m, n;
  31. char *file;
  32. uchar hdr[MAXHDR];
  33. ARGBEGIN {
  34. case 'n':
  35. nsects = argval(ARGF());
  36. break;
  37. case 'z':
  38. sectsize = argval(ARGF());
  39. break;
  40. default:
  41. usage();
  42. } ARGEND
  43. if(argc != 1)
  44. usage();
  45. file = argv[0];
  46. sectbuff = emalloc9p(sectsize);
  47. initdata(file, 1);
  48. memmove(hdr, magic, MAGSIZE);
  49. m = putc3(&hdr[MAGSIZE], 0);
  50. n = putc3(&hdr[MAGSIZE + m], 0);
  51. clearsect(0);
  52. writedata(0, 0, hdr, MAGSIZE + m + n, 0);
  53. for(i = 1; i < nsects - 1; i++)
  54. clearsect(i);
  55. m = putc3(&hdr[MAGSIZE], 1);
  56. n = putc3(&hdr[MAGSIZE + m], 0);
  57. clearsect(nsects - 1);
  58. writedata(0, nsects - 1, hdr, MAGSIZE + m + n, 0);
  59. }