diff options
author | Alasdair Kergon <agk@redhat.com> | 2006-08-18 21:17:18 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2006-08-18 21:17:18 +0000 |
commit | 6711231a13260d13b61ad6e4fb5f8e1f86d87257 (patch) | |
tree | 487290198d5c7e07ec1f2768b1891ce93f2bdf40 /tools/lvmcmdlib.c | |
parent | ade81b8aed9e2c8ab57428c789fc974dc707552d (diff) | |
download | lvm2-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.c | 111 |
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); +} |