#include #include #include #include #include "builtins.h" #include "utils/env.h" extern char **environ; void printenv(void) { size_t i = 0; while (environ[i] != NULL) { printf("export %s\n", environ[i]); i += 1; } } void export_var(struct string *arg) { char *equal = strchr(arg->data, '='); if (equal != NULL) { size_t len = equal - arg->data; char *var = malloc(len + 1); memcpy(var, arg->data, len); char *value = equal + 1; var[len] = '\0'; env_set(var, value); free(var); } else { env_set(arg->data, ""); } } int export(struct string **args) { if (args[0] == NULL) { printenv(); fflush(stdout); return 0; } int flagp = 0; size_t i = 0; if (strcmp(args[0]->data, "-p") == 0) { flagp = 1; i += 1; } if (args[1] == NULL && flagp) { printenv(); fflush(stdout); return 0; } while (args[i] != NULL) { export_var(args[i]); i += 1; } fflush(stdout); return 0; }