From: Karel Zak Date: Wed, 16 Sep 2009 14:27:32 +0000 (+0200) Subject: libblkid: add mkfs sample X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b95d4a7327c5824e79f80c139b30a35e8619faf1;p=util-linux libblkid: add mkfs sample Signed-off-by: Karel Zak --- diff --git a/shlibs/blkid/samples/.gitignore b/shlibs/blkid/samples/.gitignore index fd2a433c..5ee57393 100644 --- a/shlibs/blkid/samples/.gitignore +++ b/shlibs/blkid/samples/.gitignore @@ -1,2 +1,3 @@ topology partitions +mkfs diff --git a/shlibs/blkid/samples/Makefile.am b/shlibs/blkid/samples/Makefile.am index 126f72f2..cca01de0 100644 --- a/shlibs/blkid/samples/Makefile.am +++ b/shlibs/blkid/samples/Makefile.am @@ -3,5 +3,5 @@ include $(top_srcdir)/config/include-Makefile.am AM_CPPFLAGS += -I$(ul_libblkid_srcdir) AM_LDFLAGS += $(ul_libblkid_la) -noinst_PROGRAMS = topology partitions +noinst_PROGRAMS = topology partitions mkfs diff --git a/shlibs/blkid/samples/mkfs.c b/shlibs/blkid/samples/mkfs.c new file mode 100644 index 00000000..64f213a6 --- /dev/null +++ b/shlibs/blkid/samples/mkfs.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2009 Karel Zak + * + * This file may be redistributed under the terms of the + * GNU Lesser General Public License. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifndef TRUE +# define TRUE 1 +# define FALSE 0 +#endif + +int main(int argc, char *argv[]) +{ + int fd, rc; + char *devname; + blkid_probe pr; + blkid_topology tp; + + if (argc < 2) { + fprintf(stderr, "usage: %s " + "-- checks based on libblkid for mkfs-like programs.\n", + program_invocation_short_name); + return EXIT_FAILURE; + } + + devname = argv[1]; + + fd = open(devname, O_RDONLY); + if (fd < 0) + err(EXIT_FAILURE, "%s: open() failed", devname); + + pr = blkid_new_probe(); + if (!pr) + err(EXIT_FAILURE, "faild to allocate a new libblkid probe"); + + if (blkid_probe_set_device(pr, fd, 0, 0) != 0) + err(EXIT_FAILURE, "failed to assign device to libblkid probe"); + + /* + * check Filesystems / Partitions overwrite + */ + + /* enable partitions probing (superblocks are enabled by default) */ + blkid_probe_enable_partitions(pr, TRUE); + + rc = blkid_do_fullprobe(pr); + if (rc == -1) + errx(EXIT_FAILURE, "%s: blkid_do_fullprobe() failed", devname); + else if (rc == 0) { + const char *type; + + if (!blkid_probe_lookup_value(pr, "TYPE", &type, NULL)) + errx(EXIT_FAILURE, "%s: appears to contain an existing " + "filesystem (%s)", devname, type); + + if (!blkid_probe_lookup_value(pr, "PTTYPE", &type, NULL)) + errx(EXIT_FAILURE, "%s: appears to contain an partition " + "table (%s)", devname, type); + } + + /* + * get topology details + */ + tp = blkid_probe_get_topology(pr); + if (!tp) + err(EXIT_FAILURE, "%s: failed to read topology", devname); + + + /* ... your mkfs. code or so ... + + off = blkid_topology_get_alignment_offset(tp); + + + */ + + return EXIT_SUCCESS; +}