diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/swap.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/swap.c')
-rwxr-xr-x | sys/src/cmd/swap.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/sys/src/cmd/swap.c b/sys/src/cmd/swap.c new file mode 100755 index 000000000..6350caff5 --- /dev/null +++ b/sys/src/cmd/swap.c @@ -0,0 +1,66 @@ +#include <u.h> +#include <libc.h> + +void error(char *); + +void +main(int argc, char **argv) +{ + Dir *d; + int swapfd, cswfd; + char buf[128], *p; + int i, j; + + if(argc != 2) { + print("Usage: swap path\n"); + exits("swap: failed"); + } + + d = dirstat(argv[1]); + if(d == nil){ + print("swap: can't stat %s: %r\n", argv[1]); + exits("swap: failed"); + } + if(d->type != 'M'){ /* kernel device */ + swapfd = open(argv[1], ORDWR); + p = argv[1]; + } + else { + p = getenv("sysname"); + if(p == 0) + p = "swap"; + sprint(buf, "%s/%sXXXXXXX", argv[1], p); + p = mktemp(buf); + swapfd = create(p, ORDWR|ORCLOSE, 0600); + } + + if(swapfd < 0 || (p[0] == '/' && p[1] == '\0')) { + print("swap: failed to make a file: %r\n"); + exits("swap: failed"); + } + + i = create("/env/swap", OWRITE, 0666); + if(i < 0) + error("open /env/swap"); + + if(write(i, p, strlen(p)) != strlen(p)) + error("sysname"); + close(i); + print("swap: %s\n", p); + + cswfd = open("/dev/swap", OWRITE); + if(cswfd < 0) + error("open: /dev/swap"); + + j = sprint(buf, "%d", swapfd); + if(write(cswfd, buf, j) != j) + error("write: /dev/swap"); + exits(0); +} + +void +error(char *s) +{ + perror(s); + exits(s); +} |