diff options
author | Karel Zak | 2014-09-22 13:16:25 +0200 |
---|---|---|
committer | Karel Zak | 2014-09-22 13:16:25 +0200 |
commit | 18b3e5495b2bd1d89286f452d1d2952e065dfecd (patch) | |
tree | 008f4099b0814ad1e7408b7de6572fcc804031f8 /lib | |
parent | logger: gettimeofday needs <sys/time.h> (diff) | |
download | kernel-qcow2-util-linux-18b3e5495b2bd1d89286f452d1d2952e065dfecd.tar.gz kernel-qcow2-util-linux-18b3e5495b2bd1d89286f452d1d2952e065dfecd.tar.xz kernel-qcow2-util-linux-18b3e5495b2bd1d89286f452d1d2952e065dfecd.zip |
swapon: split swapon-common.c
swapon - requires libmount and libblkid
swapoff - requires libmount
swaplabel - requires libblkid
This patch add lib/swapprober.c with blkid stuff for swap. It allows
to use and link libblkid only when necessary.
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/swapprober.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/swapprober.c b/lib/swapprober.c new file mode 100644 index 000000000..deb754b8a --- /dev/null +++ b/lib/swapprober.c @@ -0,0 +1,48 @@ + +#include "c.h" +#include "nls.h" + +#include "swapprober.h" + +blkid_probe get_swap_prober(const char *devname) +{ + blkid_probe pr; + int rc; + const char *version = NULL; + char *swap_filter[] = { "swap", NULL }; + + pr = blkid_new_probe_from_filename(devname); + if (!pr) { + warn(_("%s: unable to probe device"), devname); + return NULL; + } + + blkid_probe_enable_superblocks(pr, TRUE); + blkid_probe_set_superblocks_flags(pr, + BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | + BLKID_SUBLKS_VERSION); + + blkid_probe_filter_superblocks_type(pr, BLKID_FLTR_ONLYIN, swap_filter); + + rc = blkid_do_safeprobe(pr); + if (rc == -1) + warn(_("%s: unable to probe device"), devname); + else if (rc == -2) + warnx(_("%s: ambivalent probing result, use wipefs(8)"), devname); + else if (rc == 1) + warnx(_("%s: not a valid swap partition"), devname); + + if (rc == 0) { + /* Only the SWAPSPACE2 is supported. */ + if (blkid_probe_lookup_value(pr, "VERSION", &version, NULL) == 0 + && version + && strcmp(version, stringify_value(SWAP_VERSION))) + warnx(_("%s: unsupported swap version '%s'"), + devname, version); + else + return pr; + } + + blkid_free_probe(pr); + return NULL; +} |