summaryrefslogtreecommitdiff
path: root/tools/lvmcmdlib.c
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2006-08-18 21:17:18 +0000
committerAlasdair Kergon <agk@redhat.com>2006-08-18 21:17:18 +0000
commit6711231a13260d13b61ad6e4fb5f8e1f86d87257 (patch)
tree487290198d5c7e07ec1f2768b1891ce93f2bdf40 /tools/lvmcmdlib.c
parentade81b8aed9e2c8ab57428c789fc974dc707552d (diff)
downloadlvm2-6711231a13260d13b61ad6e4fb5f8e1f86d87257.tar.gz
Move CMDLIB code into separate file and record whether static build.
Diffstat (limited to 'tools/lvmcmdlib.c')
-rw-r--r--tools/lvmcmdlib.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/tools/lvmcmdlib.c b/tools/lvmcmdlib.c
new file mode 100644
index 000000000..b0c2913e4
--- /dev/null
+++ b/tools/lvmcmdlib.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
+ * Copyright (C) 2004 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "tools.h"
+#include "lvm2cmdline.h"
+#include "label.h"
+#include "version.h"
+
+#include "stub.h"
+#include "lvm2cmd.h"
+
+#include <signal.h>
+#include <syslog.h>
+#include <libgen.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <sys/resource.h>
+
+void *cmdlib_lvm2_init(unsigned is_static)
+{
+ struct cmd_context *cmd;
+
+ lvm_register_commands();
+
+ if (!(cmd = init_lvm(is_static)))
+ return NULL;
+
+ return (void *) cmd;
+}
+
+int lvm2_run(void *handle, const char *cmdline)
+{
+ int argc, ret, oneoff = 0;
+ char *args[MAX_ARGS], **argv, *cmdcopy = NULL;
+ struct cmd_context *cmd;
+
+ argv = args;
+
+ if (!handle) {
+ oneoff = 1;
+ if (!(handle = lvm2_init())) {
+ log_error("Handle initialisation failed.");
+ return ECMD_FAILED;
+ }
+ }
+
+ cmd = (struct cmd_context *) handle;
+
+ cmd->argv = argv;
+
+ if (!(cmdcopy = dm_strdup(cmdline))) {
+ log_error("Cmdline copy failed.");
+ ret = ECMD_FAILED;
+ goto out;
+ }
+
+ if (lvm_split(cmdcopy, &argc, argv, MAX_ARGS) == MAX_ARGS) {
+ log_error("Too many arguments. Limit is %d.", MAX_ARGS);
+ ret = EINVALID_CMD_LINE;
+ goto out;
+ }
+
+ if (!argc) {
+ log_error("No command supplied");
+ ret = EINVALID_CMD_LINE;
+ goto out;
+ }
+
+ ret = lvm_run_command(cmd, argc, argv);
+
+ out:
+ dm_free(cmdcopy);
+
+ if (oneoff)
+ lvm2_exit(handle);
+
+ return ret;
+}
+
+void lvm2_log_level(void *handle, int level)
+{
+ struct cmd_context *cmd = (struct cmd_context *) handle;
+
+ cmd->default_settings.verbose = level - VERBOSE_BASE_LEVEL;
+
+ return;
+}
+
+void lvm2_log_fn(lvm2_log_fn_t log_fn)
+{
+ init_log_fn(log_fn);
+}
+
+void lvm2_exit(void *handle)
+{
+ struct cmd_context *cmd = (struct cmd_context *) handle;
+
+ lvm_fin(cmd);
+}