[lvm-devel] master - build: rename device-mapper to device_mapper
Zdenek Kabelac
zkabelac at sourceware.org
Sat May 12 16:26:54 UTC 2018
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=79b296139947c43aaf9cc70ae8caf66c1f89f4a6
Commit: 79b296139947c43aaf9cc70ae8caf66c1f89f4a6
Parent: e2c766d37e20231db48e55edb5e23973df590569
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Fri May 11 18:55:55 2018 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Sat May 12 18:18:23 2018 +0200
build: rename device-mapper to device_mapper
As Makefiles already do use target with name 'device-mapper'
rename this new device-mapper dir to non-conflicting name.
We also seem to already use '_' in other dir names.
Also rename device_mapper/Makefile to source for generating Makefile.in
so we can use it for build in other source dirs properly.
---
Makefile.in | 8 +-
configure | 3 +-
configure.ac | 1 +
device-mapper/Makefile | 20 ----
device-mapper/vdo/status.c | 248 --------------------------------------------
device-mapper/vdo/target.h | 68 ------------
device_mapper/Makefile.in | 23 ++++
device_mapper/vdo/status.c | 248 ++++++++++++++++++++++++++++++++++++++++++++
device_mapper/vdo/target.h | 68 ++++++++++++
test/unit/Makefile.in | 2 +-
test/unit/vdo_t.c | 2 +-
11 files changed, 348 insertions(+), 343 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index b0bceb0..c2d5122 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -18,7 +18,7 @@ top_builddir = @top_builddir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
-SUBDIRS = conf daemons include lib libdaemon libdm man scripts tools
+SUBDIRS = conf daemons include lib libdaemon libdm man scripts device_mapper tools
ifeq ("@UDEV_RULES@", "yes")
SUBDIRS += udev
@@ -43,7 +43,7 @@ endif
ifeq ($(MAKECMDGOALS),distclean)
SUBDIRS = conf include man test scripts \
libdaemon lib tools daemons libdm \
- udev po liblvm python
+ udev po liblvm python device_mapper
tools.distclean: test.distclean
endif
DISTCLEAN_DIRS += lcov_reports*
@@ -61,7 +61,7 @@ po: tools daemons
man: tools
all_man: tools
scripts: liblvm libdm
-test: lib
+test: tools daemons
unit-test: lib
run-unit-test: unit-test
@@ -99,7 +99,7 @@ endif
DISTCLEAN_TARGETS += cscope.out
CLEAN_DIRS += autom4te.cache
-check check_system check_cluster check_local check_lvmetad check_lvmpolld check_lvmlockd_test check_lvmlockd_dlm check_lvmlockd_sanlock unit-test run-unit-test: all
+check check_system check_cluster check_local check_lvmetad check_lvmpolld check_lvmlockd_test check_lvmlockd_dlm check_lvmlockd_sanlock unit-test run-unit-test: test
$(MAKE) -C test $(@)
conf.generate man.generate: tools
diff --git a/configure b/configure
index e874932..ed00809 100755
--- a/configure
+++ b/configure
@@ -15559,7 +15559,7 @@ _ACEOF
################################################################################
-ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/lvm2/Makefile daemons/dmeventd/plugins/raid/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile daemons/dmeventd/plugins/thin/Makefile daemons/dmfilemapd/Makefile daemons/lvmdbusd/Makefile daemons/lvmdbusd/lvmdbusd daemons/lvmdbusd/lvmdb.py daemons/lvmdbusd/lvm_shell_proxy.py daemons/lvmdbusd/path.py daemons/lvmetad/Makefile daemons/lvmpolld/Makefile daemons/lvmlockd/Makefile conf/Makefile conf/example.conf conf/lvmlocal.conf conf/command_profile_template.profile conf/metadata_profile_template.profile include/.symlinks include/Makefile lib/Makefile lib/locking/Makefile include/lvm-version.h libdaemon/Makefile libdaemon/client/Makefile libdaemon/server/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/
Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile python/Makefile python/setup.py scripts/blkdeactivate.sh scripts/blk_availability_init_red_hat scripts/blk_availability_systemd_red_hat.service scripts/clvmd_init_red_hat scripts/cmirrord_init_red_hat scripts/com.redhat.lvmdbus1.service scripts/dm_event_systemd_red_hat.service scripts/dm_event_systemd_red_hat.socket scripts/lvm2_cluster_activation_red_hat.sh scripts/lvm2_cluster_activation_systemd_red_hat.service scripts/lvm2_clvmd_systemd_red_hat.service scripts/lvm2_cmirrord_systemd_red_hat.service scripts/lvm2_lvmdbusd_systemd_red_hat.service scripts/lvm2_lvmetad_init_red_hat scripts/lvm2_lvmetad_systemd_red_hat.service scripts/lvm2_lvmetad_systemd_red_hat.socket scripts/lvm2_lvmpolld_init_red_hat scripts/lvm2_lvmpolld_systemd_red_hat.service scripts/lvm2_lvmpolld_systemd_red_hat.socket scripts/lvm2_lvmlockd_systemd_red_hat.service scripts/lvm2_lvmlocking_systemd_red_hat.service scripts/lvm2_monitoring_init_red_hat scripts/lv
m2_monitoring_systemd_red_hat.service scripts/lvm2_pvscan_systemd_red_hat at .service scripts/lvm2_tmpfiles_red_hat.conf scripts/lvmdump.sh scripts/Makefile test/Makefile test/api/Makefile test/unit/Makefile tools/Makefile udev/Makefile"
+ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/lvm2/Makefile daemons/dmeventd/plugins/raid/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile daemons/dmeventd/plugins/thin/Makefile daemons/dmfilemapd/Makefile daemons/lvmdbusd/Makefile daemons/lvmdbusd/lvmdbusd daemons/lvmdbusd/lvmdb.py daemons/lvmdbusd/lvm_shell_proxy.py daemons/lvmdbusd/path.py daemons/lvmetad/Makefile daemons/lvmpolld/Makefile daemons/lvmlockd/Makefile device_mapper/Makefile conf/Makefile conf/example.conf conf/lvmlocal.conf conf/command_profile_template.profile conf/metadata_profile_template.profile include/.symlinks include/Makefile lib/Makefile lib/locking/Makefile include/lvm-version.h libdaemon/Makefile libdaemon/client/Makefile libdaemon/server/Makefile libdm/Makefile libdm/
libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile python/Makefile python/setup.py scripts/blkdeactivate.sh scripts/blk_availability_init_red_hat scripts/blk_availability_systemd_red_hat.service scripts/clvmd_init_red_hat scripts/cmirrord_init_red_hat scripts/com.redhat.lvmdbus1.service scripts/dm_event_systemd_red_hat.service scripts/dm_event_systemd_red_hat.socket scripts/lvm2_cluster_activation_red_hat.sh scripts/lvm2_cluster_activation_systemd_red_hat.service scripts/lvm2_clvmd_systemd_red_hat.service scripts/lvm2_cmirrord_systemd_red_hat.service scripts/lvm2_lvmdbusd_systemd_red_hat.service scripts/lvm2_lvmetad_init_red_hat scripts/lvm2_lvmetad_systemd_red_hat.service scripts/lvm2_lvmetad_systemd_red_hat.socket scripts/lvm2_lvmpolld_init_red_hat scripts/lvm2_lvmpolld_systemd_red_hat.service scripts/lvm2_lvmpolld_systemd_red_hat.socket scripts/lvm2_lvmlockd_systemd_red_hat.service scripts/lvm2_lvmlocking_systemd_red_hat.service scripts/lvm2_monitoring_
init_red_hat scripts/lvm2_monitoring_systemd_red_hat.service scripts/lvm2_pvscan_systemd_red_hat at .service scripts/lvm2_tmpfiles_red_hat.conf scripts/lvmdump.sh scripts/Makefile test/Makefile test/api/Makefile test/unit/Makefile tools/Makefile udev/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -16276,6 +16276,7 @@ do
"daemons/lvmetad/Makefile") CONFIG_FILES="$CONFIG_FILES daemons/lvmetad/Makefile" ;;
"daemons/lvmpolld/Makefile") CONFIG_FILES="$CONFIG_FILES daemons/lvmpolld/Makefile" ;;
"daemons/lvmlockd/Makefile") CONFIG_FILES="$CONFIG_FILES daemons/lvmlockd/Makefile" ;;
+ "device_mapper/Makefile") CONFIG_FILES="$CONFIG_FILES device_mapper/Makefile" ;;
"conf/Makefile") CONFIG_FILES="$CONFIG_FILES conf/Makefile" ;;
"conf/example.conf") CONFIG_FILES="$CONFIG_FILES conf/example.conf" ;;
"conf/lvmlocal.conf") CONFIG_FILES="$CONFIG_FILES conf/lvmlocal.conf" ;;
diff --git a/configure.ac b/configure.ac
index 5738b05..41e612f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2108,6 +2108,7 @@ daemons/lvmdbusd/path.py
daemons/lvmetad/Makefile
daemons/lvmpolld/Makefile
daemons/lvmlockd/Makefile
+device_mapper/Makefile
conf/Makefile
conf/example.conf
conf/lvmlocal.conf
diff --git a/device-mapper/Makefile b/device-mapper/Makefile
deleted file mode 100644
index 76e19f0..0000000
--- a/device-mapper/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2018 Red Hat, Inc. All rights reserved.
-#
-# This file is part of LVM2.
-#
-# This copyrighted material is made available to anyone wishing to use,
-# modify, copy, or redistribute it subject to the terms and conditions
-# of the GNU General Public License v.2.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-DM_SOURCE=\
- device-mapper/vdo/status.c
-
-DM_DEPENDS=$(subst .c,.d,$(DM_SOURCE))
-DM_OBJECTS=$(DM_SOURCE:%.c=%.o)
-CLEAN_TARGETS+=$(DM_DEPENDS) $(DM_OBJECTS)
-
--include $(DM_DEPENDS)
diff --git a/device-mapper/vdo/status.c b/device-mapper/vdo/status.c
deleted file mode 100644
index 157111f..0000000
--- a/device-mapper/vdo/status.c
+++ /dev/null
@@ -1,248 +0,0 @@
-#include "target.h"
-
-// For DM_ARRAY_SIZE!
-#include "libdevmapper.h"
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-//----------------------------------------------------------------
-
-static char *_tok_cpy(const char *b, const char *e)
-{
- char *new = malloc((e - b) + 1);
- char *ptr = new;
-
- if (new) {
- while (b != e)
- *ptr++ = *b++;
- *ptr = '\0';
- }
-
- return new;
-}
-
-static bool _tok_eq(const char *b, const char *e, const char *str)
-{
- while (b != e) {
- if (!*str || *b != *str)
- return false;
-
- b++;
- str++;
- }
-
- return !*str;
-}
-
-static bool _parse_operating_mode(const char *b, const char *e, void *context)
-{
- static struct {
- const char *str;
- enum vdo_operating_mode mode;
- } _table[] = {
- {"recovering", VDO_MODE_RECOVERING},
- {"read-only", VDO_MODE_READ_ONLY},
- {"normal", VDO_MODE_NORMAL}
- };
-
- enum vdo_operating_mode *r = context;
- unsigned i;
- for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
- if (_tok_eq(b, e, _table[i].str)) {
- *r = _table[i].mode;
- return true;
- }
- }
-
- return false;
-}
-
-static bool _parse_compression_state(const char *b, const char *e, void *context)
-{
- static struct {
- const char *str;
- enum vdo_compression_state state;
- } _table[] = {
- {"online", VDO_COMPRESSION_ONLINE},
- {"offline", VDO_COMPRESSION_OFFLINE}
- };
-
- enum vdo_compression_state *r = context;
- unsigned i;
- for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
- if (_tok_eq(b, e, _table[i].str)) {
- *r = _table[i].state;
- return true;
- }
- }
-
- return false;
-}
-
-static bool _parse_recovering(const char *b, const char *e, void *context)
-{
- bool *r = context;
-
- if (_tok_eq(b, e, "recovering"))
- *r = true;
-
- else if (_tok_eq(b, e, "-"))
- *r = false;
-
- else
- return false;
-
- return true;
-}
-
-static bool _parse_index_state(const char *b, const char *e, void *context)
-{
- static struct {
- const char *str;
- enum vdo_index_state state;
- } _table[] = {
- {"error", VDO_INDEX_ERROR},
- {"closed", VDO_INDEX_CLOSED},
- {"opening", VDO_INDEX_OPENING},
- {"closing", VDO_INDEX_CLOSING},
- {"offline", VDO_INDEX_OFFLINE},
- {"online", VDO_INDEX_ONLINE},
- {"unknown", VDO_INDEX_UNKNOWN}
- };
-
- enum vdo_index_state *r = context;
- unsigned i;
- for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
- if (_tok_eq(b, e, _table[i].str)) {
- *r = _table[i].state;
- return true;
- }
- }
-
- return false;
-}
-
-static bool _parse_uint64(const char *b, const char *e, void *context)
-{
- uint64_t *r = context, n;
-
- n = 0;
- while (b != e) {
- if (!isdigit(*b))
- return false;
-
- n = (n * 10) + (*b - '0');
- b++;
- }
-
- *r = n;
- return true;
-}
-
-static const char *_eat_space(const char *b, const char *e)
-{
- while (b != e && isspace(*b))
- b++;
-
- return b;
-}
-
-static const char *_next_tok(const char *b, const char *e)
-{
- const char *te = b;
- while (te != e && !isspace(*te))
- te++;
-
- return te == b ? NULL : te;
-}
-
-static void _set_error(struct vdo_status_parse_result *result, const char *fmt, ...)
- __attribute__ ((format(printf, 2, 3)));
-
-static void _set_error(struct vdo_status_parse_result *result, const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vsnprintf(result->error, sizeof(result->error), fmt, ap);
- va_end(ap);
-}
-
-static bool _parse_field(const char **b, const char *e,
- bool (*p_fn)(const char *, const char *, void *),
- void *field, const char *field_name,
- struct vdo_status_parse_result *result)
-{
- const char *te;
-
- te = _next_tok(*b, e);
- if (!te) {
- _set_error(result, "couldn't get token for '%s'", field_name);
- return false;
- }
-
- if (!p_fn(*b, te, field)) {
- _set_error(result, "couldn't parse '%s'", field_name);
- return false;
- }
-
- *b = _eat_space(te, e);
- return true;
-
-}
-
-bool vdo_status_parse(const char *input, struct vdo_status_parse_result *result)
-{
- const char *b = b = input;
- const char *e = input + strlen(input);
- const char *te;
- struct vdo_status *s = malloc(sizeof(*s));
-
- if (!s) {
- _set_error(result, "out of memory");
- return false;
- }
-
- b = _eat_space(b, e);
- te = _next_tok(b, e);
- if (!te) {
- _set_error(result, "couldn't get token for device");
- free(s);
- return false;
- }
-
- s->device = _tok_cpy(b, te);
- if (!s->device) {
- _set_error(result, "out of memory");
- free(s);
- return false;
- }
-
- b = _eat_space(te, e);
-
-#define XX(p, f, fn) if (!_parse_field(&b, e, p, f, fn, result)) goto bad;
- XX(_parse_operating_mode, &s->operating_mode, "operating mode");
- XX(_parse_recovering, &s->recovering, "recovering");
- XX(_parse_index_state, &s->index_state, "index state");
- XX(_parse_compression_state, &s->compression_state, "compression state");
- XX(_parse_uint64, &s->used_blocks, "used blocks");
- XX(_parse_uint64, &s->total_blocks, "total blocks");
-#undef XX
-
- if (b != e) {
- _set_error(result, "too many tokens");
- goto bad;
- }
-
- result->status = s;
- return true;
-
-bad:
- free(s->device);
- free(s);
- return false;
-}
-
-//----------------------------------------------------------------
diff --git a/device-mapper/vdo/target.h b/device-mapper/vdo/target.h
deleted file mode 100644
index 3137e2c..0000000
--- a/device-mapper/vdo/target.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
- *
- * This file is part of the device-mapper userspace tools.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef DEVICE_MAPPER_VDO_TARGET_H
-#define DEVICE_MAPPER_VDO_TARGET_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-//----------------------------------------------------------------
-
-enum vdo_operating_mode {
- VDO_MODE_RECOVERING,
- VDO_MODE_READ_ONLY,
- VDO_MODE_NORMAL
-};
-
-enum vdo_compression_state {
- VDO_COMPRESSION_ONLINE,
- VDO_COMPRESSION_OFFLINE
-};
-
-enum vdo_index_state {
- VDO_INDEX_ERROR,
- VDO_INDEX_CLOSED,
- VDO_INDEX_OPENING,
- VDO_INDEX_CLOSING,
- VDO_INDEX_OFFLINE,
- VDO_INDEX_ONLINE,
- VDO_INDEX_UNKNOWN
-};
-
-struct vdo_status {
- char *device;
- enum vdo_operating_mode operating_mode;
- bool recovering;
- enum vdo_index_state index_state;
- enum vdo_compression_state compression_state;
- uint64_t used_blocks;
- uint64_t total_blocks;
-};
-
-void vdo_status_destroy(struct vdo_status *s);
-
-#define VDO_MAX_ERROR 256
-
-struct vdo_status_parse_result {
- char error[VDO_MAX_ERROR];
- struct vdo_status *status;
-};
-
-// Parses the status line from the kernel target.
-bool vdo_status_parse(const char *input, struct vdo_status_parse_result *result);
-
-//----------------------------------------------------------------
-
-#endif
diff --git a/device_mapper/Makefile.in b/device_mapper/Makefile.in
new file mode 100644
index 0000000..8d914ff
--- /dev/null
+++ b/device_mapper/Makefile.in
@@ -0,0 +1,23 @@
+# Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+
+SOURCES=\
+ vdo/status.c
+
+include $(top_builddir)/make.tmpl
+
+LIB_NAME = libdevicemapper
+LIB_STATIC = $(LIB_NAME).a
diff --git a/device_mapper/vdo/status.c b/device_mapper/vdo/status.c
new file mode 100644
index 0000000..157111f
--- /dev/null
+++ b/device_mapper/vdo/status.c
@@ -0,0 +1,248 @@
+#include "target.h"
+
+// For DM_ARRAY_SIZE!
+#include "libdevmapper.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+//----------------------------------------------------------------
+
+static char *_tok_cpy(const char *b, const char *e)
+{
+ char *new = malloc((e - b) + 1);
+ char *ptr = new;
+
+ if (new) {
+ while (b != e)
+ *ptr++ = *b++;
+ *ptr = '\0';
+ }
+
+ return new;
+}
+
+static bool _tok_eq(const char *b, const char *e, const char *str)
+{
+ while (b != e) {
+ if (!*str || *b != *str)
+ return false;
+
+ b++;
+ str++;
+ }
+
+ return !*str;
+}
+
+static bool _parse_operating_mode(const char *b, const char *e, void *context)
+{
+ static struct {
+ const char *str;
+ enum vdo_operating_mode mode;
+ } _table[] = {
+ {"recovering", VDO_MODE_RECOVERING},
+ {"read-only", VDO_MODE_READ_ONLY},
+ {"normal", VDO_MODE_NORMAL}
+ };
+
+ enum vdo_operating_mode *r = context;
+ unsigned i;
+ for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
+ if (_tok_eq(b, e, _table[i].str)) {
+ *r = _table[i].mode;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static bool _parse_compression_state(const char *b, const char *e, void *context)
+{
+ static struct {
+ const char *str;
+ enum vdo_compression_state state;
+ } _table[] = {
+ {"online", VDO_COMPRESSION_ONLINE},
+ {"offline", VDO_COMPRESSION_OFFLINE}
+ };
+
+ enum vdo_compression_state *r = context;
+ unsigned i;
+ for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
+ if (_tok_eq(b, e, _table[i].str)) {
+ *r = _table[i].state;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static bool _parse_recovering(const char *b, const char *e, void *context)
+{
+ bool *r = context;
+
+ if (_tok_eq(b, e, "recovering"))
+ *r = true;
+
+ else if (_tok_eq(b, e, "-"))
+ *r = false;
+
+ else
+ return false;
+
+ return true;
+}
+
+static bool _parse_index_state(const char *b, const char *e, void *context)
+{
+ static struct {
+ const char *str;
+ enum vdo_index_state state;
+ } _table[] = {
+ {"error", VDO_INDEX_ERROR},
+ {"closed", VDO_INDEX_CLOSED},
+ {"opening", VDO_INDEX_OPENING},
+ {"closing", VDO_INDEX_CLOSING},
+ {"offline", VDO_INDEX_OFFLINE},
+ {"online", VDO_INDEX_ONLINE},
+ {"unknown", VDO_INDEX_UNKNOWN}
+ };
+
+ enum vdo_index_state *r = context;
+ unsigned i;
+ for (i = 0; i < DM_ARRAY_SIZE(_table); i++) {
+ if (_tok_eq(b, e, _table[i].str)) {
+ *r = _table[i].state;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static bool _parse_uint64(const char *b, const char *e, void *context)
+{
+ uint64_t *r = context, n;
+
+ n = 0;
+ while (b != e) {
+ if (!isdigit(*b))
+ return false;
+
+ n = (n * 10) + (*b - '0');
+ b++;
+ }
+
+ *r = n;
+ return true;
+}
+
+static const char *_eat_space(const char *b, const char *e)
+{
+ while (b != e && isspace(*b))
+ b++;
+
+ return b;
+}
+
+static const char *_next_tok(const char *b, const char *e)
+{
+ const char *te = b;
+ while (te != e && !isspace(*te))
+ te++;
+
+ return te == b ? NULL : te;
+}
+
+static void _set_error(struct vdo_status_parse_result *result, const char *fmt, ...)
+ __attribute__ ((format(printf, 2, 3)));
+
+static void _set_error(struct vdo_status_parse_result *result, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprintf(result->error, sizeof(result->error), fmt, ap);
+ va_end(ap);
+}
+
+static bool _parse_field(const char **b, const char *e,
+ bool (*p_fn)(const char *, const char *, void *),
+ void *field, const char *field_name,
+ struct vdo_status_parse_result *result)
+{
+ const char *te;
+
+ te = _next_tok(*b, e);
+ if (!te) {
+ _set_error(result, "couldn't get token for '%s'", field_name);
+ return false;
+ }
+
+ if (!p_fn(*b, te, field)) {
+ _set_error(result, "couldn't parse '%s'", field_name);
+ return false;
+ }
+
+ *b = _eat_space(te, e);
+ return true;
+
+}
+
+bool vdo_status_parse(const char *input, struct vdo_status_parse_result *result)
+{
+ const char *b = b = input;
+ const char *e = input + strlen(input);
+ const char *te;
+ struct vdo_status *s = malloc(sizeof(*s));
+
+ if (!s) {
+ _set_error(result, "out of memory");
+ return false;
+ }
+
+ b = _eat_space(b, e);
+ te = _next_tok(b, e);
+ if (!te) {
+ _set_error(result, "couldn't get token for device");
+ free(s);
+ return false;
+ }
+
+ s->device = _tok_cpy(b, te);
+ if (!s->device) {
+ _set_error(result, "out of memory");
+ free(s);
+ return false;
+ }
+
+ b = _eat_space(te, e);
+
+#define XX(p, f, fn) if (!_parse_field(&b, e, p, f, fn, result)) goto bad;
+ XX(_parse_operating_mode, &s->operating_mode, "operating mode");
+ XX(_parse_recovering, &s->recovering, "recovering");
+ XX(_parse_index_state, &s->index_state, "index state");
+ XX(_parse_compression_state, &s->compression_state, "compression state");
+ XX(_parse_uint64, &s->used_blocks, "used blocks");
+ XX(_parse_uint64, &s->total_blocks, "total blocks");
+#undef XX
+
+ if (b != e) {
+ _set_error(result, "too many tokens");
+ goto bad;
+ }
+
+ result->status = s;
+ return true;
+
+bad:
+ free(s->device);
+ free(s);
+ return false;
+}
+
+//----------------------------------------------------------------
diff --git a/device_mapper/vdo/target.h b/device_mapper/vdo/target.h
new file mode 100644
index 0000000..3137e2c
--- /dev/null
+++ b/device_mapper/vdo/target.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of the device-mapper userspace tools.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef DEVICE_MAPPER_VDO_TARGET_H
+#define DEVICE_MAPPER_VDO_TARGET_H
+
+#include <stdbool.h>
+#include <stdint.h>
+
+//----------------------------------------------------------------
+
+enum vdo_operating_mode {
+ VDO_MODE_RECOVERING,
+ VDO_MODE_READ_ONLY,
+ VDO_MODE_NORMAL
+};
+
+enum vdo_compression_state {
+ VDO_COMPRESSION_ONLINE,
+ VDO_COMPRESSION_OFFLINE
+};
+
+enum vdo_index_state {
+ VDO_INDEX_ERROR,
+ VDO_INDEX_CLOSED,
+ VDO_INDEX_OPENING,
+ VDO_INDEX_CLOSING,
+ VDO_INDEX_OFFLINE,
+ VDO_INDEX_ONLINE,
+ VDO_INDEX_UNKNOWN
+};
+
+struct vdo_status {
+ char *device;
+ enum vdo_operating_mode operating_mode;
+ bool recovering;
+ enum vdo_index_state index_state;
+ enum vdo_compression_state compression_state;
+ uint64_t used_blocks;
+ uint64_t total_blocks;
+};
+
+void vdo_status_destroy(struct vdo_status *s);
+
+#define VDO_MAX_ERROR 256
+
+struct vdo_status_parse_result {
+ char error[VDO_MAX_ERROR];
+ struct vdo_status *status;
+};
+
+// Parses the status line from the kernel target.
+bool vdo_status_parse(const char *input, struct vdo_status_parse_result *result);
+
+//----------------------------------------------------------------
+
+#endif
diff --git a/test/unit/Makefile.in b/test/unit/Makefile.in
index 017afaa..cb92fb1 100644
--- a/test/unit/Makefile.in
+++ b/test/unit/Makefile.in
@@ -40,7 +40,7 @@ TARGETS += unit-test
# via usage of vpath
vpath %.c \
$(top_srcdir)/base/data-struct \
- $(top_srcdir)/device-mapper/vdo
+ $(top_srcdir)/device_mapper/vdo
include $(top_builddir)/make.tmpl
diff --git a/test/unit/vdo_t.c b/test/unit/vdo_t.c
index 21ecd1a..9c41887 100644
--- a/test/unit/vdo_t.c
+++ b/test/unit/vdo_t.c
@@ -12,7 +12,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "device-mapper/vdo/target.h"
+#include "device_mapper/vdo/target.h"
#include "framework.h"
#include "units.h"
More information about the lvm-devel
mailing list