diff options
| author | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-22 01:36:49 +0200 |
|---|---|---|
| committer | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-22 01:36:49 +0200 |
| commit | f67ef17c65aa5acc27c8bb148c2a0c76987c1f00 (patch) | |
| tree | 35d4c86b8c383b660e306596b3c931d5a68f156e /src/exec.c | |
| parent | 6b1cb479a7b8939e8d38479191b4ce7447033b5f (diff) | |
add more builtins
Diffstat (limited to 'src/exec.c')
| -rw-r--r-- | src/exec.c | 25 |
1 files changed, 22 insertions, 3 deletions
@@ -26,9 +26,15 @@ MaybeStrPair parse_assignment(char* token) { bool handle_builtin(ExecutableCommand cmd, ShellState* shstate) { - + MaybeStrPair m_assignment; assert(cmd.args[0] != NULL); // TODO: handle id=value assignments + + m_assignment = parse_assignment(cmd.args[0]); + if (m_assignment.some) { + set_map_pair(&shstate->shell_vars, m_assignment.value); + return true; + } if (strcmp(cmd.args[0], "exit") == 0) { exit(0); @@ -38,16 +44,29 @@ bool handle_builtin(ExecutableCommand cmd, ShellState* shstate) { return true; } else if (strcmp(cmd.args[0], "alias") == 0) { // TODO: if no arg1 -> print alias list - MaybeStrPair m_assignment = parse_assignment(cmd.args[1]); + m_assignment = parse_assignment(cmd.args[1]); assert(m_assignment.some); set_map_pair(&shstate->aliases, m_assignment.value); return true; + } else if (strcmp(cmd.args[0], "export") == 0) { + m_assignment = parse_assignment(cmd.args[1]); + assert(m_assignment.some); + setenv(m_assignment.value.key, m_assignment.value.val, 1); + return true; + } else if (strcmp(cmd.args[0], "unalias") == 0) { + assert(cmd.args[1] != NULL); + unset_map_key(&shstate->aliases, cmd.args[1]); + return true; + } else if (strcmp(cmd.args[0], "unset") == 0) { + assert(cmd.args[1] != NULL); + unset_map_key(&shstate->shell_vars, cmd.args[1]); + return true; } return false; } void execute_cmd(ExecutableCommand cmd, int* pgid) { - + pid_t pid = fork(); if (pid == 0) { |
