]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add version.c
authorKarel Zak <kzak@redhat.com>
Tue, 13 Jan 2015 12:46:31 +0000 (13:46 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 13 Jan 2015 12:46:31 +0000 (13:46 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
Makefile.am
configure.ac
libfdisk/docs/libfdisk-docs.xml
libfdisk/docs/libfdisk-sections.txt
libfdisk/src/Makemodule.am
libfdisk/src/libfdisk.h.in
libfdisk/src/libfdisk.sym
libfdisk/src/version.c [new file with mode: 0644]

index b993d2aac73552cbce9eac7849f3ff29f3cb796e..391de3dfb136a992197ec793ff2a90f9f55c18e8 100644 (file)
@@ -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)
index 31197abc2e4011cb78942c64fbc99d49d6266135..9ad5274eaf292e596cab976f5795406153e892eb 100644 (file)
@@ -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])
 
index e834fa669985041b1e8f28c08a2ad227ca9e0b55..11692fe3481ee9c18c2988311873fe5a2969b4a6 100644 (file)
@@ -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>
index 62664ad87591d8d3c7522628af01d4b041136208..cd0f7238e011b9c96e1625d7175a0e2346273248 100644 (file)
@@ -1,9 +1,19 @@
 <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
index 18ddec73966996b184bf4c517d73ebc1d0e76a3b..347ea8e11558543ed128d36af034d4530e19a1df 100644 (file)
@@ -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
 
 
index 54e0419eff92a2a1798fda4ef8d87916ce157cac..d2d84f53935a4ae36aa33f82e3161810ebb3e625 100644 (file)
@@ -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
index bf85d4e2a8dbb95aadcf38f9b5b32f25a7cbd4ff..e8dbfd501b620f7bfb7d0c0170f85cd3fb9771ac 100644 (file)
@@ -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 (file)
index 0000000..db8467b
--- /dev/null
@@ -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