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 73e12c5d1SDavid du Colombier main(int argc, char **argv) 83e12c5d1SDavid du Colombier { 93e12c5d1SDavid 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 193e12c5d1SDavid du Colombier if(dirstat(argv[1], &d) < 0){ 203e12c5d1SDavid du Colombier print("swap: can't stat %s: %r\n", argv[1]); 213e12c5d1SDavid du Colombier exits("swap: failed"); 223e12c5d1SDavid du Colombier } 233e12c5d1SDavid du Colombier if(d.type != 'M'){ /* kernel device */ 243e12c5d1SDavid du Colombier swapfd = open(argv[1], ORDWR); 253e12c5d1SDavid du Colombier p = argv[1]; 263e12c5d1SDavid du Colombier } 273e12c5d1SDavid du Colombier else { 283e12c5d1SDavid du Colombier p = getenv("sysname"); 293e12c5d1SDavid du Colombier if(p == 0) 303e12c5d1SDavid du Colombier p = "swap"; 313e12c5d1SDavid du Colombier sprint(buf, "%s/%sXXXXXXX", argv[1], p); 323e12c5d1SDavid du Colombier p = mktemp(buf); 333e12c5d1SDavid du Colombier swapfd = create(p, ORDWR|ORCLOSE, 0600); 343e12c5d1SDavid du Colombier } 353e12c5d1SDavid du Colombier 363e12c5d1SDavid du Colombier if(swapfd < 0 || (p[0] == '/' && p[1] == '\0')) { 373e12c5d1SDavid du Colombier print("swap: failed to make a file: %r\n"); 383e12c5d1SDavid du Colombier exits("swap: failed"); 393e12c5d1SDavid du Colombier } 403e12c5d1SDavid du Colombier 413e12c5d1SDavid du Colombier i = create("/env/swap", OWRITE, 0666); 423e12c5d1SDavid du Colombier if(i < 0) 433e12c5d1SDavid du Colombier error("open /env/swap"); 443e12c5d1SDavid du Colombier 453e12c5d1SDavid du Colombier if(write(i, p, strlen(p)) != strlen(p)) 463e12c5d1SDavid du Colombier error("sysname"); 473e12c5d1SDavid du Colombier close(i); 48*219b2ee8SDavid du Colombier print("swap: %s\n", p); 493e12c5d1SDavid du Colombier 503e12c5d1SDavid du Colombier cswfd = open("/dev/swap", OWRITE); 513e12c5d1SDavid du Colombier if(cswfd < 0) 523e12c5d1SDavid du Colombier error("open: /dev/swap"); 533e12c5d1SDavid du Colombier 543e12c5d1SDavid du Colombier j = sprint(buf, "%d", swapfd); 553e12c5d1SDavid du Colombier if(write(cswfd, buf, j) != j) 563e12c5d1SDavid du Colombier error("write: /dev/swap"); 57*219b2ee8SDavid du Colombier exits(0); 583e12c5d1SDavid du Colombier } 593e12c5d1SDavid du Colombier 603e12c5d1SDavid du Colombier void 613e12c5d1SDavid du Colombier error(char *s) 623e12c5d1SDavid du Colombier { 633e12c5d1SDavid du Colombier perror(s); 643e12c5d1SDavid du Colombier exits(s); 653e12c5d1SDavid du Colombier } 66