#include #include #include #include #include #include "../ast/ast.h" struct ast_cmd *expand(struct ast_cmd *cmd) { if (cmd == NULL) return NULL; bool in_quotes = false; char *str; size_t len; struct list *l = cmd->cmd; while (l != NULL) { in_quotes = false; str = (char *)l->data; len = strlen(str); for (size_t i = 0; str[i] != '\0'; i++) { if (in_quotes) { // do nothing } else if (str[i] == '\'') { in_quotes = !in_quotes; memmove(&str[i], &str[i + 1], strlen(&str[i + 1]) + 1); } // else if (str[i] == '$' && str[i + 1] != '\0' && str[i + 1] != '$' // && str[i + 1] != ' ') else if (str[i] == '$' && isalnum(str[i + 1])) { // variable expansion } } if (in_quotes) { // error: quote not closed } if (len != strlen(str)) { char *new_str = realloc(str, strlen(str) + 1); if (new_str == NULL) { // error: realloc fail } l->data = new_str; } l = l->next; } return cmd; } int main() { printf("Expansion module test\n"); return 0; }