summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2015-01-13 13:46:31 +0100
committerKarel Zak2015-01-13 13:46:31 +0100
commit791da22d0ed6882ac1dae6cdb334910328a5f6b9 (patch)
tree453f5c5d043d407e418f7cb383822b55b406fdbc
parentlibfdisk: fix some typos (diff)
downloadkernel-qcow2-util-linux-791da22d0ed6882ac1dae6cdb334910328a5f6b9.tar.gz
kernel-qcow2-util-linux-791da22d0ed6882ac1dae6cdb334910328a5f6b9.tar.xz
kernel-qcow2-util-linux-791da22d0ed6882ac1dae6cdb334910328a5f6b9.zip
libfdisk: add version.c
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--Makefile.am3
-rw-r--r--configure.ac3
-rw-r--r--libfdisk/docs/libfdisk-docs.xml2
-rw-r--r--libfdisk/docs/libfdisk-sections.txt12
-rw-r--r--libfdisk/src/Makemodule.am9
-rw-r--r--libfdisk/src/libfdisk.h.in9
-rw-r--r--libfdisk/src/libfdisk.sym5
-rw-r--r--libfdisk/src/version.c125
8 files changed, 165 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index b993d2aac..391de3dfb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -127,6 +127,9 @@ edit_cmd = sed \
-e 's|@LIBSMARTCOLS_VERSION[@]|$(LIBSMARTCOLS_VERSION)|g' \
-e 's|@LIBFDISK_PC_REQUIRES[@]|$(LIBFDISK_PC_REQUIRES)|g' \
-e 's|@LIBFDISK_VERSION[@]|$(LIBFDISK_VERSION)|g' \
+ -e 's|@LIBFDISK_MAJOR_VERSION[@]|$(LIBFDISK_MAJOR_VERSION)|g' \
+ -e 's|@LIBFDISK_MINOR_VERSION[@]|$(LIBFDISK_MINOR_VERSION)|g' \
+ -e 's|@LIBFDISK_PATCH_VERSION[@]|$(LIBFDISK_PATCH_VERSION)|g' \
-e 's|@LIBBLKID_VERSION[@]|$(LIBBLKID_VERSION)|g'
CLEANFILES += $(PATHFILES)
diff --git a/configure.ac b/configure.ac
index 31197abc2..9ad5274ea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -880,6 +880,9 @@ AS_IF([test "x$build_libblkid" = xyes],
AC_SUBST([LIBFDISK_PC_REQUIRES])
AC_SUBST([LIBFDISK_VERSION])
+AC_SUBST([LIBFDISK_MAJOR_VERSION], $PACKAGE_VERSION_MAJOR)
+AC_SUBST([LIBFDISK_MINOR_VERSION], $PACKAGE_VERSION_MINOR)
+AC_SUBST([LIBFDISK_PATCH_VERSION], $PACKAGE_VERSION_RELEASE)
AC_SUBST([LIBFDISK_VERSION_INFO])
AC_DEFINE_UNQUOTED([LIBFDISK_VERSION], ["$LIBFDISK_VERSION"], [libfdisk version string])
diff --git a/libfdisk/docs/libfdisk-docs.xml b/libfdisk/docs/libfdisk-docs.xml
index e834fa669..11692fe34 100644
--- a/libfdisk/docs/libfdisk-docs.xml
+++ b/libfdisk/docs/libfdisk-docs.xml
@@ -54,6 +54,8 @@ available from ftp://ftp.kernel.org/pub/linux/utils/util-linux/.
<xi:include href="xml/iter.xml"/>
<xi:include href="xml/utils.xml"/>
<xi:include href="xml/init.xml"/>
+ <xi:include href="xml/version-utils.xml"/>
+
</part>
<index id="api-index-full">
<title>API Index</title>
diff --git a/libfdisk/docs/libfdisk-sections.txt b/libfdisk/docs/libfdisk-sections.txt
index 62664ad87..cd0f7238e 100644
--- a/libfdisk/docs/libfdisk-sections.txt
+++ b/libfdisk/docs/libfdisk-sections.txt
@@ -1,10 +1,20 @@
<SECTION>
<FILE>init</FILE>
-LIBFDISK_VERSION
fdisk_init_debug
</SECTION>
<SECTION>
+<FILE>version-utils</FILE>
+LIBFDISK_MAJOR_VERSION
+LIBFDISK_MINOR_VERSION
+LIBFDISK_PATCH_VERSION
+fdisk_parse_version_string
+fdisk_get_library_version
+fdisk_get_library_features
+LIBFDISK_VERSION
+</SECTION>
+
+<SECTION>
<FILE>ask</FILE>
fdisk_info
fdisk_warn
diff --git a/libfdisk/src/Makemodule.am b/libfdisk/src/Makemodule.am
index 18ddec739..347ea8e11 100644
--- a/libfdisk/src/Makemodule.am
+++ b/libfdisk/src/Makemodule.am
@@ -20,6 +20,7 @@ libfdisk_la_SOURCES = \
libfdisk/src/table.c \
libfdisk/src/iter.c \
libfdisk/src/script.c \
+ libfdisk/src/version.c \
\
libfdisk/src/sun.c \
libfdisk/src/sgi.c \
@@ -64,7 +65,8 @@ if BUILD_LIBFDISK_TESTS
check_PROGRAMS += \
test_fdisk_ask \
test_fdisk_script \
- test_fdisk_utils
+ test_fdisk_utils \
+ test_fdisk_version
libfdisk_tests_cflags = -DTEST_PROGRAM $(libfdisk_la_CFLAGS)
libfdisk_tests_ldflags = libuuid.la -static
@@ -89,6 +91,11 @@ test_fdisk_script_CFLAGS = $(libfdisk_tests_cflags)
test_fdisk_script_LDFLAGS = $(libfdisk_tests_ldflags)
test_fdisk_script_LDADD = $(libfdisk_tests_ldadd)
+test_fdisk_version_SOURCES = libfdisk/src/version.c
+test_fdisk_version_CFLAGS = $(libfdisk_tests_cflags)
+test_fdisk_version_LDFLAGS = $(libfdisk_tests_ldflags)
+test_fdisk_version_LDADD = $(libfdisk_tests_ldadd)
+
endif # BUILD_LIBFDISK_TESTS
diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
index 54e0419ef..d2d84f539 100644
--- a/libfdisk/src/libfdisk.h.in
+++ b/libfdisk/src/libfdisk.h.in
@@ -36,6 +36,10 @@ extern "C" {
*/
#define LIBFDISK_VERSION "@LIBFDISK_VERSION@"
+#define LIBFDISK_MAJOR_VERSION @LIBFDISK_MAJOR_VERSION@
+#define LIBFDISK_MINOR_VERSION @LIBFDISK_MINOR_VERSION@
+#define LIBFDISK_PATCH_VERSION @LIBFDISK_PATCH_VERSION@
+
/**
* fdisk_context:
*
@@ -139,6 +143,11 @@ enum fdisk_asktype {
/* init.c */
extern void fdisk_init_debug(int mask);
+/* version.c */
+extern int fdisk_parse_version_string(const char *ver_string);
+extern int fdisk_get_library_version(const char **ver_string);
+extern int fdisk_get_library_features(const char ***features);
+
/* context.h */
#define FDISK_PLURAL 0
diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
index bf85d4e2a..e8dbfd501 100644
--- a/libfdisk/src/libfdisk.sym
+++ b/libfdisk/src/libfdisk.sym
@@ -71,6 +71,8 @@ global:
fdisk_get_grain_size;
fdisk_get_label;
fdisk_get_last_lba;
+ fdisk_get_library_features;
+ fdisk_get_library_version;
fdisk_get_minimal_iosize;
fdisk_get_nlabels;
fdisk_get_npartitions;
@@ -125,6 +127,7 @@ global:
fdisk_new_unknown_parttype;
fdisk_next_label;
fdisk_override_geometry;
+ fdisk_parse_version_string;
fdisk_partition_cmp_partno;
fdisk_partition_cmp_start;
fdisk_partition_end_follow_default;
@@ -159,7 +162,6 @@ global:
fdisk_partition_size_explicit;
fdisk_partition_start_follow_default;
fdisk_partition_start_is_default;
- fdisk_toggle_partition_flag;
fdisk_partition_to_string;
fdisk_partition_unset_partno;
fdisk_partition_unset_size;
@@ -218,6 +220,7 @@ global:
fdisk_table_remove_partition;
fdisk_table_sort_partitions;
fdisk_table_wrong_order;
+ fdisk_toggle_partition_flag;
fdisk_unref_ask;
fdisk_unref_context;
fdisk_unref_partition;
diff --git a/libfdisk/src/version.c b/libfdisk/src/version.c
new file mode 100644
index 000000000..db8467b51
--- /dev/null
+++ b/libfdisk/src/version.c
@@ -0,0 +1,125 @@
+/*
+ * version.c - Return the version of the library
+ *
+ * Copyright (C) 2015 Karel Zak <kzak@redhat.com>
+ *
+ */
+
+/**
+ * SECTION: version-utils
+ * @title: Version functions
+ * @short_description: functions to get the library version.
+ */
+
+#include <ctype.h>
+
+#include "fdiskP.h"
+
+static const char *lib_version = LIBFDISK_VERSION;
+static const char *lib_features[] = {
+#ifdef CONFIG_LIBFDISK_ASSERT
+ "assert",
+#endif
+ "debug", /* always enabled */
+ NULL
+};
+
+/**
+ * fdisk_parse_version_string:
+ * @ver_string: version string (e.g "2.18.0")
+ *
+ * Returns: release version code.
+ */
+int fdisk_parse_version_string(const char *ver_string)
+{
+ const char *cp;
+ int version = 0;
+
+ assert(ver_string);
+
+ for (cp = ver_string; *cp; cp++) {
+ if (*cp == '.')
+ continue;
+ if (!isdigit(*cp))
+ break;
+ version = (version * 10) + (*cp - '0');
+ }
+ return version;
+}
+
+/**
+ * fdisk_get_library_version:
+ * @ver_string: return pointer to the static library version string if not NULL
+ *
+ * Returns: release version number.
+ */
+int fdisk_get_library_version(const char **ver_string)
+{
+ if (ver_string)
+ *ver_string = lib_version;
+
+ return fdisk_parse_version_string(lib_version);
+}
+
+/**
+ * fdisk_get_library_features:
+ * @features: returns a pointer to the static array of strings, the array is
+ * terminated by NULL.
+ *
+ * Returns: number of items in the features array not including the last NULL,
+ * or less than zero in case of error
+ *
+ * Example:
+ * <informalexample>
+ * <programlisting>
+ * const char *features;
+ *
+ * fdisk_get_library_features(&features);
+ * while (features && *features)
+ * printf("%s\n", *features++);
+ * </programlisting>
+ * </informalexample>
+ *
+ */
+int fdisk_get_library_features(const char ***features)
+{
+ if (!features)
+ return -EINVAL;
+
+ *features = lib_features;
+ return ARRAY_SIZE(lib_features) - 1;
+}
+
+#ifdef TEST_PROGRAM
+int test_version(struct fdisk_test *ts, int argc, char *argv[])
+{
+ const char *ver;
+ const char **features;
+
+ fdisk_get_library_version(&ver);
+
+ printf("Library version: %s\n", ver);
+ printf("Library API version: " LIBFDISK_VERSION "\n");
+ printf("Library features:");
+
+ fdisk_get_library_features(&features);
+ while (features && *features)
+ printf(" %s", *features++);
+
+ if (fdisk_get_library_version(NULL) ==
+ fdisk_parse_version_string(LIBFDISK_VERSION))
+ return 0;
+
+ return -1;
+}
+
+int main(int argc, char *argv[])
+{
+ struct fdisk_test ts[] = {
+ { "--print", test_version, "print versions" },
+ { NULL }
+ };
+
+ return fdisk_run_test(ts, argc, argv);
+}
+#endif