From 45693e0265d086b031739132d64d240b9afd038e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Fri, 28 Mar 2014 09:32:56 +0100 Subject: Add shell_expand function shell_expand expands shell variables in a string. Signed-off-by: Sascha Hauer --- common/hush.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'common/hush.c') diff --git a/common/hush.c b/common/hush.c index bd534c12f5..1447fdb7f1 100644 --- a/common/hush.c +++ b/common/hush.c @@ -1637,6 +1637,39 @@ static void update_ifs_map(void) mapset(ifs, 2); /* also flow through if quoted */ } +/* + * shell_expand - Expand shell variables in a string. + * @str: The input string containing shell variables like + * $var or ${var} + * Return: The expanded string. Must be freed with free(). + */ +char *shell_expand(char *str) +{ + struct p_context ctx = {}; + o_string o = {}; + char *res, *parsed; + + remove_quotes_in_str(str); + + o.quote = 1; + + initialize_context(&ctx); + + parse_string(&o, &ctx, str); + + parsed = xmemdup(o.data, o.length + 1); + parsed[o.length] = 0; + + res = insert_var_value(parsed); + if (res != parsed) + free(parsed); + + free_pipe_list(ctx.list_head, 0); + b_free(&o); + + return res; +} + /* most recursion does not come through here, the exeception is * from builtin_source() */ static int parse_stream_outer(struct p_context *ctx, struct in_str *inp, int flag) -- cgit v1.2.3