libfdisk: add version.c

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2015-01-13 13:46:31 +01:00
parent dee59a1ee6
commit 791da22d0e
8 changed files with 165 additions and 3 deletions

View 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)

View 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])

View 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>

View 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

View 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

View 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

View 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;

125
libfdisk/src/version.c Normal file
View File

@ -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