]>
Commit | Line | Data |
---|---|---|
3836cd2d KZ |
1 | /* |
2 | * No copyright is claimed. This code is in the public domain; do with | |
3 | * it what you wish. | |
4 | * | |
5 | * Written by Karel Zak <kzak@redhat.com> | |
6 | */ | |
18b3e549 KZ |
7 | #include "c.h" |
8 | #include "nls.h" | |
9 | ||
05dd1d1d | 10 | #include "swapheader.h" |
18b3e549 KZ |
11 | #include "swapprober.h" |
12 | ||
13 | blkid_probe get_swap_prober(const char *devname) | |
14 | { | |
15 | blkid_probe pr; | |
16 | int rc; | |
17 | const char *version = NULL; | |
18 | char *swap_filter[] = { "swap", NULL }; | |
19 | ||
20 | pr = blkid_new_probe_from_filename(devname); | |
21 | if (!pr) { | |
22 | warn(_("%s: unable to probe device"), devname); | |
23 | return NULL; | |
24 | } | |
25 | ||
26 | blkid_probe_enable_superblocks(pr, TRUE); | |
27 | blkid_probe_set_superblocks_flags(pr, | |
28 | BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | | |
29 | BLKID_SUBLKS_VERSION); | |
30 | ||
31 | blkid_probe_filter_superblocks_type(pr, BLKID_FLTR_ONLYIN, swap_filter); | |
32 | ||
33 | rc = blkid_do_safeprobe(pr); | |
34 | if (rc == -1) | |
35 | warn(_("%s: unable to probe device"), devname); | |
36 | else if (rc == -2) | |
1c75610f | 37 | warnx(_("%s: ambiguous probing result; use wipefs(8)"), devname); |
18b3e549 KZ |
38 | else if (rc == 1) |
39 | warnx(_("%s: not a valid swap partition"), devname); | |
40 | ||
41 | if (rc == 0) { | |
42 | /* Only the SWAPSPACE2 is supported. */ | |
43 | if (blkid_probe_lookup_value(pr, "VERSION", &version, NULL) == 0 | |
44 | && version | |
ad296391 | 45 | && strcmp(version, stringify_value(SWAP_VERSION)) != 0) |
18b3e549 KZ |
46 | warnx(_("%s: unsupported swap version '%s'"), |
47 | devname, version); | |
48 | else | |
49 | return pr; | |
50 | } | |
51 | ||
52 | blkid_free_probe(pr); | |
53 | return NULL; | |
54 | } |