params.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <u.h>
  2. #include <libc.h>
  3. void
  4. erase(char *part)
  5. {
  6. char file[256];
  7. int fd;
  8. snprint(file, sizeof file, "%sctl", part);
  9. fd = open(file, ORDWR);
  10. if(fd < 0)
  11. return;
  12. fprint(fd, "erase");
  13. close(fd);
  14. }
  15. char*
  16. readfile(char *file)
  17. {
  18. char buf[512];
  19. int n, fd;
  20. uchar *p;
  21. fd = open(file, OREAD);
  22. if(fd < 0)
  23. sysfatal("opening %s: %r", file);
  24. n = read(fd, buf, sizeof(buf)-1);
  25. close(fd);
  26. if(n < 0)
  27. return "";
  28. buf[n] = 0;
  29. for(p = (uchar*)buf; *p; p++)
  30. if(*p == 0xff){
  31. *p = 0;
  32. break;
  33. }
  34. return strdup(buf);
  35. }
  36. void
  37. writefile(char *file, char *data)
  38. {
  39. int fd;
  40. fd = open(file, OWRITE);
  41. if(fd < 0)
  42. fd = create(file, OWRITE, 0664);
  43. if(fd < 0)
  44. return;
  45. write(fd, data, strlen(data));
  46. close(fd);
  47. }
  48. void
  49. main(int argc, char **argv)
  50. {
  51. int from = 0;
  52. char *params;
  53. char *file = "/tmp/tmpparams";
  54. char *part;
  55. ARGBEGIN {
  56. case 'f':
  57. from++;
  58. break;
  59. } ARGEND;
  60. if(argc)
  61. part = argv[0];
  62. else
  63. part = "/dev/flash/user";
  64. if(from){
  65. params = readfile(part);
  66. writefile(file, params);
  67. } else {
  68. params = readfile(file);
  69. erase(part);
  70. writefile(part, params);
  71. free(params);
  72. }
  73. }