summaryrefslogtreecommitdiff
path: root/userland/minibox
diff options
context:
space:
mode:
Diffstat (limited to 'userland/minibox')
-rw-r--r--userland/minibox/utilities/sh/ast.c3
-rw-r--r--userland/minibox/utilities/sh/lexer.c3
-rw-r--r--userland/minibox/utilities/sh/lexer.h1
3 files changed, 6 insertions, 1 deletions
diff --git a/userland/minibox/utilities/sh/ast.c b/userland/minibox/utilities/sh/ast.c
index 98f4818..2b9c151 100644
--- a/userland/minibox/utilities/sh/ast.c
+++ b/userland/minibox/utilities/sh/ast.c
@@ -75,6 +75,9 @@ int parse_command(struct TOKEN **token_ptr, struct AST *cur) {
exit(1);
}
}
+ if (token && TOKEN_NEWLINE == token->type) {
+ token = token->next;
+ }
*token_ptr = token;
return 1;
}
diff --git a/userland/minibox/utilities/sh/lexer.c b/userland/minibox/utilities/sh/lexer.c
index 40e7211..d7f00c7 100644
--- a/userland/minibox/utilities/sh/lexer.c
+++ b/userland/minibox/utilities/sh/lexer.c
@@ -50,6 +50,7 @@ int parse_operand(struct sv *code_ptr, struct TOKEN *cur) {
TRY_PARSE_STRING(">", TOKEN_STREAM);
TRY_PARSE_STRING("|", TOKEN_PIPE);
TRY_PARSE_STRING("&", TOKEN_BACKGROUND);
+ TRY_PARSE_STRING("\n", TOKEN_NEWLINE);
// Failed to parse
return 0;
@@ -63,7 +64,7 @@ void skip_whitespace_and_comment(struct sv *s) {
struct sv start;
do {
start = *s;
- *s = sv_skip_chars(*s, " \t\n\r");
+ *s = sv_skip_chars(*s, " \t\r");
if (!sv_partial_eq(*s, C_TO_SV("#"))) {
return;
}
diff --git a/userland/minibox/utilities/sh/lexer.h b/userland/minibox/utilities/sh/lexer.h
index 887c923..4a7e61c 100644
--- a/userland/minibox/utilities/sh/lexer.h
+++ b/userland/minibox/utilities/sh/lexer.h
@@ -12,6 +12,7 @@ typedef enum {
TOKEN_STREAM,
TOKEN_STREAM_APPEND,
TOKEN_BACKGROUND,
+ TOKEN_NEWLINE,
} token_type_t;
struct TOKEN {