summaryrefslogtreecommitdiffstats
path: root/liblvm
diff options
context:
space:
mode:
authorDave Wysochanski <dwysocha@redhat.com>2009-07-22 22:24:16 +0000
committerDave Wysochanski <dwysocha@redhat.com>2009-07-22 22:24:16 +0000
commit729f472c04ad06f3bfd1d01c2be0872ac0bb64f0 (patch)
treef0cbff0554fd4e5dc5ea93b690b3de589ec495bf /liblvm
parent7004662395c541bb929533a799e07a861f9bfee2 (diff)
downloadlvm2-729f472c04ad06f3bfd1d01c2be0872ac0bb64f0.tar.gz
lvm2-729f472c04ad06f3bfd1d01c2be0872ac0bb64f0.tar.xz
lvm2-729f472c04ad06f3bfd1d01c2be0872ac0bb64f0.zip
Add lvm_vg_open() to open an existing VG for reading or writing.
lvm_vg_open() calls internal vg_read() function which is the entry point for reading an existing VG. In addition to the mode, we include a 'flags' parameter for future extensions. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Diffstat (limited to 'liblvm')
-rw-r--r--liblvm/.exported_symbols1
-rw-r--r--liblvm/lvm.h23
-rw-r--r--liblvm/lvm_vg.c26
3 files changed, 50 insertions, 0 deletions
diff --git a/liblvm/.exported_symbols b/liblvm/.exported_symbols
index 8f4b6c71..3895c9d3 100644
--- a/liblvm/.exported_symbols
+++ b/liblvm/.exported_symbols
@@ -5,6 +5,7 @@ lvm_vg_create
lvm_vg_extend
lvm_vg_set_extent_size
lvm_vg_write
+lvm_vg_open
lvm_vg_close
lvm_vg_remove
lvm_errno
diff --git a/liblvm/lvm.h b/liblvm/lvm.h
index e179d872..5805546c 100644
--- a/liblvm/lvm.h
+++ b/liblvm/lvm.h
@@ -190,4 +190,27 @@ int lvm_vg_remove(vg_t *vg);
*/
int lvm_vg_close(vg_t *vg);
+/**
+ * Open an existing VG.
+ *
+ * Open a VG for reading or writing.
+ *
+ * \param libh
+ * Handle obtained from lvm_create.
+ *
+ * \param vgname
+ * Name of the VG to open.
+ *
+ * \param mode
+ * Open mode - either "r" (read) or "w" (read/write).
+ * Any other character results in an error with EINVAL set.
+ *
+ * \param flags
+ * Open flags - currently ignored.
+ *
+ * \return non-NULL VG handle (success) or NULL (failure).
+ */
+vg_t *lvm_vg_open(lvm_t libh, const char *vgname, const char *mode,
+ uint32_t flags);
+
#endif /* _LIB_LVM_H */
diff --git a/liblvm/lvm_vg.c b/liblvm/lvm_vg.c
index f4341633..b8348757 100644
--- a/liblvm/lvm_vg.c
+++ b/liblvm/lvm_vg.c
@@ -12,6 +12,9 @@
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <errno.h>
+#include <string.h>
+
#include "lib.h"
#include "lvm.h"
#include "toolcontext.h"
@@ -80,3 +83,26 @@ int lvm_vg_remove(vg_t *vg)
bad:
return 0;
}
+
+vg_t *lvm_vg_open(lvm_t libh, const char *vgname, const char *mode,
+ uint32_t flags)
+{
+ uint32_t internal_flags = 0;
+ vg_t *vg;
+
+ if (!strncmp(mode, "w", 1))
+ internal_flags |= READ_FOR_UPDATE;
+ else if (strncmp(mode, "r", 1)) {
+ log_errno(EINVAL, "Invalid VG open mode");
+ return NULL;
+ }
+
+ vg = vg_read((struct cmd_context *)libh, vgname, NULL, internal_flags);
+ if (vg_read_error(vg)) {
+ /* FIXME: use log_errno either here in inside vg_read */
+ vg_release(vg);
+ return NULL;
+ }
+
+ return vg;
+}