13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier void error(char *);
53e12c5d1SDavid du Colombier
63e12c5d1SDavid du Colombier void
main(int argc,char ** argv)73e12c5d1SDavid du Colombier main(int argc, char **argv)
83e12c5d1SDavid du Colombier {
9*9a747e4fSDavid du Colombier Dir *d;
103e12c5d1SDavid du Colombier int swapfd, cswfd;
113e12c5d1SDavid du Colombier char buf[128], *p;
123e12c5d1SDavid du Colombier int i, j;
133e12c5d1SDavid du Colombier
143e12c5d1SDavid du Colombier if(argc != 2) {
153e12c5d1SDavid du Colombier print("Usage: swap path\n");
163e12c5d1SDavid du Colombier exits("swap: failed");
173e12c5d1SDavid du Colombier }
183e12c5d1SDavid du Colombier
19*9a747e4fSDavid du Colombier d = dirstat(argv[1]);
20*9a747e4fSDavid du Colombier if(d == nil){
213e12c5d1SDavid du Colombier print("swap: can't stat %s: %r\n", argv[1]);
223e12c5d1SDavid du Colombier exits("swap: failed");
233e12c5d1SDavid du Colombier }
24*9a747e4fSDavid du Colombier if(d->type != 'M'){ /* kernel device */
253e12c5d1SDavid du Colombier swapfd = open(argv[1], ORDWR);
263e12c5d1SDavid du Colombier p = argv[1];
273e12c5d1SDavid du Colombier }
283e12c5d1SDavid du Colombier else {
293e12c5d1SDavid du Colombier p = getenv("sysname");
303e12c5d1SDavid du Colombier if(p == 0)
313e12c5d1SDavid du Colombier p = "swap";
323e12c5d1SDavid du Colombier sprint(buf, "%s/%sXXXXXXX", argv[1], p);
333e12c5d1SDavid du Colombier p = mktemp(buf);
343e12c5d1SDavid du Colombier swapfd = create(p, ORDWR|ORCLOSE, 0600);
353e12c5d1SDavid du Colombier }
363e12c5d1SDavid du Colombier
373e12c5d1SDavid du Colombier if(swapfd < 0 || (p[0] == '/' && p[1] == '\0')) {
383e12c5d1SDavid du Colombier print("swap: failed to make a file: %r\n");
393e12c5d1SDavid du Colombier exits("swap: failed");
403e12c5d1SDavid du Colombier }
413e12c5d1SDavid du Colombier
423e12c5d1SDavid du Colombier i = create("/env/swap", OWRITE, 0666);
433e12c5d1SDavid du Colombier if(i < 0)
443e12c5d1SDavid du Colombier error("open /env/swap");
453e12c5d1SDavid du Colombier
463e12c5d1SDavid du Colombier if(write(i, p, strlen(p)) != strlen(p))
473e12c5d1SDavid du Colombier error("sysname");
483e12c5d1SDavid du Colombier close(i);
49219b2ee8SDavid du Colombier print("swap: %s\n", p);
503e12c5d1SDavid du Colombier
513e12c5d1SDavid du Colombier cswfd = open("/dev/swap", OWRITE);
523e12c5d1SDavid du Colombier if(cswfd < 0)
533e12c5d1SDavid du Colombier error("open: /dev/swap");
543e12c5d1SDavid du Colombier
553e12c5d1SDavid du Colombier j = sprint(buf, "%d", swapfd);
563e12c5d1SDavid du Colombier if(write(cswfd, buf, j) != j)
573e12c5d1SDavid du Colombier error("write: /dev/swap");
58219b2ee8SDavid du Colombier exits(0);
593e12c5d1SDavid du Colombier }
603e12c5d1SDavid du Colombier
613e12c5d1SDavid du Colombier void
error(char * s)623e12c5d1SDavid du Colombier error(char *s)
633e12c5d1SDavid du Colombier {
643e12c5d1SDavid du Colombier perror(s);
653e12c5d1SDavid du Colombier exits(s);
663e12c5d1SDavid du Colombier }
67