diff --git a/WHATS_NEW b/WHATS_NEW index 06c94ef85..bb3e965dd 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.45 - =================================== + Add lib/lvm.h and lib/lvm_base.c for the new library interface. Move tools/version.h to lib/misc/lvm-version.h. Split LVM_VERSION into MAJOR, MINOR, PATCHLEVEL, RELEASE and RELEASE_DATE. Add system_dir parameter to create_toolcontext(). diff --git a/lib/Makefile.in b/lib/Makefile.in index 54092cd2f..47786a779 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -1,6 +1,6 @@ # # Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. -# Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. +# Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # @@ -86,7 +86,8 @@ SOURCES =\ report/report.c \ striped/striped.c \ uuid/uuid.c \ - zero/zero.c + zero/zero.c \ + lvm_base.c ifeq ("@LVM1@", "internal") SOURCES +=\ diff --git a/lib/lvm.h b/lib/lvm.h new file mode 100644 index 000000000..3b60510b0 --- /dev/null +++ b/lib/lvm.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2008,2009 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef _LIB_LVM_H +#define _LIB_LVM_H + +#include "lvm-version.h" + +#include + +struct lvm; /* internal data */ + +/** + * The lvm handle. + */ +typedef struct lvm *lvm_t; + +/** + * Create a LVM handle. + * + * \param system_dir + * Set an alternative LVM system directory. Use NULL to use the + * default value. If the environment variable LVM_SYSTEM_DIR is set, + * it will override any LVM system directory setting. + * \return A valid LVM handle is returned or NULL if there has been a + * memory allocation problem. You have to check if an error occured + * with the lvm_error function. + */ +lvm_t lvm_create(const char *system_dir); + +/** + * Destroy a LVM handle allocated with lvm_create. + * + * \param libh + * Handle obtained from lvm_create. + */ +void lvm_destroy(lvm_t libh); + +/** + * Reload the original configuration from the system directory. + * + * \param libh + * Handle obtained from lvm_create. + */ +int lvm_reload_config(lvm_t libh); + +#endif /* _LIB_LVM_H */ diff --git a/lib/lvm2.h b/lib/lvm2.h deleted file mode 100644 index b18ceadcc..000000000 --- a/lib/lvm2.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2008 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef _LIB_LVM2_H -#define _LIB_LVM2_H - -#include - -/* - * Library Initialisation - * FIXME: For now just #define lvm2_create() and lvm2_destroy() to - * create_toolcontext() and destroy_toolcontext() - */ -struct arg; -struct cmd_context; -struct cmd_context *create_toolcontext(unsigned is_long_lived); -void destroy_toolcontext(struct cmd_context *cmd); - -/* - * lvm2_create -lvm_handle_t lvm2_create(void); - * - * Description: Create an LVM2 handle used in many other APIs. - * - * Returns: - * NULL: Fail - unable to initialise handle. - * non-NULL: Success - valid LVM2 handle returned - */ -#define lvm2_create(X) create_toolcontext(1) - -/* - * lvm2_destroy -void lvm2_destroy(lvm_handle_t h); - * - * Description: Destroy an LVM2 handle allocated with lvm2_create - * - * Parameters: - * - h (IN): handle obtained from lvm2_create - */ -#define lvm2_destroy(X) destroy_toolcontext(X) - -#endif diff --git a/lib/lvm_base.c b/lib/lvm_base.c new file mode 100644 index 000000000..f91753381 --- /dev/null +++ b/lib/lvm_base.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2008,2009 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "lib.h" +#include "lvm.h" +#include "toolcontext.h" +#include "locking.h" +#include "metadata-exported.h" +#include "report.h" + +lvm_t lvm_create(const char *system_dir) +{ + struct cmd_context *cmd; + + /* FIXME: logging bound to handle + */ + + /* create context */ + /* FIXME: split create_toolcontext */ + cmd = create_toolcontext(1, system_dir); + if (!cmd) + return NULL; + /* + * FIXME: if an non memory error occured, return the cmd (maybe some + * cleanup needed). + */ + + /* initialization from lvm_run_command */ + init_error_message_produced(0); + + /* FIXME: locking_type config option needed? */ + /* initialize locking */ + if (!init_locking(-1, cmd)) { + /* FIXME: use EAGAIN as error code here */ + log_error("Locking initialisation failed."); + lvm_destroy((lvm_t) cmd); + return NULL; + } + + return (lvm_t) cmd; +} + +void lvm_destroy(lvm_t libh) +{ + /* FIXME: error handling */ + destroy_toolcontext((struct cmd_context *)libh); +} + +int lvm_reload_config(lvm_t libh) +{ + /* FIXME: re-init locking needed here? */ + return refresh_toolcontext((struct cmd_context *)libh); +} diff --git a/test/api/test.c b/test/api/test.c index de53c46c4..b7429761e 100644 --- a/test/api/test.c +++ b/test/api/test.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -16,7 +16,7 @@ #include #include #include -#include "lvm2.h" +#include "lvm.h" #define MAX_ARGS 64 @@ -48,7 +48,7 @@ static int lvm_split(char *str, int *argc, char **argv, int max) return *argc; } -static int lvmapi_test_shell(void *h) +static int lvmapi_test_shell(lvm_t libh) { int argc, i; char *input = NULL, *args[MAX_ARGS], **argv; @@ -99,18 +99,17 @@ static int lvmapi_test_shell(void *h) int main (int argc, char *argv[]) { - void *h; + lvm_t libh; - h = lvm2_create(); - if (!h) { + libh = lvm_create(NULL); + if (!libh) { printf("Unable to open lvm library instance\n"); return 1; } - lvmapi_test_shell(h); + lvmapi_test_shell(libh); - if (h) - lvm2_destroy(h); + lvm_destroy(libh); return 0; }