aboutsummaryrefslogtreecommitdiff
path: root/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd.c')
-rw-r--r--cmd.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/cmd.c b/cmd.c
index f2d88c05..3a948c80 100644
--- a/cmd.c
+++ b/cmd.c
@@ -179,14 +179,14 @@ cmd_unpack_argv(char *buf, size_t len, int argc, char ***argv)
}
char **
-cmd_copy_argv(int argc, char *const *argv)
+cmd_copy_argv(int argc, char **argv)
{
char **new_argv;
int i;
if (argc == 0)
return (NULL);
- new_argv = xcalloc(argc, sizeof *new_argv);
+ new_argv = xcalloc(argc + 1, sizeof *new_argv);
for (i = 0; i < argc; i++) {
if (argv[i] != NULL)
new_argv[i] = xstrdup(argv[i]);
@@ -206,6 +206,32 @@ cmd_free_argv(int argc, char **argv)
free(argv);
}
+char *
+cmd_stringify_argv(int argc, char **argv)
+{
+ char *buf;
+ int i;
+ size_t len;
+
+ if (argc == 0)
+ return (xstrdup(""));
+
+ len = 0;
+ buf = NULL;
+
+ for (i = 0; i < argc; i++) {
+ len += strlen(argv[i]) + 1;
+ buf = xrealloc(buf, 1, len);
+
+ if (i == 0)
+ *buf = '\0';
+ else
+ strlcat(buf, " ", len);
+ strlcat(buf, argv[i], len);
+ }
+ return (buf);
+}
+
struct cmd *
cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause)
{