diff options
author | Karel Zak | 2015-01-13 13:46:31 +0100 |
---|---|---|
committer | Karel Zak | 2015-01-13 13:46:31 +0100 |
commit | 791da22d0ed6882ac1dae6cdb334910328a5f6b9 (patch) | |
tree | 453f5c5d043d407e418f7cb383822b55b406fdbc | |
parent | libfdisk: fix some typos (diff) | |
download | kernel-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.am | 3 | ||||
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | libfdisk/docs/libfdisk-docs.xml | 2 | ||||
-rw-r--r-- | libfdisk/docs/libfdisk-sections.txt | 12 | ||||
-rw-r--r-- | libfdisk/src/Makemodule.am | 9 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h.in | 9 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.sym | 5 | ||||
-rw-r--r-- | libfdisk/src/version.c | 125 |
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 |