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