summaryrefslogtreecommitdiff
path: root/shell/hush.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/hush.c')
-rw-r--r--shell/hush.c261
1 files changed, 123 insertions, 138 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 58100d4..ca854c2 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -20,7 +20,7 @@
* rewrites.
*
* Other credits:
- * b_addchr() derived from similar w_addchar function in glibc-2.2
+ * o_addchr() derived from similar w_addchar function in glibc-2.2
* setup_redirect(), redirect_opt_num(), and big chunks of main()
* and many builtins derived from contributions by Erik Andersen
* miscellaneous bugfixes from Matt Kraai
@@ -293,10 +293,6 @@ struct child_prog {
smallint is_stopped; /* is the program currently running? */
struct redir_struct *redirects; /* I/O redirections */
struct pipe *family; /* pointer back to the child's parent pipe */
- //sp counting seems to be broken... so commented out, grep for '//sp:'
- //sp: int sp; /* number of SPECIAL_VAR_SYMBOL */
- //seems to be unused, grep for '//pt:'
- //pt: int parse_type;
};
/* argv vector may contain variable references (^Cvar^C, ^C0^C etc)
* and on execution these are substituted with their values.
@@ -361,8 +357,8 @@ struct in_str {
int (*get) (struct in_str *);
int (*peek) (struct in_str *);
};
-#define b_getch(input) ((input)->get(input))
-#define b_peek(input) ((input)->peek(input))
+#define i_getch(input) ((input)->get(input))
+#define i_peek(input) ((input)->peek(input))
enum {
CHAR_ORDINARY = 0,
@@ -533,12 +529,12 @@ static int done_pipe(struct p_context *ctx, pipe_style type);
static int redirect_dup_num(struct in_str *input);
static int redirect_opt_num(o_string *o);
#if ENABLE_HUSH_TICK
-static int process_command_subs(o_string *dest, /*struct p_context *ctx,*/
+static int process_command_subs(o_string *dest,
struct in_str *input, const char *subst_end);
#endif
static int parse_group(o_string *dest, struct p_context *ctx, struct in_str *input, int ch);
static const char *lookup_param(const char *src);
-static int handle_dollar(o_string *dest, /*struct p_context *ctx,*/
+static int handle_dollar(o_string *dest,
struct in_str *input);
static int parse_stream(o_string *dest, struct p_context *ctx, struct in_str *input0, const char *end_trigger);
/* setup: */
@@ -1175,7 +1171,7 @@ static int builtin_unset(char **argv)
*/
#define B_CHUNK (32 * sizeof(char*))
-static void b_reset(o_string *o)
+static void o_reset(o_string *o)
{
o->length = 0;
o->nonnull = 0;
@@ -1183,13 +1179,13 @@ static void b_reset(o_string *o)
o->data[0] = '\0';
}
-static void b_free(o_string *o)
+static void o_free(o_string *o)
{
free(o->data);
memset(o, 0, sizeof(*o));
}
-static void b_grow_by(o_string *o, int len)
+static void o_grow_by(o_string *o, int len)
{
if (o->length + len > o->maxlen) {
o->maxlen += (2*len > B_CHUNK ? 2*len : B_CHUNK);
@@ -1197,18 +1193,18 @@ static void b_grow_by(o_string *o, int len)
}
}
-static void b_addchr(o_string *o, int ch)
+static void o_addchr(o_string *o, int ch)
{
- debug_printf("b_addchr: '%c' o->length=%d o=%p\n", ch, o->length, o);
- b_grow_by(o, 1);
+ debug_printf("o_addchr: '%c' o->length=%d o=%p\n", ch, o->length, o);
+ o_grow_by(o, 1);
o->data[o->length] = ch;
o->length++;
o->data[o->length] = '\0';
}
-static void b_addstr(o_string *o, const char *str, int len)
+static void o_addstr(o_string *o, const char *str, int len)
{
- b_grow_by(o, len);
+ o_grow_by(o, len);
memcpy(&o->data[o->length], str, len);
o->length += len;
o->data[o->length] = '\0';
@@ -1217,12 +1213,12 @@ static void b_addstr(o_string *o, const char *str, int len)
/* My analysis of quoting semantics tells me that state information
* is associated with a destination, not a source.
*/
-static void b_addqchr(o_string *o, int ch, int quote)
+static void o_addqchr(o_string *o, int ch, int quote)
{
if (quote && strchr("*?[\\", ch)) {
- b_addchr(o, '\\');
+ o_addchr(o, '\\');
}
- b_addchr(o, ch);
+ o_addchr(o, ch);
}
/* A special kind of o_string for $VAR and `cmd` expansion.
@@ -1232,10 +1228,10 @@ static void b_addqchr(o_string *o, int ch, int quote)
* It means that if list[] needs to grow, data needs to be moved higher up
* but list[i]'s need not be modified.
* NB: remembering how many list[i]'s you have there is crucial.
- * b_finalize_list() operation post-processes this structure - calculates
+ * o_finalize_list() operation post-processes this structure - calculates
* and stores actual char* ptrs in list[]. Oh, it NULL terminates it as well.
*/
-static int b_addptr(o_string *o, int n)
+static int o_save_ptr(o_string *o, int n)
{
char **list = (char**)o->data;
int string_start = ((n + 0xf) & ~0xf) * sizeof(list[0]);
@@ -1258,7 +1254,7 @@ static int b_addptr(o_string *o, int n)
return n + 1;
}
-static int b_get_last_ptr(o_string *o, int n)
+static int o_get_last_ptr(o_string *o, int n)
{
char **list = (char**)o->data;
int string_start = ((n + 0xf) & ~0xf) * sizeof(list[0]);
@@ -1266,12 +1262,12 @@ static int b_get_last_ptr(o_string *o, int n)
return ((int)list[n-1]) + string_start;
}
-static char **b_finalize_list(o_string *o, int n)
+static char **o_finalize_list(o_string *o, int n)
{
char **list = (char**)o->data;
int string_start;
- b_addptr(o, n); /* force growth for list[n] if necessary */
+ o_save_ptr(o, n); /* force growth for list[n] if necessary */
string_start = ((n+1 + 0xf) & ~0xf) * sizeof(list[0]);
list[n] = NULL;
while (n) {
@@ -1282,7 +1278,7 @@ static char **b_finalize_list(o_string *o, int n)
}
#ifdef DEBUG_EXPAND
-static void b_debug_list(const char *prefix, o_string *o, int n)
+static void o_debug_list(const char *prefix, o_string *o, int n)
{
char **list = (char**)o->data;
int string_start = ((n + 0xf) & ~0xf) * sizeof(list[0]);
@@ -1300,7 +1296,7 @@ static void b_debug_list(const char *prefix, o_string *o, int n)
}
}
#else
-#define b_debug_list(prefix, o, n) ((void)0)
+#define o_debug_list(prefix, o, n) ((void)0)
#endif
@@ -1931,7 +1927,6 @@ static int run_pipe(struct pipe *pi)
}
for (i = 0; is_assignment(argv[i]); i++) {
p = expand_string_to_string(argv[i]);
- //sp: child->sp--;
putenv(p);
}
for (x = bltins; x->cmd; x++) {
@@ -1948,7 +1943,6 @@ static int run_pipe(struct pipe *pi)
* things seem to work with glibc. */
setup_redirects(child, squirrel);
debug_printf_exec(": builtin '%s' '%s'...\n", x->cmd, argv[i+1]);
- //sp: if (child->sp) /* btw we can do it unconditionally... */
argv_expanded = expand_strvec_to_strvec(argv + i);
rcode = x->function(argv_expanded) & 0xff;
free(argv_expanded);
@@ -1964,7 +1958,6 @@ static int run_pipe(struct pipe *pi)
setup_redirects(child, squirrel);
save_nofork_data(&nofork_save);
argv_expanded = argv + i;
- //sp: if (child->sp)
argv_expanded = expand_strvec_to_strvec(argv + i);
debug_printf_exec(": run_nofork_applet '%s' '%s'...\n", argv_expanded[0], argv_expanded[1]);
rcode = run_nofork_applet_prime(&nofork_save, a, argv_expanded);
@@ -2549,17 +2542,17 @@ static int expand_on_ifs(o_string *output, int n, const char *str)
while (1) {
int word_len = strcspn(str, ifs);
if (word_len) {
- b_addstr(output, str, word_len); /* store non-ifs chars */
+ o_addstr(output, str, word_len); /* store non-ifs chars */
str += word_len;
}
if (!*str) /* EOL - do not finalize word */
break;
- b_addchr(output, '\0');
- b_debug_list("expand_on_ifs", output, n);
- n = b_addptr(output, n);
+ o_addchr(output, '\0');
+ o_debug_list("expand_on_ifs", output, n);
+ n = o_save_ptr(output, n);
str += strspn(str, ifs); /* skip ifs chars */
}
- b_debug_list("expand_on_ifs[1]", output, n);
+ o_debug_list("expand_on_ifs[1]", output, n);
return n;
}
@@ -2583,15 +2576,15 @@ static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
ored_ch = 0;
debug_printf_expand("expand_vars_to_list: arg '%s'\n", arg);
- b_debug_list("expand_vars_to_list", output, n);
- n = b_addptr(output, n);
- b_debug_list("expand_vars_to_list[0]", output, n);
+ o_debug_list("expand_vars_to_list", output, n);
+ n = o_save_ptr(output, n);
+ o_debug_list("expand_vars_to_list[0]", output, n);
while ((p = strchr(arg, SPECIAL_VAR_SYMBOL)) != NULL) {
o_string subst_result = NULL_O_STRING;
- b_addstr(output, arg, p - arg);
- b_debug_list("expand_vars_to_list[1]", output, n);
+ o_addstr(output, arg, p - arg);
+ o_debug_list("expand_vars_to_list[1]", output, n);
arg = ++p;
p = strchr(p, SPECIAL_VAR_SYMBOL);
@@ -2625,10 +2618,10 @@ static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
if (global_argv[i++][0] && global_argv[i]) {
/* this argv[] is not empty and not last:
* put terminating NUL, start new word */
- b_addchr(output, '\0');
- b_debug_list("expand_vars_to_list[2]", output, n);
- n = b_addptr(output, n);
- b_debug_list("expand_vars_to_list[3]", output, n);
+ o_addchr(output, '\0');
+ o_debug_list("expand_vars_to_list[2]", output, n);
+ n = o_save_ptr(output, n);
+ o_debug_list("expand_vars_to_list[3]", output, n);
}
}
} else
@@ -2636,20 +2629,20 @@ static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
* and in this case should treat it like '$*' - see 'else...' below */
if (first_ch == ('@'|0x80) && !or_mask) { /* quoted $@ */
while (1) {
- b_addstr(output, global_argv[i], strlen(global_argv[i]));
+ o_addstr(output, global_argv[i], strlen(global_argv[i]));
if (++i >= global_argc)
break;
- b_addchr(output, '\0');
- b_debug_list("expand_vars_to_list[4]", output, n);
- n = b_addptr(output, n);
+ o_addchr(output, '\0');
+ o_debug_list("expand_vars_to_list[4]", output, n);
+ n = o_save_ptr(output, n);
}
} else { /* quoted $*: add as one word */
while (1) {
- b_addstr(output, global_argv[i], strlen(global_argv[i]));
+ o_addstr(output, global_argv[i], strlen(global_argv[i]));
if (!global_argv[++i])
break;
if (ifs[0])
- b_addchr(output, ifs[0]);
+ o_addchr(output, ifs[0]);
}
}
break;
@@ -2685,17 +2678,17 @@ static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
} /* else: quoted $VAR, val will be appended below */
}
if (val)
- b_addstr(output, val, strlen(val));
+ o_addstr(output, val, strlen(val));
- b_free(&subst_result);
+ o_free(&subst_result);
arg = ++p;
} /* end of "while (SPECIAL_VAR_SYMBOL is found) ..." */
- b_debug_list("expand_vars_to_list[a]", output, n);
- b_addstr(output, arg, strlen(arg) + 1);
- b_debug_list("expand_vars_to_list[b]", output, n);
+ o_debug_list("expand_vars_to_list[a]", output, n);
+ o_addstr(output, arg, strlen(arg) + 1);
+ o_debug_list("expand_vars_to_list[b]", output, n);
//TESTME
- if (output->length - 1 == b_get_last_ptr(output, n)) { /* expansion is empty */
+ if (output->length - 1 == o_get_last_ptr(output, n)) { /* expansion is empty */
if (!(ored_ch & 0x80)) { /* all vars were not quoted... */
n--;
/* allow to reuse list[n] later without re-growth */
@@ -2717,10 +2710,10 @@ static char **expand_variables(char **argv, char or_mask)
v = argv;
while (*v)
n = expand_vars_to_list(&output, n, *v++, or_mask);
- b_debug_list("expand_variables", &output, n);
+ o_debug_list("expand_variables", &output, n);
/* output.data (malloced) gets returned in "list" */
- list = b_finalize_list(&output, n);
+ list = o_finalize_list(&output, n);
#ifdef DEBUG_EXPAND
{
@@ -3021,7 +3014,7 @@ static int reserved_word(o_string *dest, struct p_context *ctx)
if (ctx->res_w == RES_IN || ctx->res_w == RES_FOR) {
syntax("malformed for"); /* example: 'for if' */
ctx->res_w = RES_SNTX;
- b_reset(dest);
+ o_reset(dest);
return 1;
}
#endif
@@ -3032,7 +3025,7 @@ static int reserved_word(o_string *dest, struct p_context *ctx)
} else if (ctx->res_w == RES_NONE || !(ctx->old_flag & (1 << r->code))) {
syntax(NULL);
ctx->res_w = RES_SNTX;
- b_reset(dest);
+ o_reset(dest);
return 1;
}
ctx->res_w = r->code;
@@ -3047,7 +3040,7 @@ static int reserved_word(o_string *dest, struct p_context *ctx)
*ctx = *old; /* physical copy */
free(old);
}
- b_reset(dest);
+ o_reset(dest);
return 1;
}
return 0;
@@ -3092,7 +3085,7 @@ static int done_word(o_string *dest, struct p_context *ctx)
return 1;
}
- b_reset(dest);
+ o_reset(dest);
if (ctx->pending_redirect) {
/* NB: don't free_strings(ctx->pending_redirect->glob_word) here */
if (ctx->pending_redirect->glob_word
@@ -3151,8 +3144,6 @@ static int done_command(struct p_context *ctx)
/*child->is_stopped = 0;*/
/*child->group = NULL;*/
child->family = pi;
- //sp: /*child->sp = 0;*/
- //pt: child->parse_type = ctx->parse_type;
ctx->child = child;
/* but ctx->pipe and ctx->list_head remain unchanged */
@@ -3190,20 +3181,20 @@ static int done_pipe(struct p_context *ctx, pipe_style type)
static int redirect_dup_num(struct in_str *input)
{
int ch, d = 0, ok = 0;
- ch = b_peek(input);
+ ch = i_peek(input);
if (ch != '&') return -1;
- b_getch(input); /* get the & */
- ch = b_peek(input);
+ i_getch(input); /* get the & */
+ ch = i_peek(input);
if (ch == '-') {
- b_getch(input);
+ i_getch(input);
return -3; /* "-" represents "close me" */
}
while (isdigit(ch)) {
d = d*10 + (ch-'0');
ok = 1;
- b_getch(input);
- ch = b_peek(input);
+ i_getch(input);
+ ch = i_peek(input);
}
if (ok) return d;
@@ -3235,7 +3226,7 @@ static int redirect_opt_num(o_string *o)
}
/* reuse num (and save an int) */
num = atoi(o->data);
- b_reset(o);
+ o_reset(o);
return num;
}
@@ -3285,7 +3276,6 @@ static FILE *generate_stream_from_list(struct pipe *head)
/* Return code is exit status of the process that is run. */
static int process_command_subs(o_string *dest,
- /*struct p_context *ctx,*/
struct in_str *input,
const char *subst_end)
{
@@ -3303,7 +3293,7 @@ static int process_command_subs(o_string *dest,
return retcode; /* syntax error or EOF */
done_word(&result, &inner);
done_pipe(&inner, PIPE_SEQ);
- b_free(&result);
+ o_free(&result);
p = generate_stream_from_list(inner.list_head);
if (p == NULL)
@@ -3313,16 +3303,16 @@ static int process_command_subs(o_string *dest,
/* now send results of command back into original context */
eol_cnt = 0;
- while ((ch = b_getch(&pipe_str)) != EOF) {
+ while ((ch = i_getch(&pipe_str)) != EOF) {
if (ch == '\n') {
eol_cnt++;
continue;
}
while (eol_cnt) {
- b_addqchr(dest, '\n', dest->o_quote);
+ o_addqchr(dest, '\n', dest->o_quote);
eol_cnt--;
}
- b_addqchr(dest, ch, dest->o_quote);
+ o_addqchr(dest, ch, dest->o_quote);
}
debug_printf("done reading from pipe, pclose()ing\n");
@@ -3386,31 +3376,31 @@ static void add_till_backquote(o_string *dest, struct in_str *input);
static void add_till_single_quote(o_string *dest, struct in_str *input)
{
while (1) {
- int ch = b_getch(input);
+ int ch = i_getch(input);
if (ch == EOF)
break;
if (ch == '\'')
break;
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
}
}
/* "...\"...`..`...." - do we need to handle "...$(..)..." too? */
static void add_till_double_quote(o_string *dest, struct in_str *input)
{
while (1) {
- int ch = b_getch(input);
+ int ch = i_getch(input);
if (ch == '"')
break;
if (ch == '\\') { /* \x. Copy both chars. */
- b_addchr(dest, ch);
- ch = b_getch(input);
+ o_addchr(dest, ch);
+ ch = i_getch(input);
}
if (ch == EOF)
break;
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
if (ch == '`') {
add_till_backquote(dest, input);
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
continue;
}
// if (ch == '$') ...
@@ -3433,19 +3423,19 @@ static void add_till_double_quote(o_string *dest, struct in_str *input)
static void add_till_backquote(o_string *dest, struct in_str *input)
{
while (1) {
- int ch = b_getch(input);
+ int ch = i_getch(input);
//bb_error_msg("ADD '%c'", ch);
if (ch == '`')
break;
if (ch == '\\') { /* \x. Copy both chars unless it is \` */
- int ch2 = b_getch(input);
+ int ch2 = i_getch(input);
if (ch2 != '`' && ch2 != '$' && ch2 != '\\')
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
ch = ch2;
}
if (ch == EOF)
break;
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
}
}
/* Process $(cmd) - copy contents until ")" is seen. Complicated by
@@ -3464,7 +3454,7 @@ static void add_till_closing_curly_brace(o_string *dest, struct in_str *input)
{
int count = 0;
while (1) {
- int ch = b_getch(input);
+ int ch = i_getch(input);
if (ch == EOF)
break;
if (ch == '(')
@@ -3472,51 +3462,47 @@ static void add_till_closing_curly_brace(o_string *dest, struct in_str *input)
if (ch == ')')
if (--count < 0)
break;
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
if (ch == '\'') {
add_till_single_quote(dest, input);
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
continue;
}
if (ch == '"') {
add_till_double_quote(dest, input);
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
continue;
}
}
}
#endif /* ENABLE_HUSH_TICK */
-//FIXME: remove ctx and sp
-
/* return code: 0 for OK, 1 for syntax error */
-static int handle_dollar(o_string *dest, /*struct p_context *ctx,*/ struct in_str *input)
+static int handle_dollar(o_string *dest, struct in_str *input)
{
- int ch = b_peek(input); /* first character after the $ */
+ int ch = i_peek(input); /* first character after the $ */
unsigned char quote_mask = dest->o_quote ? 0x80 : 0;
debug_printf_parse("handle_dollar entered: ch='%c'\n", ch);
if (isalpha(ch)) {
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
- //sp: ctx->child->sp++;
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
while (1) {
debug_printf_parse(": '%c'\n", ch);
- b_getch(input);
- b_addchr(dest, ch | quote_mask);
+ i_getch(input);
+ o_addchr(dest, ch | quote_mask);
quote_mask = 0;
- ch = b_peek(input);
+ ch = i_peek(input);
if (!isalnum(ch) && ch != '_')
break;
}
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
} else if (isdigit(ch)) {
make_one_char_var:
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
- //sp: ctx->child->sp++;
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
debug_printf_parse(": '%c'\n", ch);
- b_getch(input);
- b_addchr(dest, ch | quote_mask);
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
+ i_getch(input);
+ o_addchr(dest, ch | quote_mask);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
} else switch (ch) {
case '$': /* pid */
case '!': /* last bg pid */
@@ -3526,12 +3512,11 @@ static int handle_dollar(o_string *dest, /*struct p_context *ctx,*/ struct in_st
case '@': /* args */
goto make_one_char_var;
case '{':
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
- //sp: ctx->child->sp++;
- b_getch(input);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
+ i_getch(input);
/* XXX maybe someone will try to escape the '}' */
while (1) {
- ch = b_getch(input);
+ ch = i_getch(input);
if (ch == '}')
break;
if (!isalnum(ch) && ch != '_') {
@@ -3540,18 +3525,18 @@ static int handle_dollar(o_string *dest, /*struct p_context *ctx,*/ struct in_st
return 1;
}
debug_printf_parse(": '%c'\n", ch);
- b_addchr(dest, ch | quote_mask);
+ o_addchr(dest, ch | quote_mask);
quote_mask = 0;
}
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
break;
#if ENABLE_HUSH_TICK
case '(':
- b_getch(input);
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
- b_addchr(dest, quote_mask | '`');
+ i_getch(input);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, quote_mask | '`');
add_till_closing_curly_brace(dest, input);
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
break;
#endif
case '-':
@@ -3561,7 +3546,7 @@ static int handle_dollar(o_string *dest, /*struct p_context *ctx,*/ struct in_st
return 1;
break;
default:
- b_addqchr(dest, '$', dest->o_quote);
+ o_addqchr(dest, '$', dest->o_quote);
}
debug_printf_parse("handle_dollar return 0\n");
return 0;
@@ -3585,11 +3570,11 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
while (1) {
m = CHAR_IFS;
next = '\0';
- ch = b_getch(input);
+ ch = i_getch(input);
if (ch != EOF) {
m = charmap[ch];
if (ch != '\n')
- next = b_peek(input);
+ next = i_peek(input);
}
debug_printf_parse(": ch=%c (%d) m=%d quote=%d\n",
ch, ch, m, dest->o_quote);
@@ -3601,7 +3586,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
debug_printf_parse("parse_stream return 1: unterminated \"\n");
return 1;
}
- b_addqchr(dest, ch, dest->o_quote);
+ o_addqchr(dest, ch, dest->o_quote);
continue;
}
if (m == CHAR_IFS) {
@@ -3630,13 +3615,13 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
case '#':
if (dest->length == 0 && !dest->o_quote) {
while (1) {
- ch = b_peek(input);
+ ch = i_peek(input);
if (ch == EOF || ch == '\n')
break;
- b_getch(input);
+ i_getch(input);
}
} else {
- b_addqchr(dest, ch, dest->o_quote);
+ o_addqchr(dest, ch, dest->o_quote);
}
break;
case '\\':
@@ -3645,11 +3630,11 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
debug_printf_parse("parse_stream return 1: \\<eof>\n");
return 1;
}
- b_addqchr(dest, '\\', dest->o_quote);
- b_addqchr(dest, b_getch(input), dest->o_quote);
+ o_addqchr(dest, '\\', dest->o_quote);
+ o_addqchr(dest, i_getch(input), dest->o_quote);
break;
case '$':
- if (handle_dollar(dest, /*ctx,*/ input) != 0) {
+ if (handle_dollar(dest, input) != 0) {
debug_printf_parse("parse_stream return 1: handle_dollar returned non-0\n");
return 1;
}
@@ -3657,10 +3642,10 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
case '\'':
dest->nonnull = 1;
while (1) {
- ch = b_getch(input);
+ ch = i_getch(input);
if (ch == EOF || ch == '\'')
break;
- b_addchr(dest, ch);
+ o_addchr(dest, ch);
}
if (ch == EOF) {
syntax("unterminated '");
@@ -3675,10 +3660,10 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
#if ENABLE_HUSH_TICK
case '`': {
//int pos = dest->length;
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
- b_addchr(dest, dest->o_quote ? 0x80 | '`' : '`');
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, dest->o_quote ? 0x80 | '`' : '`');
add_till_backquote(dest, input);
- b_addchr(dest, SPECIAL_VAR_SYMBOL);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
//bb_error_msg("RES '%s'", dest->data + pos);
break;
}
@@ -3689,7 +3674,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
redir_style = REDIRECT_OVERWRITE;
if (next == '>') {
redir_style = REDIRECT_APPEND;
- b_getch(input);
+ i_getch(input);
}
#if 0
else if (next == '(') {
@@ -3706,10 +3691,10 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
redir_style = REDIRECT_INPUT;
if (next == '<') {
redir_style = REDIRECT_HEREIS;
- b_getch(input);
+ i_getch(input);
} else if (next == '>') {
redir_style = REDIRECT_IO;
- b_getch(input);
+ i_getch(input);
}
#if 0
else if (next == '(') {
@@ -3727,7 +3712,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
case '&':
done_word(dest, ctx);
if (next == '&') {
- b_getch(input);
+ i_getch(input);
done_pipe(ctx, PIPE_AND);
} else {
done_pipe(ctx, PIPE_BG);
@@ -3736,7 +3721,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
case '|':
done_word(dest, ctx);
if (next == '|') {
- b_getch(input);
+ i_getch(input);
done_pipe(ctx, PIPE_OR);
} else {
/* we could pick up a file descriptor choice here
@@ -3836,14 +3821,14 @@ static int parse_and_run_stream(struct in_str *inp, int parse_flag)
} else {
if (ctx.old_flag != 0) {
free(ctx.stack);
- b_reset(&temp);
+ o_reset(&temp);
}
temp.nonnull = 0;
temp.o_quote = 0;
inp->p = NULL;
free_pipe_list(ctx.list_head, /* indent: */ 0);
}
- b_free(&temp);
+ o_free(&temp);
} while (rcode != -1 && !(parse_flag & PARSEFLAG_EXIT_FROM_LOOP)); /* loop on syntax errors, return on EOF */
return 0;
}