blob: 21d2287fd9369eee02af9141736e2577bebc13d5 [file] [log] [blame]
Rom Lemarchand367297c2013-06-05 13:25:12 -07001#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <getopt.h>
Rom Lemarchand367297c2013-06-05 13:25:12 -07005#include <sys/swap.h>
6
Rom Lemarchand367297c2013-06-05 13:25:12 -07007void usage(char *name)
8{
9 fprintf(stderr, "Usage: %s [-p prio] <filename>\n"
10 " prio must be between 0 and %d\n", name, SWAP_FLAG_PRIO_MASK);
11}
12
13int parse_prio(char *prio_str)
14{
15 unsigned long p = strtoul(prio_str, NULL, 10);
16
17 return (p > SWAP_FLAG_PRIO_MASK)? -1 : (int)p;
18}
19
20int swapon_main(int argc, char **argv)
21{
22 int err = 0;
23 int flags = 0;
24 int prio;
25
26 opterr = 0;
27 do {
28 int c = getopt(argc, argv, "hp:");
29 if (c == -1)
30 break;
31
32 switch (c) {
33 case 'p':
34 if (optarg != NULL)
35 prio = parse_prio(optarg);
36 else
37 prio = -1;
38
39 if (prio < 0) {
40 usage(argv[0]);
41 return -EINVAL;
42 }
43 flags |= SWAP_FLAG_PREFER;
44 flags |= (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK;
45 break;
46 case 'h':
47 usage(argv[0]);
48 return 0;
49 case '?':
50 fprintf(stderr, "unknown option: %c\n", optopt);
51 return -EINVAL;
52 }
53 } while (1);
54
55 if (optind != argc - 1) {
56 usage(argv[0]);
57 return -EINVAL;
58 }
59
60 err = swapon(argv[argc - 1], flags);
61 if (err) {
62 fprintf(stderr, "swapon failed for %s\n", argv[argc - 1]);
63 }
64
65 return err;
66}