diff options
| author | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-21 12:37:53 +0200 |
|---|---|---|
| committer | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-21 12:37:53 +0200 |
| commit | 2efe642849cf6d45d5413cd77d8cafaf9b32db00 (patch) | |
| tree | 330566486caf1529061c6bac605ced61fc4bfdb7 /redes | |
| parent | ada233bdfc6cb7a59cd00016cef0b263eb30e6e5 (diff) | |
make redirects work
Diffstat (limited to 'redes')
| -rw-r--r-- | redes/lexparse.c | 4 | ||||
| -rw-r--r-- | redes/preproc.c | 20 |
2 files changed, 24 insertions, 0 deletions
diff --git a/redes/lexparse.c b/redes/lexparse.c index 4b0fffc..3a55b33 100644 --- a/redes/lexparse.c +++ b/redes/lexparse.c @@ -162,6 +162,10 @@ TokenVec* lex_level(char* line, size_t* pos, char until, TokenVecVec* tok_seq_po } MaybeSpecialToken m_spec = recognize_spec_token(line, pos); if (m_spec.some) { + MaybeToken m_tok = consolidate_buffer(&buf); + if (m_tok.some) { + push_to_TokenVec(&tokens, m_tok.value); + } push_to_TokenVec(&tokens, (Token){.kind = TOK_SPEC, .as.spec = m_spec.value}); continue; } diff --git a/redes/preproc.c b/redes/preproc.c index 9448831..63e618f 100644 --- a/redes/preproc.c +++ b/redes/preproc.c @@ -78,6 +78,8 @@ Pipeline* process_token_sequence(TokenVec tokens, PipelineVec* pl_pool) { PlCommand* root_pl; for (int i = 0; i < exp_tokens.count; i++) { ExpandedToken curr_tok = *get_from_ExpandedTokenVec(&exp_tokens, i); + ExpandedToken next_tok; + Redirect rd; switch (curr_tok.kind) { case TOK_WORD: push_to_ArgVec(&curr_cmd.args, (Arg){.kind = ARG_LIT, .as.lit_str = curr_tok.as.word}); @@ -94,6 +96,24 @@ Pipeline* process_token_sequence(TokenVec tokens, PipelineVec* pl_pool) { case OP_EOL: push_to_Pipeline(&pl, curr_cmd); break; + case OP_REDIR_R: + next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i); + assert(next_tok.kind == TOK_WORD); + rd = (Redirect){.kind = REDIR_READ, .as.filename = next_tok.as.word}; + push_to_RedirectVec(&curr_cmd.redirects, rd); + break; + case OP_REDIR_W_APPEND: + next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i); + assert(next_tok.kind == TOK_WORD); + rd = (Redirect){.kind = REDIR_WRITE_APPEND, .as.filename = next_tok.as.word}; + push_to_RedirectVec(&curr_cmd.redirects, rd); + break; + case OP_REDIR_W_TRUNC: + next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i); + assert(next_tok.kind == TOK_WORD); + rd = (Redirect){.kind = REDIR_WRITE_TRUNC, .as.filename = next_tok.as.word}; + push_to_RedirectVec(&curr_cmd.redirects, rd); + break; default: exit(63); } |
