swap.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <u.h>
  2. #include <libc.h>
  3. void error(char *);
  4. void
  5. main(int argc, char **argv)
  6. {
  7. Dir *d;
  8. int swapfd, cswfd;
  9. char buf[128], *p;
  10. int i, j;
  11. if(argc != 2) {
  12. print("Usage: swap path\n");
  13. exits("swap: failed");
  14. }
  15. d = dirstat(argv[1]);
  16. if(d == nil){
  17. print("swap: can't stat %s: %r\n", argv[1]);
  18. exits("swap: failed");
  19. }
  20. if(d->type != 'M'){ /* kernel device */
  21. swapfd = open(argv[1], ORDWR);
  22. p = argv[1];
  23. }
  24. else {
  25. p = getenv("sysname");
  26. if(p == 0)
  27. p = "swap";
  28. sprint(buf, "%s/%sXXXXXXX", argv[1], p);
  29. p = mktemp(buf);
  30. swapfd = create(p, ORDWR|ORCLOSE, 0600);
  31. }
  32. if(swapfd < 0 || (p[0] == '/' && p[1] == '\0')) {
  33. print("swap: failed to make a file: %r\n");
  34. exits("swap: failed");
  35. }
  36. i = create("/env/swap", OWRITE, 0666);
  37. if(i < 0)
  38. error("open /env/swap");
  39. if(write(i, p, strlen(p)) != strlen(p))
  40. error("sysname");
  41. close(i);
  42. print("swap: %s\n", p);
  43. cswfd = open("/dev/swap", OWRITE);
  44. if(cswfd < 0)
  45. error("open: /dev/swap");
  46. j = sprint(buf, "%d", swapfd);
  47. if(write(cswfd, buf, j) != j)
  48. error("write: /dev/swap");
  49. exits(0);
  50. }
  51. void
  52. error(char *s)
  53. {
  54. perror(s);
  55. exits(s);
  56. }