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