summaryrefslogtreecommitdiffstats
path: root/lib/misc/lvm-exec.c
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2009-02-27 23:40:11 +0000
committerAlasdair Kergon <agk@redhat.com>2009-02-27 23:40:11 +0000
commitbc175d28707f2455ac54cac735bedd884de2bd74 (patch)
tree9e86d9b901aeae2a648a5532d169ffbc239de986 /lib/misc/lvm-exec.c
parente2997b7328587b020417ac0cbf61bd1d40bfe456 (diff)
downloadlvm2-bc175d28707f2455ac54cac735bedd884de2bd74.tar.gz
lvm2-bc175d28707f2455ac54cac735bedd884de2bd74.tar.xz
lvm2-bc175d28707f2455ac54cac735bedd884de2bd74.zip
fsadm cleanups & release prep
Diffstat (limited to 'lib/misc/lvm-exec.c')
-rw-r--r--lib/misc/lvm-exec.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/lib/misc/lvm-exec.c b/lib/misc/lvm-exec.c
index 30a455cb..6db834b0 100644
--- a/lib/misc/lvm-exec.c
+++ b/lib/misc/lvm-exec.c
@@ -23,24 +23,18 @@
/*
* Create verbose string with list of parameters
*/
-static char *verbose_args(const char *const argv[])
+static char *_verbose_args(const char *const argv[], char *buf, size_t sz)
{
- char *buf = 0;
int pos = 0;
- size_t sz = 0;
- size_t len;
- int i;
+ int len;
+ unsigned i;
- for (i = 0; argv[i] != NULL; i++) {
- len = strlen(argv[i]);
- if (pos + len >= sz) {
- sz = 64 + (sz + len) * 2;
- if (!(buf = realloc(buf, sz)))
- break;
- }
- if (pos)
- buf[pos++] = ' ';
- memcpy(buf + pos, argv[i], len + 1); /* copy with '\0' */
+ buf[0] = '\0';
+ for (i = 0; argv[i]; i++) {
+ if ((len = dm_snprintf(buf + pos, sz - pos,
+ "%s ", argv[i])) < 0)
+ /* Truncated */
+ break;
pos += len;
}
@@ -54,10 +48,9 @@ int exec_cmd(const char *const argv[])
{
pid_t pid;
int status;
- char *buf = 0;
+ char buf[PATH_MAX * 2];
- log_verbose("Executing: %s", buf = verbose_args(argv));
- free(buf);
+ log_verbose("Executing: %s", _verbose_args(argv, buf, sizeof(buf)));
if ((pid = fork()) == -1) {
log_error("fork failed: %s", strerror(errno));
@@ -67,7 +60,7 @@ int exec_cmd(const char *const argv[])
if (!pid) {
/* Child */
/* FIXME Use execve directly */
- execvp(argv[0], (char **const) argv); /* cast to match execvp prototype */
+ execvp(argv[0], (char **const) argv);
log_sys_error("execvp", argv[0]);
exit(errno);
}